微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

提供者:查找停用的小部件的祖先是不安全的

如何解决提供者:查找停用的小部件的祖先是不安全的

尝试从提供程序获取值,效果很好,但出现以下错误。我在这里做错了什么?

  @override
  Widget build(BuildContext context) {
    String route = Provider.of<User>(context) == null ? Router.LOGIN : Router.HOME;
    Future.delayed(const Duration(seconds: 2),() => Navigator.pushReplacementNamed(context,route));

    return Scaffold(........

错误

E/Flutter (23058): [ERROR:Flutter/shell/common/shell.cc(209)] Dart Error: Unhandled exception:
E/Flutter (23058): Looking up a deactivated widget's ancestor is unsafe.
E/Flutter (23058): At this point the state of the widget's element tree is no longer stable.
E/Flutter (23058): To safely refer to a widget's ancestor in its dispose() method,save a reference to the ancestor by calling dependOnInheritedWidgetofExactType() in the widget's didChangeDependencies() method.

解决方法

问题是无法等待导航器调用。如果您需要导航到正确的构建页面,则创建一个没有返回类型的异步方法,然后在initState中调用该方法。

_checkUserExistsAndNavigate() async {
  String route = Provider.of<User>(context) == null ? Router.login : Router.home;
await Future.delayed(seconds: 2),() => Navigator.pushReplacementNamed(context,route);
}

@initState(() {
_checkUserExistsAndNavigate();
super.initState();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。