【问题标题】:Advance PDF Viewer : Failed assertion: line 4263 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true高级 PDF 查看器:断言失败:第 4263 行 pos 14:'owner!._debugCurrentBuildTarget == this':不正确
【发布时间】: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。 (我希望我以前看过这个帖子,会节省很多时间)。我的问题只出现在发布中,而不是调试中。但是,有没有办法解决这个问题?

标签: flutter dart pdf pdfview


【解决方案1】:

我也遇到了同样的问题。 你可以在这里找到完整的讨论:https://github.com/lohanidamodar/pdf_viewer/issues/62

似乎在第一次尝试打开文件时它从这里返回 null:

var data = await _channel .invokeMethod('getPage', {'filePath': _filePath, 'pageNumber': page});

(来自 document.dart 文件)

有趣的是,在我重新打开我的应用后一切正常

这个补丁为我解决了这个异常:

我注意到,在我重新打开应用程序(解决了问题)并尝试打开 PDF 之前,我遇到了这个异常:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.app.Activity.getResources()' on a null object reference

但是当我重新打开应用程序并且一切正常时,这个异常就消失了。因此,我在此存储库问题中查找了此异常并遇到了此修复:

https://github.com/lohanidamodar/pdf_viewer/issues/45

实施RasyidMF解决方案后,PDF正确打开。

【讨论】:

    猜你喜欢
    • 2018-04-22
    • 2020-03-26
    • 2020-04-03
    • 2021-01-29
    • 2021-04-12
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 2021-10-28
    相关资源
    最近更新 更多