删除路由会处理提供程序并引发错误

时间:2020-08-26 00:06:40

标签: flutter routes navigation dispose provider

为简化我的问题,我有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想知道解决此问题的最佳方法。如果需要更多信息或没有道理,我会改写这个问题。谢谢。

0 个答案:

没有答案