Giter Site home page Giter Site logo

crosspt / flutter_plugin_pdf_viewer Goto Github PK

View Code? Open in Web Editor NEW
92.0 7.0 307.0 600 KB

A flutter plugin for handling PDF files. Works on both Android & iOS

License: BSD 3-Clause "New" or "Revised" License

Java 22.00% Ruby 10.17% Objective-C 22.81% Dart 45.02%
flutter flutter-plugin pdf pdf-viewer

flutter_plugin_pdf_viewer's Introduction

flutter_plugin_pdf_viewer

A flutter plugin for handling PDF files. Works on both Android & iOS

Installation

Add flutter_plugin_pdf_viewer as a dependency in your pubspec.yaml file.

flutter_plugin_pdf_viewer: any

Android

No permissions required. Uses application cache directory.

iOS

No permissions required.

How-to:

Load PDF

// Load from assets
PDFDocument doc = await PDFDocument.fromAsset('assets/test.pdf');
 
// Load from URL
PDFDocument doc = await PDFDocument.fromURL('http://www.africau.edu/images/default/sample.pdf');

// Load from file
File file  = File('...');
PDFDocument doc = await PDFDocument.fromFile(file);

Load pages

// Load specific page
PDFPage pageOne = await doc.get(page: _number);

Pre-built viewer

Use the pre-built PDF Viewer

@override
  Widget build(BuildContext context) {
    Scaffold(
        appBar: AppBar(
          title: Text('Example'),
        ),
        body: Center(
        child: _isLoading
            ? Center(child: CircularProgressIndicator())
            : PDFViewer(document: document)),
    );
  }

This code produces the following view:

Demo Screenshot 1


TODO

  • Allow password-protected files
  • Refactor PDFDocument.getAll() method
  • Increase page resolution
  • Add swipe to change page

Third-party packages used

Name Description
path_provider A Flutter plugin for finding commonly used locations on the filesystem. Supports iOS and Android.
flutter_cache_manager A CacheManager to download and cache files in the cache directory of the app. Various settings on how long to keep a file can be changed.
numberpicker NumberPicker is a custom widget designed for choosing an integer or decimal number by scrolling spinners.
flutter_advanced_networkimage An advanced image provider provides caching and retrying for flutter app. Now with zoomable widget and transition to image widget.

flutter_plugin_pdf_viewer's People

Contributors

allanwolski avatar buckeye-interactive avatar crosspt avatar markathomas avatar rwbr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

flutter_plugin_pdf_viewer's Issues

Change page programmatically

I have looked at the get page method of the PDF doc but seems not to know how to use this with PDFViewer.

please is there a way to change the page of the viewer or to set a PDFPage to it. It will be very nice to have if it's not existing

Occasional app crash when loading a PDF on iOS

