【发布时间】:2020-08-26 00:06:40
【问题描述】:
为了简化我的问题,我有 4 个屏幕。主屏幕、屏幕 2、屏幕 3 和屏幕 4。我在屏幕 2 中初始化了一个 Provider,当我导航到屏幕 3 时,我通过了该提供商。
Navigator.push(context,
MaterialPageRoute(
builder: (_) {
return ChangeNotifierProvider<myProvider>.value(
value: initializedProvider,
child: Screen2()
.
.
当我从屏幕 3 导航到屏幕 4 时,我会这样做
..
return ChangeNotifierProvider<myProvider>.value(
value: Provider.of<myProvider>(context, listen: false),
child: Screen4()
当用户关闭应用程序时,我想删除所有路由并只显示我的登录页面。我通过使用来做到这一点
Navigator.pushNamedAndRemoveUntil(context, "/login", (Route<dynamic> route) => false );
(我在主页上监听 appLifecycleState 的变化。这就是我开始删除路由的地方。)
我注意到,每次关闭应用程序时,这都会以随机顺序删除路线。有时屏幕 2(我在其中初始化提供程序)首先被删除,这就是我收到错误“提供程序在被处理后使用”的时候。我确信这正在发生,因为屏幕 3 和 4 在处理时仍然有提供程序。
从底部开始移除屏幕时不会发生此错误(当屏幕 4 被移除,然后是屏幕 3,然后是屏幕 2,然后是主页)。我也不想将更改通知程序包裹在我的材料应用程序周围。
我是 Flutter 的新手,所以我想知道解决这个问题的最佳方法。如果它需要更多信息或没有意义,我会重写这个问题。谢谢。
【问题讨论】:
-
为什么不在 main.dart 中的小部件树顶部初始化提供程序?
-
我不想把它放在比必要的更高的树上。除非那是所有供应商的标准。我的问题是从任何屏幕关闭应用程序并且提供程序抛出错误。
标签: flutter routes navigation dispose provider