【发布时间】:2021-09-26 03:09:17
【问题描述】:
当我尝试从 URL 加载 pdf 时出现错误。 它显示了pdf的页数,但屏幕上出现错误。
Using plugin - https://pub.dev/packages/advance_pdf_viewer
Logcat:
======== Exception caught by widgets library
=======================================================
The following _CastError was thrown building NotificationListener<KeepAliveNotification>:
Null check operator used on a null value
The relevant error-causing widget was:
PDFViewer file:///D:/GST%20with%20GT/gst_with_gt/lib/screens/pdfview.dart:70:19
When the exception was thrown, this was the stack:
#0 _PDFPageState._repaint (package:advance_pdf_viewer/src/page.dart:54:45)
#1 _PDFPageState.didChangeDependencies (package:advance_pdf_viewer/src/page.dart:42:5)
#2 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4725:11)
#3 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4541:5)
#4 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3603:14)
...
====================================================================================================
======== Exception caught by widgets library =======================================================
The following assertion was thrown building SliverFillViewport:
'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 258 pos 16: 'child == null || indexOf(child) > index': is not true.
Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
https://github.com/flutter/flutter/issues/new?template=2_bug.md
The relevant error-causing widget was:
PDFViewer file:///D:/GST%20with%20GT/gst_with_gt/lib/screens/pdfview.dart:70:19
When the exception was thrown, this was the stack:
#2 RenderSliverMultiBoxAdaptor._debugVerifyChildOrder (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:258:16)
#3 RenderSliverMultiBoxAdaptor.debugChildIntegrityEnabled=.<anonymous closure> (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:233:14)
#4 RenderSliverMultiBoxAdaptor.debugChildIntegrityEnabled= (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:235:6)
#5 SliverMultiBoxAdaptorElement.performRebuild (package:flutter/src/widgets/sliver.dart:1208:20)
#6 SliverMultiBoxAdaptorElement.update (package:flutter/src/widgets/sliver.dart:1124:7)
...
====================================================================================================
======== Exception caught by widgets library =======================================================
The following assertion was thrown building RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#411e6](state: RawGestureDetectorState#4acaf(gestures: <none>, behavior: opaque)):
A RenderViewport expected a child of type RenderSliver but received a child of type RenderErrorBox.
RenderObjects expect specific types of children because they coordinate with their children during layout and paint. For example, a RenderSliver cannot be the child of a RenderBox because a RenderSliver does not understand the RenderBox layout protocol.
The RenderViewport that expected a RenderSliver child was created by: Viewport ← IgnorePointer-[GlobalKey#e5bfe] ← Semantics ← Listener ← _GestureSemantics ← RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#411e6] ← Listener ← _ScrollableScope ← _ScrollSemantics-[GlobalKey#3ad9e] ← RepaintBoundary ← CustomPaint ← RepaintBoundary ← ⋯
The RenderErrorBox that did not match the expected child type was created by: ErrorWidget-[#87a59] ← SliverFillViewport ← Viewport ← IgnorePointer-[GlobalKey#e5bfe] ← Semantics ← Listener ← _GestureSemantics ← RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#411e6] ← Listener ← _ScrollableScope ← _ScrollSemantics-[GlobalKey#3ad9e] ← RepaintBoundary ← ⋯
The relevant error-causing widget was:
PDFViewer file:///D:/GST%20with%20GT/gst_with_gt/lib/screens/pdfview.dart:70:19
When the exception was thrown, this was the stack:
#0 ContainerRenderObjectMixin.debugValidateChild.<anonymous closure> (package:flutter/src/rendering/object.dart:3134:9)
#1 ContainerRenderObjectMixin.debugValidateChild (package:flutter/src/rendering/object.dart:3161:6)
#2 MultiChildRenderObjectElement.insertRenderObjectChild (package:flutter/src/widgets/framework.dart:6127:25)
#3 RenderObjectElement.attachRenderObject (package:flutter/src/widgets/framework.dart:5737:35)
#4 RenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5433:5)
...
====================================================================================================
======== Exception caught by widgets library =======================================================
The following assertion was thrown building _ScrollableScope:
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4263 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
https://github.com/flutter/flutter/issues/new?template=2_bug.md
The relevant error-causing widget was:
PDFViewer file:///D:/GST%20with%20GT/gst_with_gt/lib/screens/pdfview.dart:70:19
When the exception was thrown, this was the stack:
#2 Element.rebuild.<anonymous closure> (package:flutter/src/widgets/framework.dart:4263:14)
#3 Element.rebuild (package:flutter/src/widgets/framework.dart:4266:6)
#4 StatefulElement.update (package:flutter/src/widgets/framework.dart:4771:5)
#5 Element.updateChild (package:flutter/src/widgets/framework.dart:3345:15)
#6 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6057:14)
...
这里是我的代码:
class PdfViewers extends StatefulWidget {
@override
PdfViewersState createState() => PdfViewersState();
}
class PdfViewersState extends State<PdfViewers> {
bool _isLoadings = true;
PDFDocument docs;
@override
void initState() {
Timer(
Duration(seconds: 1),
() => loadUrl(),
);
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.grey[100],
appBar: AppBar(
elevation: 0,
backgroundColor: Colors.grey[100],
actions: [
IconButton(
icon: Icon(
Icons.share_rounded,
color: Color(0xff4f2e7f),
),
onPressed: () async {}),
],
title: Text(
'PDF Article',
softWrap: true,
style: TextStyle(color: Color(0xff4f2e7f)),
),
leading: IconButton(
onPressed: () {
Navigator.pop(context, true);
},
icon: Icon(Icons.arrow_back_outlined, color: Color(0xff4f2e7f))),
),
body: Center(
child: _isLoadings
? Container(child: CircularProgressIndicator())
: PDFViewer(document: docs)));
}
Future<void> loadUrl() async {
setState(() {
_isLoadings = true;
});
docs= await PDFDocument.fromURL(
'https://gstwithgt.fivestake.com/uploads/topics/16254191793470.pdf');
setState(() {
_isLoadings = false;
});
}
}
我尝试并搜索了许多教程和示例,但没有一个对我有用。所以我在这里发布了问题。
主要是当我将相同的代码粘贴到另一个项目中时,它工作正常。我不知道问题出在哪里..我从前两天开始尝试解决这个错误..
【问题讨论】:
-
你是怎么解决这个问题的?
-
由于删除此行时发生了 firebase 消息传递错误,我的 pdf 查看器工作正常。 FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);主屏幕中的这一行并解决了错误。我从 log cat 的第一行中发现了错误。在构建 NotificationListener
: 时抛出了以下 _CastError: 所以我删除了 firebase messinging.OnBackground() 行并且它起作用了。 -
@SachinSolanki 我遇到了完全相同的问题,并花了一段时间寻找问题。最终,我删除了我所有的 firebase 东西(因为那是我最近所做的重大改变)并开始一点一点地添加东西。我最终发现它也是 FirebaseMessaging.onBackgroundMessage。 (我希望我以前看过这个帖子,会节省很多时间)。我的问题只出现在发布中,而不是调试中。但是,有没有办法解决这个问题?