I get occasional app crashes when loading a PDF on a physical iOS device (iPhone 5 and iPhone 6s). It seems like this often happens after loading a PDF, waiting for it to display, navigating back to the previous page (which displays a list of PDF's), loading another PDF, and so on. Usually after 3-4 PDF's the app suddenly crashes and the log displays this:

version=2.4.0 (Wed Jun 19 11:53:45 2019 +0200) on "ios_dbc"
thread=39683, isolate=main(0x10406a000)
  pc 0x0000000101a0e320 fp 0x000000016f79dcd0 dart::Profiler::DumpStackTrace(void*)
-- End of DumpStackTrace
Lost connection to device.

It happens with PDF's that load okay at other times. I'm loading all my PDF's from URL's using

_doc = await PDFDocument.fromURL(url);

This is on Flutter 1.7.8-hotfix.4, stable channel.

EDIT
After some further testing, it doesn't seem to happen on release builds, only debug.

Error when build iOS with Flutter Version v1.7.0 (Dev Channel)

compiler message:
file:///Users/oliverstannarius/Documents/Tools/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_plugin_pdf_viewer-1.0.6/lib/src/page.dart:33:26: Error: The argument type 'Null Function(dynamic, dynamic)' can't be assigned to the parameter type 'ImageStreamListener'.

  • 'ImageStreamListener' is from 'package:flutter/src/painting/image_stream.dart' ('file:///Users/name/Documents/Tools/flutter/packages/flutter/lib/src/painting/image_stream.dart').
    Try changing the type of the parameter, or casting the argument to 'ImageStreamListener'.
    resolver.addListener((imgInfo, alreadyPainted) {
    ^
    Compiler failed on /Users/name/Documents/Programmierung/FlutterProjects/am_app/lib/main.dart
    Error launching application on iPhone Xs.

Flutter Doctor:
_app$ flutter doctor -v
[✓] Flutter (Channel dev, v1.7.0, on Mac OS X 10.14.5 18F132, locale de-DE)
• Flutter version 1.7.0 at /Users/oliverstannarius/Documents/Tools/flutter
• Framework revision f36a35d20a (4 days ago), 2019-05-31 15:27:56 -0400
• Engine revision a32df2c928
• Dart version 2.3.2 (build 2.3.2-dev.0.0 445a23a9bc)

[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
• Android SDK at /Users/name/Library/Android/sdk/
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-28, build-tools 28.0.3
• ANDROID_HOME = /Users/name/Library/Android/sdk/
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
• All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 10.2.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 10.2.1, Build version 10E1001
• CocoaPods version 1.5.3

[✓] iOS tools - develop for iOS devices
• ios-deploy 1.9.4

[✓] Android Studio (version 3.4)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin version 35.3.1
• Dart plugin version 183.6270
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)

[✓] VS Code (version 1.34.0)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.1.0

[✓] Connected device (2 available)
• SM G930F
• android-arm64 • Android 8.0.0 (API 26)
• iPhone Xs
• com.apple.CoreSimulator.SimRuntime.iOS-12-2 (simulator)

• No issues found!

What can I do?

IndicatorPosition type is not available

It seems I can't use the IndicatorPosition type without explicitly importing viewer.dart

import 'package:flutter_plugin_pdf_viewer/src/viewer.dart';

This gives a warning in IntelliJ. Shouldn't it be reachable by importing normally?

import 'package:flutter_plugin_pdf_viewer/flutter_plugin_pdf_viewer.dart';

does not work on non-English devices

the pdf files does not shown on non-English devices such as Arabic language.
when changing the language of android system to English it works, but in Arabic it does not work.

PDFDocument.fromAsset does not work

I tried to load a PDF-document out of assets folder but it does not work. Exception: java.io.FileNotFoundException: open failed: ENOENT (No such file or directory)

Get Current Page

Not seeing a way to find out what the current page is programmatically. I see there's an indicatorPosition, but I don't see what IndicatorPosition is.

Works perfectly iOS but in Android it gives error

W/System.err(24726): java.io.IOException: Unable to create temporary file, /data/user/0/com.mappdeveloper.usa.our_e_school/cache/.our_e_school/cache/libCachedImageData/12db2cc0-aeb8-11e9-da48-ed04b1df2afe-0.png7920165209647190097.tmp
W/System.err(24726): at java.io.File$TempDirectory.generateFile(File.java:1911)
W/System.err(24726): at java.io.File.createTempFile(File.java:2001)
W/System.err(24726): at pt.tribeiro.flutter_plugin_pdf_viewer.FlutterPluginPdfViewerPlugin.createTempPreview(FlutterPluginPdfViewerPlugin.java:104)
W/System.err(24726): at pt.tribeiro.flutter_plugin_pdf_viewer.FlutterPluginPdfViewerPlugin.getPage(FlutterPluginPdfViewerPlugin.java:141)
W/System.err(24726): at pt.tribeiro.flutter_plugin_pdf_viewer.FlutterPluginPdfViewerPlugin.access$100(FlutterPluginPdfViewerPlugin.java:28)
W/System.err(24726): at pt.tribeiro.flutter_plugin_pdf_viewer.FlutterPluginPdfViewerPlugin$1.run(FlutterPluginPdfViewerPlugin.java:68)
W/System.err(24726): at android.os.Handler.handleCallback(Handler.java:873)
W/System.err(24726): at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err(24726): at android.os.Looper.loop(Looper.java:193)
W/System.err(24726): at android.os.HandlerThread.run(HandlerThread.java:65)
I/flutter (24726): Another exception was thrown: Invalid argument(s) (path): Must not be null
I/flutter (24726): Another exception was thrown: The _ScaffoldLayout custom multichild layout delegate forgot to lay out the following child:
W/System (24726): A resource failed to call close.

Android File Not Found

My app is working fine on iOS emulator, but using an Android emulator or real Android device it is not working. Looking at Flutter's log I am seeing these lines.

W/System.err( 2303): java.io.IOException: open failed: ENOENT (No such file or directory)
W/System.err( 2303): at java.io.File.createNewFile(File.java:939)
W/System.err( 2303): at java.io.File.createTempFile(File.java:1004)
W/System.err( 2303): at pt.tribeiro.flutter_plugin_pdf_viewer.FlutterPluginPdfViewerPlugin.createTempPreview(FlutterPluginPdfViewerPlugin.java:104)

It seems that the problem starts from this point of code (line 104 in FlutterPluginPdfViewerPlugin.java):

file = File.createTempFile(fileName, null, instance.context().getCacheDir());

This line of code fails and it is falling in the catch section, so it is printing the exception stack trace and it returns null. Finally, the PDFViewer shows a blank screen as consequence.

Thanks.

Orientation buggy

Some Pdfs are gonna displayed correctly and some not:

Bildschirmfoto 2019-11-23 um 03 18 59

All my files are horizontal but that one is always vertical? On smaller device screens its horizontal...why?
I played a little bit around with your package, but I don't know what the most clean solution would be...

Compilação falha ao tentar abrir um arquivo com PDFDocumento.fromFile

Quando tento fazer uso do plugin conforme descrito no título, a compilação do app falha, exibindo a seguinte mensagem:

Compiler message:
../../../Programas/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_plugin_pdf_viewer-1.0.6/lib/src/page.dart:33:26: Error: The argument type 'Null Function(dynamic, dynamic)' can't be assigned to the parameter type 'ImageStreamListener'.

  • 'ImageStreamListener' is from 'package:flutter/src/painting/image_stream.dart' ('../../../Programas/flutter/packages/flutter/lib/src/painting/image_stream.dart').
    resolver.addListener((imgInfo, alreadyPainted) {
    ^
    Exception: Errors during snapshot creation: null
    #0 KernelSnapshot.build (package:flutter_tools/src/build_system/targets/dart.dart:182:7)
#1 _BuildInstance._invokeInternal (package:flutter_tools/src/build_system/build_system.dart:526:25) #2 _BuildInstance.invokeTarget. (package:flutter_tools/src/build_system/build_system.dart:481:35) #3 new Future.sync (dart:async/future.dart:222:31) #4 AsyncMemoizer.runOnce (package:async/src/async_memoizer.dart:43:45) #5 _BuildInstance.invokeTarget (package:flutter_tools/src/build_system/build_system.dart:481:21) #6 BuildSystem.build (package:flutter_tools/src/build_system/build_system.dart:419:36) #7 buildWithAssemble (package:flutter_tools/src/bundle.dart:125:48) #8 BundleBuilder.build (package:flutter_tools/src/bundle.dart:75:11) #9 BuildBundleCommand.runCommand (package:flutter_tools/src/commands/build_bundle.dart:126:25) #10 FlutterCommand.verifyThenRunCommand (package:flutter_tools/src/runner/flutter_command.dart:556:18) #11 FlutterCommand.run. (package:flutter_tools/src/runner/flutter_command.dart:456:33) #12 AppContext.run. (package:flutter_tools/src/base/context.dart:157:29) #13 _rootRun (dart:async/zone.dart:1124:13) #14 _CustomZone.run (dart:async/zone.dart:1021:19) #15 _runZoned (dart:async/zone.dart:1516:10) #16 runZoned (dart:async/zone.dart:1463:12) #17 AppContext.run (package:flutter_tools/src/base/context.dart:156:18) #18 FlutterCommand.run (package:flutter_tools/src/runner/flutter_command.dart:446:20) #19 CommandRunner.runCommand (package:args/command_runner.dart:197:27) #20 FlutterCommandRunner.runCommand. (package:flutter_tools/src/runner/flutter_command_runner.dart:416:21) #21 AppContext.run. (package:flutter_tools/src/base/context.dart:157:29) #22 _rootRun (dart:async/zone.dart:1124:13) #23 _CustomZone.run (dart:async/zone.dart:1021:19) #24 _runZoned (dart:async/zone.dart:1516:10) #25 runZoned (dart:async/zone.dart:1463:12) #26 AppContext.run (package:flutter_tools/src/base/context.dart:156:18) #27 FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:367:19) #28 CommandRunner.run. (package:args/command_runner.dart:112:25) #29 new Future.sync (dart:async/future.dart:222:31) #30 CommandRunner.run (package:args/command_runner.dart:112:14) #31 FlutterCommandRunner.run (package:flutter_tools/src/runner/flutter_command_runner.dart:251:18) #32 run.. (package:flutter_tools/runner.dart:63:22) #33 _rootRun (dart:async/zone.dart:1124:13) #34 _CustomZone.run (dart:async/zone.dart:1021:19) #35 _runZoned (dart:async/zone.dart:1516:10) #36 runZoned (dart:async/zone.dart:1500:12) #37 run. (package:flutter_tools/runner.dart:61:18) #38 AppContext.run. (package:flutter_tools/src/base/context.dart:157:29) #39 _rootRun (dart:async/zone.dart:1124:13) #40 _CustomZone.run (dart:async/zone.dart:1021:19) #41 _runZoned (dart:async/zone.dart:1516:10) #42 runZoned (dart:async/zone.dart:1463:12) #43 AppContext.run (package:flutter_tools/src/base/context.dart:156:18) #44 runInContext (package:flutter_tools/src/context_runner.dart:65:24) #45 run (package:flutter_tools/runner.dart:50:10) #46 main (package:flutter_tools/executable.dart:65:9) #47 main (file:///Users/reni/Downloads/Programas/flutter/packages/flutter_tools/bin/flutter_tools.dart:8:3) #48 _startIsolate. (dart:isolate-patch/isolate_patch.dart:303:32) #49 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)

Failed to build bundle.

FAILURE: Build failed with an exception.

  • Where:
    Script '/Users/reni/Downloads/Programas/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 782

  • What went wrong:
    Execution failed for task ':app:compileFlutterBuildDebugX86'.

Process 'command '/Users/reni/Downloads/Programas/flutter/bin/flutter'' finished with non-zero exit value 1

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 16s
Finished with error: Gradle task assembleDebug failed with exit code 1

White background for iOS

Great job with this plugin, @CrossPT

Could you replicate the changes to add a white background in iOS too? I do not know how to do this.
7be5005

Can you increase the image quality generated from the PDF to iOS?

Unhandled Exception Error

Any idea what could be causing this? It appears to be working fine, even with this error.

[VERBOSE-2:ui_dart_state.cc(154)] Unhandled Exception: NoSuchMethodError: The method 'get' was called on null. Receiver: null Tried calling: get(page: 1) #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:50:5) #1 _PDFViewerState._loadPage (package:flutter_plugin_pdf_viewer/src/viewer.dart:63:37) <asynchronous suspension> #2 _PDFViewerState.didChangeDependencies (package:flutter_plugin_pdf_viewer/src/viewer.dart:47:5) #3 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4078:12) #4 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3911:5) #5 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #6 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #7 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5119:14) #8 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #9 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #10 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16) #11 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5) #12 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3916:5) #13 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3911:5) #14 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #15 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #16 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16) #17 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5) #18 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3916:5) #19 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3911:5) #20 ParentDataElement.mount (package:flutter/src/widgets/framework.dart:4306:11) #21 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #22 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5225:32) #23 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #24 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #25 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16) #26 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5) #27 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3916:5) #28 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4080:11) #29 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3911:5) #30 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #31 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #32 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16) #33 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5) #34 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3916:5) #35 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3911:5) #36 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #37 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #38 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16) #39 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5) #40 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3916:5) #41 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4080:11) #42 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3911:5) #43 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #44 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #45 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5119:14) #46 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #47 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #48 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16) #49 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5) #50 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3916:5) #51 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3911:5) #52 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #53 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #54 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5119:14) #55 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #56 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #57 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16) #58 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5) #59 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3916:5) #60 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4080:11) #61 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3911:5) #62 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #63 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #64 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16) #65 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5) #66 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3916:5) #67 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4080:11) #68 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3911:5) #69 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #70 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #71 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16) #72 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5) #73 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3916:5) #74 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3911:5) #75 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #76 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #77 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16) #78 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5) #79 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3916:5) #80 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3911:5) #81 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #82 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #83 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16) #84 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5) #85 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3916:5) #86 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4080:11) #87 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3911:5) #88 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #89 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #90 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16) #91 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5) #92 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3916:5) #93 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4080:11) #94 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3911:5) #95 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #96 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #97 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5119:14) #98 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #99 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #100 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5119:14) #101 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #102 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #103 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16) #104 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5) #105 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3916:5) #106 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3911:5) #107 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #108 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #109 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16) #110 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5) #111 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3916:5) #112 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3911:5) #113 ParentDataElement.mount (package:flutter/src/widgets/framework.dart:4306:11) #114 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #115 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #116 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16) #117 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5) #118 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3916:5) #119 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4080:11) #120 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3911:5) #121 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #122 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #123 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16) #124 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5) #125 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3916:5) #126 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3911:5) #127 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14) #128 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12) #129 SliverMultiBoxAdaptorElement.updateChild (package:flutter/src/widgets/sliver.dart:1181:36) #130 SliverMultiBoxAdaptorElement.createChild.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1166:20) #131 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2320:19) #132 SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:1159:11) #133 RenderSliverMultiBoxAdaptor._createOrObtainChild.<anonymous closure> (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:354:23) #134 RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1735:58) #135 PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:814:15) #136 RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1735:13) #137 RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:343:5) #138 RenderSliverMultiBoxAdaptor.addInitialChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:427:5) #139 RenderSliverFixedExtentBoxAdaptor.performLayout (package:flutter/src/rendering/sliver_fixed_extent_list.dart:178:12) #140 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #141 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:406:13) #142 RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1334:12) #143 RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1252:20) #144 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #145 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #146 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #147 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #148 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #149 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #150 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #151 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #152 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #153 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #154 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #155 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #156 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #157 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:142:11) #158 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:443:7) #159 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:212:7) #160 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:356:14) #161 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #162 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #163 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #164 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #165 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1214:11) #166 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #167 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #168 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #169 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #170 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #171 RenderSliverFixedExtentBoxAdaptor.performLayout (package:flutter/src/rendering/sliver_fixed_extent_list.dart:208:18) #172 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #173 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:406:13) #174 RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1334:12) #175 RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1252:20) #176 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #177 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #178 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #179 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #180 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #181 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #182 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #183 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #184 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #185 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #186 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #187 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #188 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #189 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:142:11) #190 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:443:7) #191 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:212:7) #192 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:356:14) #193 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #194 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #195 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #196 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #197 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1214:11) #198 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #199 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #200 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #201 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #202 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #203 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #204 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #205 RenderStack.performLayout (package:flutter/src/rendering/stack.dart:510:15) #206 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #207 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #208 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #209 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #210 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #211 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #212 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #213 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #214 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #215 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13) #216 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #217 RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3074:14) #218 RenderObject.layout (package:flutter/src/rendering/object.dart:1639:7) #219 RenderStack.performLayout (package:flutter/src/rendering/stack.dart:510:15) #220 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1516:7) #221 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:783:18) #222 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:346:19) #223 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:702:13) #224 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:285:5) #225 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1033:15) #226 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:975:9) #227 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:891:5) #228 _rootRun (dart:async/zone.dart:1124:13) #229 _CustomZone.run (dart:async/zone.dart:1021:19) #230 _CustomZone.runGuarded (dart:async/zone.dart:923:7) #231 _invoke (dart:ui/hooks.dart:236:10) #232 _drawFrame (dart:ui/hooks.dart:194:3)

Runtime error in production app

Google Play recorded this error 3 times in 1 day with different devices.

  • Motorola moto g(6) play (aljeter), Android 8.0
  • Samsung Galaxy J4+ (j4primelte), Android 8.1
  • LGE LG K10 LTE (m253), Android 6.0
java.lang.RuntimeException:
  at io.flutter.embedding.engine.FlutterJNI.ensureAttachedToNative (FlutterJNI.java:514)
  at io.flutter.embedding.engine.FlutterJNI.invokePlatformMessageResponseCallback (FlutterJNI.java:477)
  at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply (DartMessenger.java:129)
  at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success (MethodChannel.java:204)
  at pt.tribeiro.flutter_plugin_pdf_viewer.FlutterPluginPdfViewerPlugin$1.run (FlutterPluginPdfViewerPlugin.java:45)
  at java.lang.Thread.run (Thread.java:764)

error while compiling for ios

no problems on android, but fails when compiling for ios

 ** BUILD FAILED **


Xcode's output:
↳
    === BUILD TARGET FirebaseMessaging OF PROJECT Pods WITH CONFIGURATION Debug ===
    /Users/lockerad/development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_plugin_pdf_viewer-1.0.5/ios/Classes/FlutterPluginPdfViewerPlugin.m:43:24: error: implicit declaration of function 'CGPDFDocumentGetpageCount' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        size_t pageCount = CGPDFDocumentGetpageCount(pdfDoc);
                           ^
    /Users/lockerad/development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_plugin_pdf_viewer-1.0.5/ios/Classes/FlutterPluginPdfViewerPlugin.m:43:24: note: did you mean 'CGPDFDocumentGetPage'?
    In module 'UIKit' imported from /Users/lockerad/Documents/example/ios/Pods/Target Support Files/flutter_plugin_pdf_viewer/flutter_plugin_pdf_viewer-prefix.pch:2:
    In module 'CoreGraphics' imported from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIAccessibility.h:10:
    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.1.sdk/System/Library/Frameworks/CoreGraphics.framework/Headers/CGPDFDocument.h:166:35: note: 'CGPDFDocumentGetPage' declared here
    CG_EXTERN CGPDFPageRef __nullable CGPDFDocumentGetPage(
                                      ^
    /Users/lockerad/development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_plugin_pdf_viewer-1.0.5/ios/Classes/FlutterPluginPdfViewerPlugin.m:43:24: warning: this function declaration is not a prototype [-Wstrict-prototypes]
        size_t pageCount = CGPDFDocumentGetpageCount(pdfDoc);
                           ^
    /Users/lockerad/development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_plugin_pdf_viewer-1.0.5/ios/Classes/FlutterPluginPdfViewerPlugin.m:78:24: error: implicit declaration of function 'CGPDFDocumentGetpageCount' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        size_t pageCount = CGPDFDocumentGetpageCount(pdfDoc);
                           ^
    1 warning and 2 errors generated.

cannot hide bottom navigation

I use this code when load this PDF viewer plugin,

PDFViewer(document: document, showNavigation: false,))

But the result is the screen not loading the PDF, and only the floating center button appear (which should not appear) at the top below appBar.

flutter_webview_plugin The built failed likely due to AndroidX incompatibilities in a plugin.

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:preDebugBuild'.

Android dependency 'androidx.interpolator:interpolator' has different version for the compile (1.0.0-rc01) and runtime (1.0.0) classpath. You should manually set the same version via DependencyResolution

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 36s
The built failed likely due to AndroidX incompatibilities in a plugin. The tool is about to try using Jetfier to solve the incompatibility.
Building plugin flutter_plugin_pdf_viewer...
Running Gradle task 'assembleAarRelease'...
√ Built build\app\outputs\repo.
Running Gradle task 'assembleAarRelease'...
Finished with error: The plugin flutter_webview_plugin could not be built due to the issue above.

PDFViewer is appearing but document does not get loaded in UI, and shows this warning trace in logcat

I/System.out(31701): Attempt to invoke virtual method 'android.content.res.Resources android.app.Activity.getResources()' on a null object reference
W/System.err(31701): java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.app.Activity.getResources()' on a null object reference
W/System.err(31701): 	at pt.tribeiro.flutter_plugin_pdf_viewer.FlutterPluginPdfViewerPlugin.getPage(FlutterPluginPdfViewerPlugin.java:128)
W/System.err(31701): 	at pt.tribeiro.flutter_plugin_pdf_viewer.FlutterPluginPdfViewerPlugin.access$100(FlutterPluginPdfViewerPlugin.java:28)
W/System.err(31701): 	at pt.tribeiro.flutter_plugin_pdf_viewer.FlutterPluginPdfViewerPlugin$1.run(FlutterPluginPdfViewerPlugin.java:68)
W/System.err(31701): 	at android.os.Handler.handleCallback(Handler.java:873)
W/System.err(31701): 	at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err(31701): 	at android.os.Looper.loop(Looper.java:193)
W/System.err(31701): 	at android.os.HandlerThread.run(HandlerThread.java:65)

Can you suggest me to solve this?

Cannot set showNavigation flag to false with PDFDocument.fromURL

Hi, thank you for this plugin!
I saw i little bug, here is the code to reproduce:

onPress: () async {
        PDFDocument doc = await PDFDocument.fromURL('https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf');

        Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => PDFViewer(
                  document: doc,
                  showNavigation: false,
                ),
          ),
        );
      },

it will conflict with flutter_workmanager plugin on Android

when I try to work with flutter_workmanager it show below error:

I/System.out( 7995): Attempt to invoke virtual method 'android.content.res.Resources android.app.Activity.getResources()' on a null object reference
W/System.err( 7995): java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.app.Activity.getResources()' on a null object reference
W/System.err( 7995): 	at pt.tribeiro.flutter_plugin_pdf_viewer.FlutterPluginPdfViewerPlugin.getPage(FlutterPluginPdfViewerPlugin.java:128)
W/System.err( 7995): 	at pt.tribeiro.flutter_plugin_pdf_viewer.FlutterPluginPdfViewerPlugin.access$100(FlutterPluginPdfViewerPlugin.java:28)
W/System.err( 7995): 	at pt.tribeiro.flutter_plugin_pdf_viewer.FlutterPluginPdfViewerPlugin$1.run(FlutterPluginPdfViewerPlugin.java:68)
W/System.err( 7995): 	at android.os.Handler.handleCallback(Handler.java:873)
W/System.err( 7995): 	at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err( 7995): 	at android.os.Looper.loop(Looper.java:193)
W/System.err( 7995): 	at android.os.HandlerThread.run(HandlerThread.java:65)

I read the source code and find below

 Future<PDFPage> get({int page = 1}) async {
    assert(page > 0);
    var data = await _channel
        .invokeMethod('getPage', {'filePath': _filePath, 'pageNumber': page});
    return new PDFPage(data, page);
  }

it will return to null, I just start the backgound task with flutter_workmanager even nothing to do it will also cause the PDFViewer failed

I also read the plugin's java code and seems will also use the backgound handler, I am not sure whether the background process will be conflict with flutter_workmanager

but it works well on iOS

Load all pages at once in memory

I used PDFDocument.fromURL(url) to load the document and view using PDFViewer(document:document).

Now, when I try to move to another page, it loads the next/previous page asynchronously every time I move to a new page and shows a CircularProgressIndicator for that period.

To provide a better user experience, you should load all the pages at once or load 3-4 pages next and previous to the current page in advance, so the user doesn't have to wait while moving between pages.

Can't load any PDF's on Android emulator

Using version 1.0.7 of the plugin on an Android emulator with API 28. Flutter version is Channel stable, v1.7.8+hotfix.4.

No matter if I try

// URL is valid and points to a valid PDF
_doc = await PDFDocument.fromURL(url);

or

// file is a valid file, referring to a valid PDF that exists on the device
_doc = await PDFDocument.fromFile(file);

I just keep getting

Error reading PDF!

from the plugin.

.fromFile() doesn't work

Hello,
Thank you for your plugin.
when I try to load a pdf from the assets folders it works well, but in my app, I download PDF to the app Directory with the getApplicationDocumentsDirectory
So I load pdf from there, but I got this error.
Tried calling: get(page: 1) #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5) #1 _PDFViewerState._loadPage (package:flutter_plugin_pdf_viewer/src/viewer.dart:63:37) #2 _PDFViewerState.didChangeDependencies (package:flutter_plugin_pdf_viewer/src/viewer.dart:47:5) #3 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4632:12) #4 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4456:5) #5 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3430:14) #6 Element.updateChild (package:flutter/src/widgets/framework.dart:3198:18) #7 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5747:14) #8 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3430:14) #9 Element.updateChild (package:flutter/src/widgets/framework.dart:3198:18)<…> flutter: ══╡ EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE ╞════════════════════════════════════════════════════ flutter: The following StateError was thrown resolving an image codec: flutter: Bad state: File:

and this:

flutter: When the exception was thrown, this was the stack: flutter: #0 FileImage._loadAsync (package:flutter/src/painting/image_provider.dart:844:7) flutter: <asynchronous suspension> flutter: #1 FileImage.load (package:flutter/src/painting/image_provider.dart:828:14) flutter: #2 ImageProvider.resolveStreamForKey.<anonymous closure> (package:flutter/src/painting/image_provider.dart:491:13) flutter: #3 ImageCache.putIfAbsent (package:flutter/src/painting/image_cache.dart:359:22) flutter: #4 ImageProvider.resolveStreamForKey (package:flutter/src/painting/image_provider.dart:489:80) flutter: #5 ImageProvider.resolve.<anonymous closure> (package:flutter/src/painting/image_provider.dart:330:9) flutter: #6 ImageProvider._createErrorHandlerAndKey.<anonymous closure>.<anonymous closure> (package:flutter/src/painting/image_provider.dart:450:26) flutter: #7 SynchronousFuture.then (package:flutter/src/foundation/synchronous_future.dart:41:29) flutter: #8 ImageProvider._createErrorHandlerAndKey.<anonymous closure> (package:flutter/src/painting/image_provider.dart:447:11) flutter: #12 ImageProvider._createErrorHandlerAndKey (package:flutter/src/painting/image_provider.dart:439:16) flutter: #13 ImageProvider.resolve (package:flutter/src/painting/image_provider.dart:327:5) flutter: #14 _PDFPageState._repaint (package:flutter_plugin_pdf_viewer/src/page.dart:36:31) flutter: #15 _PDFPageState.didChangeDependencies (package:flutter_plugin_pdf_viewer/src/page.dart:22:5) flutter: #16 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4632:12) flutter: #17 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4456:5) flutter: #18 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3430:14) flutter: #19 Element.updateChild (package:flutter/src/widgets/framework.dart:3198:18) flutter: #20 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5496:32) flutter: #21 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5867:17)

The first error comes when I try to load PDF fom asset, but doesn't crash the app. But the second is making the app crash.

Upgrade dependencies

Because flutter_plugin_pdf_viewer >=1.0.7 depends on flutter_advanced_networkimage ^0.5.0 which depends on flutter_svg ^0.13.0, flutter_plugin_pdf_viewer >=1.0.7 requires flutter_svg ^0.13.0.
So, because app depends on both flutter_svg ^0.14.0 and flutter_plugin_pdf_viewer ^1.0.7, version solving failed.
pub get failed (1)

Crash on Android Kitkat SDK 4.4.2

Log Error:

E/AndroidRuntime( 2941): FATAL EXCEPTION: flutterPdfViewer
E/AndroidRuntime( 2941): Process: cmdigital.horizon.com.br.cmdigital, PID: 2941
E/AndroidRuntime( 2941): java.lang.NoClassDefFoundError: android.graphics.pdf.PdfRenderer
E/AndroidRuntime( 2941): at
pt.tribeiro.flutter_plugin_pdf_viewer.FlutterPluginPdfViewerPlugin.getNumberOfPages(FlutterPluginPdfViewerPlugin.java:88)
E/AndroidRuntime( 2941): at
pt.tribeiro.flutter_plugin_pdf_viewer.FlutterPluginPdfViewerPlugin.access$000(FlutterPluginPdfViewerPlugin.java:28)
E/AndroidRuntime( 2941): at
pt.tribeiro.flutter_plugin_pdf_viewer.FlutterPluginPdfViewerPlugin$1.run(FlutterPluginPdfViewerPlugin.java:59)
E/AndroidRuntime( 2941): at android.os.Handler.handleCallback(Handler.java:733)
E/AndroidRuntime( 2941): at android.os.Handler.dispatchMessage(Handler.java:95)
E/AndroidRuntime( 2941): at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime( 2941): at android.os.HandlerThread.run(HandlerThread.java:61)

Flutter Doctor:

[✓] Flutter (Channel dev, v1.9.7, on Mac OS X 10.14.6 18G87, locale pt-BR)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.1)
[✓] Xcode - develop for iOS and macOS (Xcode 10.3)
[✓] Android Studio (version 3.4)
[✓] VS Code (version 1.37.1)
[✓] Connected device (2 available)

• No issues found!

Emulator Info:

Name: tablet
CPU/ABI: x86
Path: /Users/danilo/.android/avd/tablet.avd
Target: google_apis [Google APIs] (API level 19)
Skin: 800x1280
SD Card: 512 MB
AvdId: Tablet
PlayStore.enabled: false
avd.ini.displayname: Tablet
avd.ini.encoding: UTF-8
disk.dataPartition.size: 800M
fastboot.chosenSnapshotFile:
fastboot.forceChosenSnapshotBoot: no
fastboot.forceColdBoot: yes
fastboot.forceFastBoot: no
hw.accelerometer: yes
hw.arc: false
hw.audioInput: yes
hw.battery: yes
hw.camera.back: virtualscene
hw.camera.front: emulated
hw.cpu.ncore: 2
hw.dPad: no
hw.device.hash2: MD5:2b08280c44dffd3ff7909e3688554698
hw.device.manufacturer: Generic
hw.device.name: 10.1in WXGA (Tablet)
hw.gps: yes
hw.gpu.enabled: yes
hw.gpu.mode: auto
hw.initialOrientation: Portrait
hw.keyboard: yes
hw.lcd.density: 160
hw.lcd.height: 800
hw.lcd.width: 1280
hw.mainKeys: no
hw.ramSize: 512
hw.sdCard: yes
hw.sensors.orientation: yes
hw.sensors.proximity: yes
hw.trackBall: no
image.sysdir.1: system-images/android-19/google_apis/x86/
runtime.network.latency: none
runtime.network.speed: full
showDeviceFrame: no
skin.dynamic: yes
skin.path.backup: _no_skin
tag.display: Google APIs
tag.id: google_apis
vm.heapSize: 80

Screenshot_1567351357

Loading a document from assets folder hangs when running tests

I am trying to run some unit testing that involves loading a PDF file from the assets folder. When running it , the test hangs and never returns.

Step 1
flutter doctor returns the following output:

[✓] Flutter (Channel stable, v1.9.1+hotfix.2, on Linux, locale en_GB.UTF-8)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] Android Studio (version 3.3)
[✓] Connected device (1 available)

Step 2
I copied a PDF file to assets/testFixtures/dummy.pdf

Step 3
The file pubspec.yaml looks as follows:

...
dependencies:
...
flutter_plugin_pdf_viewer: ^1.0.7
...
flutter:
  ...
  - assets:
    - assets/testFixtures/dummy.pdf

Step 4
The unit test file looks as follows:

import 'package:flutter_plugin_pdf_viewer/flutter_plugin_pdf_viewer.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {

  testWidgets('me testing', (WidgetTester tester) async {
    ...
    PDFDocument doc = await PDFDocument.fromAsset('assets/testFixtures/dummy.pdf');
    ...
  });
}

