flutter - 注销提供者和共享首选项的最佳方法
问题描述
我有我的 ChangeNotifier 类,它应该触发注销会话跟踪,但它未能工作,实现这一点的更简洁的方法是什么,这是我的 ChnageNotifier 代码:
class ProfileTracker with ChangeNotifier {
bool _isAuthenticated = false;
static const String AUTH_TRACKER = "AUTH_TRACKER";
void setUp(val)async{
SharedPreferences prefs = await SharedPreferences.getInstance();
_isAuthenticated = await prefs.setBool(AUTH_TRACKER, val);
notifyListeners();
}
bool get isAuthenticated {
return this._isAuthenticated;
}
set isAuthenticated(bool newVal) {
setUp(newVal);
this.notifyListeners();
}
}
然后,这是我登录时设置的代码:
var profileTracker =
Provider.of<ProfileTracker>(context, listen: false);
profileTracker.isAuthenticated = true;
注销时,我使用:
var profileTracker =
Provider.of<ProfileTracker>(context, listen: false);
profileTracker.isAuthenticated = false;
但是当我注销时代码似乎不起作用,状态不会存储在共享首选项中。
解决方案
您可以在提供程序中的方法中清理 shared_preference 存储,如下所示
void logout() async{
SharedPreferences preferences = await SharedPreferences.getInstance();
await preferences.clear();
this._isAuthenticated = false;
this.notifyListeners();
}
您可以使用提供者对象调用此方法注销,并在通知注销后更改页面。
推荐阅读
- css - 我如何“裁剪” svg 以适应父母的形状?
- c# - 将参数传递给 swiftUI 上的 Get 请求
- javascript - 新标签页在 android chrome 上意外关闭
- mongodb - 在 MongoDB 中使用 group by、inner join 和嵌套条件进行聚合
- reactjs - 如何在不重新渲染先前组件的情况下使用 React Router 添加新组件?
- c - C中共享内存中的mmap函数中的权限被拒绝问题
- javascript - 如何比较 Luxon 中的持续时间或间隔?
- python - tf-idf 矢量化器中的“第一个参数必须是字符串或编译模式”错误
- javascript - 我的 SVG“StateSignal13”在触发后仍然显示。怎么了?
- google-chrome-extension - Chrome 扩展“测试和反馈”屏幕录制最长为 10 分钟。这可以延长吗?