在performLayout()期间引发了PageView NoSuchMethodError

时间:2019-09-26 09:13:58

标签: flutter dart flutter-layout dart-pub

我正在构建我的第一个Flutter应用程序,但遇到了我无法解决的问题。

该应用从Firebase实时数据库中检索数据,将所有条目添加到列表中,并在PageView的第一页中显示所有条目。

当我以调试模式启动应用程序时,出现以下错误:

I/flutter ( 7901): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter ( 7901): The following NoSuchMethodError was thrown during performLayout():
I/flutter ( 7901): The getter 'key' was called on null.
I/flutter ( 7901): Receiver: null
I/flutter ( 7901): Tried calling: key
I/flutter ( 7901): User-created ancestor of the error-causing widget was:
I/flutter ( 7901):   PageView-[#62d48] file:///home/amedeo/AndroidStudioProjects/pastore_app/lib/main.dart:241:17
I/flutter ( 7901): When the exception was thrown, this was the stack:
I/flutter ( 7901): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
I/flutter ( 7901): #1      SliverChildListDelegate.build (package:flutter/src/widgets/sliver.dart:672:27)
I/flutter ( 7901): #2      SliverMultiBoxAdaptorElement._build.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1153:67)
I/flutter ( 7901): #3      _HashMap.putIfAbsent (dart:collection-patch/collection_patch.dart:137:29)
I/flutter ( 7901): #4      SliverMultiBoxAdaptorElement._build (package:flutter/src/widgets/sliver.dart:1153:26)
I/flutter ( 7901): #5      SliverMultiBoxAdaptorElement.createChild.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1166:55)
I/flutter ( 7901): #6      BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2328:19)
I/flutter ( 7901): #7      SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:1159:11)
I/flutter ( 7901): #8      RenderSliverMultiBoxAdaptor._createOrObtainChild.<anonymous closure> (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:354:23)
I/flutter ( 7901): #9      RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1797:58)
I/flutter ( 7901): #10     PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:875:15)
I/flutter ( 7901): #11     RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1797:13)
I/flutter ( 7901): #12     RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:343:5)
I/flutter ( 7901): #13     RenderSliverMultiBoxAdaptor.addInitialChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:427:5)
I/flutter ( 7901): #14     RenderSliverFixedExtentBoxAdaptor.performLayout (package:flutter/src/rendering/sliver_fixed_extent_list.dart:196:12)
I/flutter ( 7901): #15     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #16     RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:406:13)
I/flutter ( 7901): #17     RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1352:12)
I/flutter ( 7901): #18     RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1270:20)
I/flutter ( 7901): #19     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #20     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #21     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #22     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #23     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #24     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #25     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #26     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #27     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #28     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #29     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #30     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #31     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #32     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #33     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #34     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #35     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #36     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #37     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #38     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:142:11)
I/flutter ( 7901): #39     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:444:7)
I/flutter ( 7901): #40     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:212:7)
I/flutter ( 7901): #41     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:356:14)
I/flutter ( 7901): #42     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #43     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #44     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #45     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #46     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1232:11)
I/flutter ( 7901): #47     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #48     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #49     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #50     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #51     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #52     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #53     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #54     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #55     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #56     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #57     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #58     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #59     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #60     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #61     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #62     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #63     RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3140:13)
I/flutter ( 7901): #64     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #65     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:510:15)
I/flutter ( 7901): #66     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #67     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #68     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #69     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #70     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #71     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #72     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #73     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #74     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #75     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 7901): #76     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 7901): #77     RenderView.performLayout (package:flutter/src/rendering/view.dart:152:13)
I/flutter ( 7901): #78     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1578:7)
I/flutter ( 7901): #79     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:844:18)
I/flutter ( 7901): #80     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:341:19)
I/flutter ( 7901): #81     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:761:13)
I/flutter ( 7901): #82     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:280:5)
I/flutter ( 7901): #83     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1033:15)
I/flutter ( 7901): #84     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:975:9)
I/flutter ( 7901): #85     SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:784:7)
I/flutter ( 7901): #94     _Timer._runTimers (dart:isolate-patch/timer_impl.dart:382:19)
I/flutter ( 7901): #95     _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:416:5)
I/flutter ( 7901): #96     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)
I/flutter ( 7901): (elided 8 frames from package dart:async and package dart:async-patch)
I/flutter ( 7901): The following RenderObject was being processed when the exception was fired: RenderSliverFillViewport#d6420 relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT:
I/flutter ( 7901):   creator: SliverFillViewport ← Viewport ← IgnorePointer-[GlobalKey#cec9a] ← Semantics ←
I/flutter ( 7901):     _PointerListener ← Listener ← _GestureSemantics ←
I/flutter ( 7901):     RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#9d04a] ← _PointerListener ← Listener
I/flutter ( 7901):     ← _ScrollableScope ← _ScrollSemantics-[GlobalKey#04774] ← ⋯
I/flutter ( 7901):   parentData: paintOffset=Offset(0.0, 0.0) (can use size)
I/flutter ( 7901):   constraints: SliverConstraints(AxisDirection.right, GrowthDirection.forward, ScrollDirection.idle,
I/flutter ( 7901):     scrollOffset: 0.0, remainingPaintExtent: 600.9, crossAxisExtent: 802.7, crossAxisDirection:
I/flutter ( 7901):     AxisDirection.down, viewportMainAxisExtent: 600.9, remainingCacheExtent: 600.9 cacheOrigin: 0.0 )
I/flutter ( 7901):   geometry: null
I/flutter ( 7901):   no children current live
I/flutter ( 7901): This RenderObject has no descendants.
I/flutter ( 7901): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter ( 7901): Another exception was thrown: NoSuchMethodError: The method 'debugAssertIsValid' was called on null.
I/flutter ( 7901): Another exception was thrown: NoSuchMethodError: The getter 'visible' was called on null.

我尝试将GlobalKey添加到PageView键值中,但是没有用。

也许问题出在_onEntryChanged函数中,但我对此进行了评论,问题仍然存在。 这里是代码片段:

 _onEntryChanged(Event event) {
    var oldEntry = carList.singleWhere((entry) {
      return entry.key == event.snapshot.key;
    });
    setState(() {
      carList[carList.indexOf(oldEntry)] = Car.fromSnapshot(event.snapshot);
    });
  }

这是github存储库中所有文件的链接。 GitHub Repository

非常感谢您能为我提供帮助。

3 个答案:

答案 0 :(得分:0)

请提供您认为会引发此错误的代码段

答案 1 :(得分:0)

只需将窗口小部件转换为 StatefulWidget

答案 2 :(得分:0)

我猜您的代码没有在应有的位置返回任何Widget。检查您是否在要调用要在屏幕上渲染的内容的地方添加了“ return”。我在通过调用映射列表的每个对象时忘记做一次,但没有在调用前添加“ return”。在那里,我得到了类似的错误日志。