version solving failed

here is the logcat:

Because flutter_plugin_pdf_viewer 1.0.7 depends on rxdart ^0.21.0 and no versions of flutter_plugin_pdf_viewer match >1.0.7 <2.0.0, flutter_plugin_pdf_viewer ^1.0.7 requires rxdart ^0.21.0.

here is the pubspec.yaml file

  cupertino_icons: ^0.1.2
  badges: ^1.1.0
  image_picker: ^0.6.3+1
  provider: ^4.0.3
  flutter_spinkit: ^4.1.1+1
  firebase_auth: ^0.15.4
  firebase_storage: ^3.1.1
  cloud_firestore: ^0.13.1
  firebase_core: ^0.4.3+3
  flushbar: ^1.9.1
  shimmer: ^1.0.1
  cached_network_image: ^2.0.0
  file_picker: ^1.4.3+2
  cloud_functions: ^0.4.1+9
  flutter_plugin_pdf_viewer: ^1.0.7
  flutter_duration_picker: ^1.0.0
  flutter_datetime_picker: ^1.3.4
  numberpicker: ^1.1.0
  modal_progress_hud: ^0.1.3
  google_map_location_picker: ^3.2.1+1
  google_maps_flutter: ^0.5.24+1
  geoflutterfire: ^2.1.0
  rxdart: ^0.23.1

