【问题标题】:Dispose/reset providers after logging out注销后处理/重置提供程序
【发布时间】:2021-06-03 09:31:21
【问题描述】:

如何处置或重置我的所有提供商? 如果用户已注销,我需要重置所有提供程序,以便为新登录的用户再次触发所有提供程序流程。

我怎样才能做到这一点?

谢谢

【问题讨论】:

    标签: flutter


    【解决方案1】:

    您的Provider 负责处理处置:当提供程序小部件从树中移除时,它应该关闭流。

    您需要做的是将您的 Providers 仅放在“已登录用户”小部件树上方,这样当用户注销并放置在上面时,让我们说登录路由您的提供者将自动处理已删除的小部件。

    以下示例将 Model 实例化一次,并在 Provider 已从树中移除。

     class Model {
       void dispose() {}
     }
    
     class Stateless extends StatelessWidget {
       @override
       Widget build(BuildContext context) {
         return Provider<Model>(
           create: (context) =>  Model(),
           dispose: (context, value) => value.dispose(),
           child: ...,
         );
       }
     }
    

    值得注意的是,Provider.value 暴露了一个现有的值而不释放它。

    【讨论】:

    • 那么每个 Provider 都需要自己的 dispose 方法吗?在里面写什么?我只想再次触发构造函数。我想我需要重构,因为现在基本上我所有的提供者都是顶级的。
    猜你喜欢
    • 2014-11-22
    • 2019-09-20
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多