CrossPT / flutter_plugin_pdf_viewer

A flutter plugin for handling PDF files. Works on both Android & iOS
BSD 3-Clause "New" or "Revised" License
92 stars 317 forks source link

PDF Viewer rebuilds every time setState is called #64

Open jayaike opened 4 years ago

jayaike commented 4 years ago

Whenever I call setState in the widget, the PDF Viewer rebuilds causing it to load all over again. How can I prevent this?

jayaike commented 4 years ago

Sometimes I get this error

I/flutter ( 9732): ══╡ EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE ╞════════════════════════════════════════════════════
I/flutter ( 9732): The following assertion was thrown by an image listener:
I/flutter ( 9732): setState() called after dispose(): _PDFPageState#f9d49(lifecycle state: defunct, not mounted)
I/flutter ( 9732): This error happens if you call setState() on a State object for a widget that no longer appears in
I/flutter ( 9732): the widget tree (e.g., whose parent widget no longer includes the widget in its build). This error
I/flutter ( 9732): can occur when code calls setState() from a timer or an animation callback.
I/flutter ( 9732): The preferred solution is to cancel the timer or stop listening to the animation in the dispose()
I/flutter ( 9732): callback. Another solution is to check the "mounted" property of this object before calling
I/flutter ( 9732): setState() to ensure the object is still in the tree.
I/flutter ( 9732): This error might indicate a memory leak if setState() is being called because another object is
I/flutter ( 9732): retaining a reference to this State object after it has been removed from the tree. To avoid memory
I/flutter ( 9732): leaks, consider breaking the reference to this object during dispose().
I/flutter ( 9732):
I/flutter ( 9732): When the exception was thrown, this was the stack:
I/flutter ( 9732): #0      State.setState.<anonymous closure> (package:flutter/src/widgets/framework.dart:1112:9)
I/flutter ( 9732): #1      State.setState (package:flutter/src/widgets/framework.dart:1147:6)
I/flutter ( 9732): #2      _PDFPageState._repaint.<anonymous closure> (package:flutter_plugin_pdf_viewer/src/page.dart:37:28)
I/flutter ( 9732): #3      ImageStreamCompleter.setImage (package:flutter/src/painting/image_stream.dart:407:18)
I/flutter ( 9732): #4      MultiFrameImageStreamCompleter._emitFrame (package:flutter/src/painting/image_stream.dart:709:5)
I/flutter ( 9732): #5      MultiFrameImageStreamCompleter._decodeNextFrameAndSchedule (package:flutter/src/painting/image_stream.dart:694:7)
I/flutter ( 9732): <asynchronous suspension>
I/flutter ( 9732): #6      MultiFrameImageStreamCompleter._handleCodecReady (package:flutter/src/painting/image_stream.dart:644:7)
I/flutter ( 9732): #15     FileImage._loadAsync (package:flutter/src/painting/image_provider.dart)
I/flutter ( 9732): <asynchronous suspension>
I/flutter ( 9732): #16     FileImage.load (package:flutter/src/painting/image_provider.dart:638:14)
I/flutter ( 9732): #17     ImageProvider.resolve.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:flutter/src/painting/image_provider.dart:327:17)
I/flutter ( 9732): #18     ImageCache.putIfAbsent (package:flutter/src/painting/image_cache.dart:160:22)
I/flutter ( 9732): #19     ImageProvider.resolve.<anonymous closure>.<anonymous closure> (package:flutter/src/painting/image_provider.dart:325:84)
I/flutter ( 9732): #20     SynchronousFuture.then (package:flutter/src/foundation/synchronous_future.dart:38:29)
I/flutter ( 9732): #21     ImageProvider.resolve.<anonymous closure> (package:flutter/src/painting/image_provider.dart:323:11)
I/flutter ( 9732): #25     ImageProvider.resolve (package:flutter/src/painting/image_provider.dart:315:16)
I/flutter ( 9732): #26     _PDFPageState._repaint (package:flutter_plugin_pdf_viewer/src/page.dart:35:31)
I/flutter ( 9732): #27     _PDFPageState.didChangeDependencies (package:flutter_plugin_pdf_viewer/src/page.dart:22:5)
I/flutter ( 9732): #28     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4376:12)
I/flutter ( 9732): #29     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
I/flutter ( 9732): #30     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
I/flutter ( 9732): #31     Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
I/flutter ( 9732): #32     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5219:32)
I/flutter ( 9732): #33     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5561:17)
I/flutter ( 9732): #34     Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
I/flutter ( 9732): #35     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
I/flutter ( 9732): #36     Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
I/flutter ( 9732): #37     StatelessElement.update (package:flutter/src/widgets/framework.dart:4298:5)
I/flutter ( 9732): #38     Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
I/flutter ( 9732): #39     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
I/flutter ( 9732): #40     Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
I/flutter ( 9732): #41     ProxyElement.update (package:flutter/src/widgets/framework.dart:4557:5)
I/flutter ( 9732): #42     Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
I/flutter ( 9732): #43     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
I/flutter ( 9732): #44     Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
I/flutter ( 9732): #45     ProxyElement.update (package:flutter/src/widgets/framework.dart:4557:5)
I/flutter ( 9732): #46     Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
I/flutter ( 9732): #47     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5161:32)
I/flutter ( 9732): #48     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5561:17)
I/flutter ( 9732): #49     Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
I/flutter ( 9732): #50     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
I/flutter ( 9732): #51     Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
I/flutter ( 9732): #52     StatefulElement.update (package:flutter/src/widgets/framework.dart:4413:5)
I/flutter ( 9732): #53     Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
I/flutter ( 9732): #54     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
I/flutter ( 9732): #55     Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
I/flutter ( 9732): #56     ProxyElement.update (package:flutter/src/widgets/framework.dart:4557:5)
I/flutter ( 9732): #57     Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
I/flutter ( 9732): #58     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
I/flutter ( 9732): #59     Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
I/flutter ( 9732): #60     StatefulElement.update (package:flutter/src/widgets/framework.dart:4413:5)
I/flutter ( 9732): #61     Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
I/flutter ( 9732): #62     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5452:14)
I/flutter ( 9732): #63     Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
I/flutter ( 9732): #64     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
I/flutter ( 9732): #65     Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
I/flutter ( 9732): #66     StatelessElement.update (package:flutter/src/widgets/framework.dart:4298:5)
I/flutter ( 9732): #67     Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
I/flutter ( 9732): #68     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5452:14)
I/flutter ( 9732): #69     Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
I/flutter ( 9732): #70     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
I/flutter ( 9732): #71     Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
I/flutter ( 9732): #72     StatefulElement.update (package:flutter/src/widgets/framework.dart:4413:5)
I/flutter ( 9732): #73     Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
I/flutter ( 9732): #74     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
I/flutter ( 9732): #75     Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
I/flutter ( 9732): #76     StatefulElement.update (package:flutter/src/widgets/framework.dart:4413:5)
I/flutter ( 9732): #77     Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
I/flutter ( 9732): #78     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
I/flutter ( 9732): #79     Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
I/flutter ( 9732): #80     ProxyElement.update (package:flutter/src/widgets/framework.dart:4557:5)
I/flutter ( 9732): #81     Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
I/flutter ( 9732): #82     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
I/flutter ( 9732): #83     Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
I/flutter ( 9732): #84     ProxyElement.update (package:flutter/src/widgets/framework.dart:4557:5)
I/flutter ( 9732): #85     Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
I/flutter ( 9732): #86     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
I/flutter ( 9732): #87     Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
I/flutter ( 9732): #88     StatefulElement.update (package:flutter/src/widgets/framework.dart:4413:5)
I/flutter ( 9732): #89     Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
I/flutter ( 9732): #90     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
I/flutter ( 9732): #91     Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
I/flutter ( 9732): #92     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2432:33)
I/flutter ( 9732): #93     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:773:20)
I/flutter ( 9732): #94     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:283:5)
I/flutter ( 9732): #95     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1102:15)
I/flutter ( 9732): #96     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1041:9)
I/flutter ( 9732): #97     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:957:5)
I/flutter ( 9732): #101    _invoke (dart:ui/hooks.dart:259:10)
I/flutter ( 9732): #102    _drawFrame (dart:ui/hooks.dart:217:3)
I/flutter ( 9732): (elided 14 frames from package dart:async and package dart:async-patch)
I/flutter ( 9732): ════════════════════════════════════════════════════════════════════════════════════════════════════
jawadsahil commented 4 years ago

I think this is by design and setState is used for the same reason that you want to rebuild the widget. It is not issue with the pdf viewer, but flutter.