RefreshIndicator 上的 NoSuchMethod
NoSuchMethod on RefreshIndicator
我有一个使用 RefreshIndicator 的布局。它的 child 是 CustomScrollView。但是,当调用 onRefresh 处理程序时,它会抛出异常
[ERROR:../../lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter (21060): NoSuchMethodError: The method 'call' was called on null.
E/flutter (21060): Receiver: null
E/flutter (21060): Tried calling: call()
E/flutter (21060): #0 Object._noSuchMethod (dart:core-patch/object_patch.dart:43)
E/flutter (21060): #1 Object.noSuchMethod (dart:core-patch/object_patch.dart:47)
E/flutter (21060): #2 new Future.sync (dart:async/future.dart:222)
E/flutter (21060): #3 MyHomePageState.handleRefresh (file:///home/swav/Git/flutter/status-app/lib/state/state.dart:49)
E/flutter (21060): #4 RefreshIndicatorState._show.<anonymous closure> (package:flutter/src/material/refresh_indicator.dart:319)
E/flutter (21060): #5 _RootZone.runUnary (dart:async/zone.dart:1371)
E/flutter (21060): #6 _FutureListener.handleValue (dart:async/future_impl.dart:129)
E/flutter (21060): #7 _Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:636)
E/flutter (21060): #8 _Future._propagateToListeners (dart:async/future_impl.dart:665)
E/flutter (21060): #9 _Future._completeWithValue (dart:async/future_impl.dart:478)
E/flutter (21060): #10 _Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:510)
E/flutter (21060): #11 _microtaskLoop (dart:async/schedule_microtask.dart:41)
E/flutter (21060): #12 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50)
有趣的是 onRefresh 成功完成。
此外,当 RefreshIndicator 的直接 child 是一个 Flex 时,它并没有抱怨。
很难调试你的问题,因为你没有提供你的代码,但从堆栈跟踪中我可以看到在你的 handleRefresh
方法中,在 state.dart 的第 49 行,你是调用 new Future.sync(null)
,它试图将 null
作为函数调用。
当您需要一个完整的 Future
且值为 null
时,请尝试使用 new Future.value(null)
。但是当返回的 Future 立即完成时 RefreshIndicator
并没有做太多事情。您可能想查看此 example 以获得有关如何使用 RefreshIndicator
.
的灵感
当 child 是 Flex
时,它可能没有抱怨,因为 Flex
不滚动。
我有一个使用 RefreshIndicator 的布局。它的 child 是 CustomScrollView。但是,当调用 onRefresh 处理程序时,它会抛出异常
[ERROR:../../lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter (21060): NoSuchMethodError: The method 'call' was called on null.
E/flutter (21060): Receiver: null
E/flutter (21060): Tried calling: call()
E/flutter (21060): #0 Object._noSuchMethod (dart:core-patch/object_patch.dart:43)
E/flutter (21060): #1 Object.noSuchMethod (dart:core-patch/object_patch.dart:47)
E/flutter (21060): #2 new Future.sync (dart:async/future.dart:222)
E/flutter (21060): #3 MyHomePageState.handleRefresh (file:///home/swav/Git/flutter/status-app/lib/state/state.dart:49)
E/flutter (21060): #4 RefreshIndicatorState._show.<anonymous closure> (package:flutter/src/material/refresh_indicator.dart:319)
E/flutter (21060): #5 _RootZone.runUnary (dart:async/zone.dart:1371)
E/flutter (21060): #6 _FutureListener.handleValue (dart:async/future_impl.dart:129)
E/flutter (21060): #7 _Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:636)
E/flutter (21060): #8 _Future._propagateToListeners (dart:async/future_impl.dart:665)
E/flutter (21060): #9 _Future._completeWithValue (dart:async/future_impl.dart:478)
E/flutter (21060): #10 _Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:510)
E/flutter (21060): #11 _microtaskLoop (dart:async/schedule_microtask.dart:41)
E/flutter (21060): #12 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50)
有趣的是 onRefresh 成功完成。
此外,当 RefreshIndicator 的直接 child 是一个 Flex 时,它并没有抱怨。
很难调试你的问题,因为你没有提供你的代码,但从堆栈跟踪中我可以看到在你的 handleRefresh
方法中,在 state.dart 的第 49 行,你是调用 new Future.sync(null)
,它试图将 null
作为函数调用。
当您需要一个完整的 Future
且值为 null
时,请尝试使用 new Future.value(null)
。但是当返回的 Future 立即完成时 RefreshIndicator
并没有做太多事情。您可能想查看此 example 以获得有关如何使用 RefreshIndicator
.
当 child 是 Flex
时,它可能没有抱怨,因为 Flex
不滚动。