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();
,这会将新值传递给应用程序。我说我假设您正确执行了多提供程序就像您使用 ChangeNotifierProvider
或 Consumer
包装应用程序或特定小部件以收听这些更改
据我所知,您的代码只会更改提供者的值,但不会重置状态。我想在注销后重新实例化提供程序。以上是关于Flutter - 用户从应用程序退出后如何擦除提供者数据?的主要内容,如果未能解决你的问题,请参考以下文章