首页 > 解决方案 > 注销提供者和共享首选项的最佳方法

问题描述

我有我的 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;

但是当我注销时代码似乎不起作用,状态不会存储在共享首选项中。

标签: fluttersharedpreferencesflutter-provider

解决方案


您可以在提供程序中的方法中清理 shared_preference 存储,如下所示

void logout() async{
  SharedPreferences preferences = await SharedPreferences.getInstance();
  await preferences.clear();
  this._isAuthenticated = false;
  this.notifyListeners();
}

您可以使用提供者对象调用此方法注销,并在通知注销后更改页面。


推荐阅读