When opening another PDF from file path on iOS the first page shown belongs to the previously shown document

There seems to be a bug in the iOS part of the plugin. My widget code around the PDFViewer looks like this:

import 'package:flutter/material.dart';
import 'package:flutter_plugin_pdf_viewer/flutter_plugin_pdf_viewer.dart';
import 'dart:io';

class PdfViewerWidget extends StatelessWidget {
  PdfViewerWidget({Key key, this.document, this.title}) : super(key: key);
  final File document;
  final String title;

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: PDFDocument.fromFile(document),
      builder: (BuildContext context, AsyncSnapshot snapshot) {
        if (snapshot.hasData) {
          if (snapshot.data != null) {
            return Scaffold(
              appBar: AppBar(
                title: Text(title),
              ),
              body: Center(
                child: PDFViewer(document: snapshot.data)
              )
            );
          }
        }
        return Center(
          child: CircularProgressIndicator()
        );
      },
    );
  }
}

I create this widget on a tap on an element in another widget, setting the document as a parameter of the call. The PDFViewer knows the correct path of the document and the document exists in the local documents directory of the app. I checked that.

When I create the widget a second time (after leaving the view) with another document as parameter, the first page of the rendered PDF belongs to the previously shown document. After turning the page to page number 2 the 2nd page of the document is rendered correctly. Going back to page 1 shows the wrong page again.

