重置提供者数据 - Flutter

Posted

技术标签:

【中文标题】重置提供者数据 - Flutter【英文标题】:Reset provider data - Flutter 【发布时间】:2020-04-23 17:20:33 【问题描述】:

我在我的应用程序中使用了 multiprovider。 Provider 工作完美,它存储数据,并在发生任何变化时提供完美的事件。

现在,我的应用中有这个场景 ->

用户 1 已登录。现在,当我在同一个登录名中添加第二个帐户(如 Gmail - 多帐户)时,提供商会返回旧值。

我尝试搜索提供者的重置值,但找不到与之相关的任何内容。

尝试过但没有用:

创建了要重置的提供程序的新对象。 Provider.of<LoginProvider>(context).dispose();

【问题讨论】:

你试过return Provider.value(value: <State dependent variable>, child: ...)吗? 您能详细说明一下吗? 我会发布一个更清晰的答案 @HarshPatel 你有没有解决过这个问题,因为我现在正面临同样的问题? 嗯.. 到目前为止,我无法解决问题,但找到了一个临时解决方案。只需在每个提供程序中创建方法 reset() 并尝试在您的 LOGOUT 或希望从您要清除提供程序的函数中调用它。现在在该提供者重置方法中重新初始化所有变量。到目前为止,我已经实现了使用这个东西。 @埃尔默 【参考方案1】:

要更新 Provider 值,您可以使用 .value() 构造函数调用它并使用状态相关变量。

class SomeWidgetState extends State<SomeWidget> 
    Logins logins = [];

    void addLogin(Login newLogin) 
        setState(()
            logins = [...logins, newLogin];
        );
    

    @override
    Widget build(BuildContext context) 
        return Provider.value(
            value: logins,
            child: OtherWidget(),
        );
    

当调用addLogin时,Provider中的注册值会被更新。

【讨论】:

感谢朋友的回答。让我试试。但是你确定它会清除provider当前所有的存储值吗? 可以,你可以在setState中设置你需要的值。

以上是关于重置提供者数据 - Flutter的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 找不到具有权限的提供者的元数据

如何在 Flutter 中获取有关提供者上下文更改的网络数据

Flutter中提供者有啥用?

如何在 Flutter Firestore 提供程序中显示数据

跨 Asp.NET Core 和 Framework 的数据保护提供程序(生成密码重置链接)

你如何在 Flutter 中创建服务/提供者?