NoSuchMethodError:方法 'ancestorStateOfType' 在 null 上被调用
Posted
技术标签:
【中文标题】NoSuchMethodError:方法 \'ancestorStateOfType\' 在 null 上被调用【英文标题】:NoSuchMethodError: The method 'ancestorStateOfType' was called on nullNoSuchMethodError:方法 'ancestorStateOfType' 在 null 上被调用 【发布时间】:2019-02-07 09:11:53 【问题描述】:我正在为流做这样的 iam 列表更改屏幕,当它发出时我更改屏幕
@override
void initState()
super.initState();
appBloc.error.listen((data)
_scaffoldKey.currentState.showSnackBar(new SnackBar(content: new
Text(data)));
);
appBloc.success.listen((_) => goToDashBoardScreen(context));
doToDashBoardScreen 看起来像这样
Navigator.pushReplacement(context, new SlideRightRoute(widget:
DashBoardScreen()));
但我收到这样的错误,但我更改了页面。
22:05:02.446 3 info flutter.tools E/flutter (13216): NoSuchMethodError:
The method 'ancestorStateOfType' was called on null.
22:05:02.446 4 info flutter.tools E/flutter (13216): Receiver: null
22:05:02.446 5 info flutter.tools E/flutter (13216): Tried calling:
ancestorStateOfType(Instance of 'TypeMatcher<NavigatorState>')
22:05:02.446 6 info flutter.tools E/flutter (13216): #0
Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:48:5)
22:05:02.446 7 info flutter.tools E/flutter (13216): #1
Navigator.of (package:flutter/src/widgets/navigator.dart:1270:19)
22:05:02.446 8 info flutter.tools E/flutter (13216): #2
Navigator.pushReplacement
(package:flutter/src/widgets/navigator.dart:952:22)
【问题讨论】:
【参考方案1】:您的小部件很可能已从树中删除。因此它不再有context
。
问题是,您忘记取消订阅您的Stream
。因此,即使从树中删除,您的小部件仍会尝试更新。
解决方案是取消订阅dispose
电话:
class Foo extends StatefulWidget
@override
_FooState createState() => _FooState();
class _FooState extends State<Foo>
StreamSubscription streamSubscription;
@override
void initState()
super.initState();
streamSubscription = Bloc.of(context).myStream.listen((value)
print(value);
);
@override
void dispose()
streamSubscription.cancel();
super.dispose();
@override
Widget build(BuildContext context)
return Container();
【讨论】:
是的,它解决了问题!谢谢。我想知道 didChangeDependencies 会解决它,但它没有。何时使用 initState 与 didChangeDependencies ?? 你知道如何解决吗? ***.com/questions/62097660/…【参考方案2】:问题:传递给子小部件的上下文是错误的。
解决方案:在传递 Build 方法上下文后,该上下文是传递给子小部件的正确上下文,我的问题得到解决。
【讨论】:
以上是关于NoSuchMethodError:方法 'ancestorStateOfType' 在 null 上被调用的主要内容,如果未能解决你的问题,请参考以下文章
未处理的异常:NoSuchMethodError:类“RemoteMessage”没有实例方法“[]”
使用 TextView 方法获取 NoSuchMethodError
颤振和json:NoSuchMethodError:方法'[]'在null上被调用
java.lang.NoSuchMethodError:没有虚拟方法 getParentFragmentManager()