I was not able to reproduce that on Android, so I guess, there is a problem inside the native iOS code.

Problem with dependencies (RxDart)

Using 'flutter pub get' I have the following error in my project:

Because no versions of flutter_plugin_pdf_viewer match >1.0.7 <2.0.0 and flutter_plugin_pdf_viewer 1.0.7 depends on rxdart ^0.21.0, flutter_plugin_pdf_viewer ^1.0.7 requires rxdart ^0.21.0. And because bloc >=0.13.0 depends on rxdart ^0.22.0, flutter_plugin_pdf_viewer ^1.0.7 is incompatible with bloc >=0.13.0. So, because PROJECT_NAME depends on both bloc ^0.15.0 and flutter_plugin_pdf_viewer ^1.0.7, version solving failed.

I supose you should upgrade the version of RxDart that are actually using.

If someone has the same problem, and meanwhile this is not fixed, you have to use a previous version of bloc (0.12) and flutter_bloc (0.12)

Error when building with master

Compiler message:
file:///Users/michal/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_plugin_pdf_viewer-1.0.6/lib/src/page.dart:33:26: Error: The argument type 'Null Function(dynamic, dynamic)' can't be assigned to the parameter type 'ImageStreamListener'.

  • 'ImageStreamListener' is from 'package:flutter/src/painting/image_stream.dart' ('file:///Users/michal/Development/flutter/packages/flutter/lib/src/painting/image_stream.dart').
    Try changing the type of the parameter, or casting the argument to 'ImageStreamListener'.
    resolver.addListener((imgInfo, alreadyPainted) {

Compiler error

`Compiler message:
file:///C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_plugin_pdf_viewer-1.0.6/lib/src/page.dart:35:26: Error: The argument type 'Null Function(dynamic, dynamic)' can't be assigned to the parameter type 'ImageStreamListener'.

  • 'ImageStreamListener' is from 'package:flutter/src/painting/image_stream.dart' ('file:///C:/flutter/packages/flutter/lib/src/painting/image_stream.dart').
    Try changing the type of the parameter, or casting the argument to 'ImageStreamListener'.
    resolver.addListener((imgInfo, alreadyPainted) {
    `

package problem because of getApplicationDocumentsDirectory()

Hi, I'm having a problem with the package because in my app besides opening the pdf it also needs to be able to download a pdf and store it on the device,
On IOS to get the folder path to store the file I need to use the path_provider getApplicationDocumentsDirectory()
and add a config in the info.list file so the folder can be visible to the user.
The problem is, since I made this app folder visible, not only my downloaded file is been store there, but also some files from this package, this happens because the package uses the getApplicationDocumentsDirectory() aswell, I guess to cache the pdf, but I think I should be using other method: getApplicationSupportDirectory() since this function is for files that shouldn´t be visible to the user.

App crash when switching pages too quickly

When I load a PDF with 73 pages on iOS and switch between pages using the arrows at the bottom of the screen, the entire app crashes with the following error:

══╡ EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE ╞═════════════════
The following assertion was thrown by an image listener:
setState() called after dispose(): _PDFPageState#e5d70(lifecycle
state: defunct, not mounted)
This error happens if you call setState() on a State object for a
widget that no longer appears in the widget tree (e.g., whose
parent widget no longer includes the widget in its build). This
error can occur when code calls setState() from a timer or an
animation callback.
The preferred solution is to cancel the timer or stop listening
to the animation in the dispose() callback. Another solution is
to check the "mounted" property of this object before calling
setState() to ensure the object is still in the tree.
This error might indicate a memory leak if setState() is being
called because another object is retaining a reference to this
State object after it has been removed from the tree. To avoid
memory leaks, consider breaking the reference to this object
during dispose().

When the exception was thrown, this was the stack:
#0      State.setState.<anonymous closure> (package:flutter/src/widgets/framework.dart:1105:9)
#1      State.setState (package:flutter/src/widgets/framework.dart:1140:6)
#2      _PDFPageState._repaint.<anonymous closure> (package:flutter_plugin_pdf_viewer/src/page.dart:37:28)
#3      ImageStreamCompleter.setImage (package:flutter/src/painting/image_stream.dart:407:18)
#4      MultiFrameImageStreamCompleter._emitFrame (package:flutter/src/painting/image_stream.dart:709:5)
#5      MultiFrameImageStreamCompleter._decodeNextFrameAndSchedule (package:flutter/src/painting/image_stream.dart:694:7)
<asynchronous suspension>
#6      MultiFrameImageStreamCompleter._handleCodecReady (package:flutter/src/painting/image_stream.dart:644:7)
#16     FileImage._loadAsync (package:flutter/src/painting/image_provider.dart)
<asynchronous suspension>
#17     FileImage.load (package:flutter/src/painting/image_provider.dart:530:14)
#18     ImageProvider.resolve.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:flutter/src/painting/image_provider.dart:316:48)
#19     ImageCache.putIfAbsent (package:flutter/src/painting/image_cache.dart:160:22)
#20     ImageProvider.resolve.<anonymous closure>.<anonymous closure> (package:flutter/src/painting/image_provider.dart:316:25)
#21     SynchronousFuture.then (package:flutter/src/foundation/synchronous_future.dart:38:29)
#22     ImageProvider.resolve.<anonymous closure> (package:flutter/src/painting/image_provider.dart:313:11)
#26     ImageProvider.resolve (package:flutter/src/painting/image_provider.dart:305:16)
#27     _PDFPageState._repaint (package:flutter_plugin_pdf_viewer/src/page.dart:35:31)
#28     _PDFPageState.didChangeDependencies (package:flutter_plugin_pdf_viewer/src/page.dart:22:5)
#29     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4051:12)
#30     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3902:5)
#31     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3084:14)
#32     Element.updateChild (package:flutter/src/widgets/framework.dart:2887:12)
#33     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4875:32)
#34     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5208:17)
#35     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
#36     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
#37     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
#38     ProxyElement.update (package:flutter/src/widgets/framework.dart:4219:5)
#39     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
#40     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
#41     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
#42     ProxyElement.update (package:flutter/src/widgets/framework.dart:4219:5)
#43     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
#44     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4817:32)
#45     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5208:17)
#46     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
#47     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
#48     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
#49     StatefulElement.update (package:flutter/src/widgets/framework.dart:4085:5)
#50     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
#51     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
#52     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
#53     ProxyElement.update (package:flutter/src/widgets/framework.dart:4219:5)
#54     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
#55     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
#56     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
#57     StatefulElement.update (package:flutter/src/widgets/framework.dart:4085:5)
#58     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
#59     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5099:14)
#60     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
#61     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
#62     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
#63     StatelessElement.update (package:flutter/src/widgets/framework.dart:3981:5)
#64     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
#65     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5099:14)
#66     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
#67     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
#68     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
#69     StatefulElement.update (package:flutter/src/widgets/framework.dart:4085:5)
#70     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
#71     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
#72     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
#73     StatefulElement.update (package:flutter/src/widgets/framework.dart:4085:5)
#74     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
#75     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
#76     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
#77     ProxyElement.update (package:flutter/src/widgets/framework.dart:4219:5)
#78     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
#79     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
#80     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
#81     ProxyElement.update (package:flutter/src/widgets/framework.dart:4219:5)
#82     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
#83     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
#84     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
#85     StatefulElement.update (package:flutter/src/widgets/framework.dart:4085:5)
#86     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
#87     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
#88     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
#89     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2340:33)
#90     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:700:20)
#91     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:285:5)
#92     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1016:15)
#93     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:958:9)
#94     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:874:5)
#98     _invoke (dart:ui/hooks.dart:236:10)
#99     _drawFrame (dart:ui/hooks.dart:194:3)
(elided 15 frames from package dart:async and package dart:async-patch)
═════════════════════════════════════════════════════════════════

This has so far only happened on iOS. I'm using Flutter 1.7.8+hotfix.4 on channel stable. The device is an iPhone 6S running iOS 12.3.1 and I'm using version 1.0.7 of the plugin.

It should also be noted that when doing this on Android, the app doesn't crash but each page load is being performed sequentially, so if pressing 4 times on one of the page change buttons, one must wait for it to first load page 1, then 2, 3, 4, 5... It would be nice if the plugin could abort pending page loads immediately when changing page, and just start loading the last one.

Switching pages slowly (i.e. giving the plugin enough time to load each page before switching again) works perfectly!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.