为简化我的问题,我有4个屏幕。主屏幕,屏幕2,屏幕3和屏幕4。我在屏幕2中初始化了提供程序,然后导航到屏幕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的新手,所以id想知道解决此问题的最佳方法。如果需要更多信息或没有道理,我会改写这个问题。谢谢。