Flutter - 用户从应用程序退出后如何擦除提供者数据?

Posted

技术标签:

【中文标题】Flutter - 用户从应用程序退出后如何擦除提供者数据?【英文标题】:Flutter - How to wipe provider data after user signed out from app? 【发布时间】:2021-08-11 12:29:27 【问题描述】:

我在我的颤振应用程序中使用provider 进行状态管理。我已经使用Multiprovider 实现了提供程序。

我想在用户退出应用程序时擦除提供程序数据我已读出this 评论但不太了解。

【问题讨论】:

【参考方案1】:

如果您使用不同的密钥重建 MultiProvider 小部件,它会重置状态,因此会重建提供程序。这就是那里的解释。

因此,为了实现它,您需要做的是:

String userId = myUserId;

void signOut() 
   setState(() => userId = '');


Widget build(BuildContext context) 

  return MultiProvider(
    key: ObjectKey(userId),
    providers: // Your providers
    child: SomeSubtree(),
  );

假设您使用的是StatefulWidget,在这种情况下。 您可以阅读更多关于 Flutter 中键如何工作的信息here。

【讨论】:

我已经尝试过了,但它不起作用。能举个完整的例子吗?【参考方案2】:

思路是在用户想注销时清除状态,主要是通过设置token为null

此外,如果您将这些用户数据存储在设备中,您应该清除它们。对我来说,我使用 sharedprefrences。

我的代码示例

  Future<void> logOut() async 
    _token = null;
    notifyListeners();
    final prefs = await SharedPreferences.getInstance();
    prefs.clear();
  

如果你存储了其他数据也设置为null,并且一定要在设置这些数据为null后通知Listeners。

我想你正确地做了 multiprovder,所以我只知道你做 LogOut 的想法

【讨论】:

这不会重置提供者的状态。 我认为您到目前为止还不了解提供程序。我写了notifyListeners();,这会将新值传递给应用程序。我说我假设您正确执行了多提供程序就像您使用 ChangeNotifierProviderConsumer 包装应用程序或特定小部件以收听这些更改 据我所知,您的代码只会更改提供者的值,但不会重置状态。我想在注销后重新实例化提供程序。

以上是关于Flutter - 用户从应用程序退出后如何擦除提供者数据?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter如何有效地退出程序

Flutter如何有效地退出程序

Flutter如何有效地退出程序

退出应用时Flutter保存应用的状态(登录首页后应用从登录页面启动)

使用后退按钮退出应用程序后,我只能从共享偏好中获取值

如何从 Flutter(Dart) 中的另一个类调用方法?