【问题标题】:Best approach to logout Provider and Shared preferences注销提供者和共享首选项的最佳方法
【发布时间】:2020-09-22 19:28:30
【问题描述】:

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

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

【问题讨论】:

    标签: flutter sharedpreferences flutter-provider


    【解决方案1】:

    您可以在提供程序中的方法中按以下方式清理 shared_preference 存储

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

    您可以调用该方法使用provider对象进行注销,并在通知注销后更改页面。

    【讨论】:

    • 这只会清除所有共享的首选项,其次我在这里看不到你是如何存储this._isAuthenticated的,如果我杀死应用程序并回来我会登录跨度>
    • 您可以创建init(),它应该在应用启动时从shared_preference 中为isAuthenticated 获取此值,如果您获得的值为true,您可以在主页上重定向用户
    • 我不想清除所有的共享首选项,我只是想寻找一种在 ChangeNotifier 的 getter 和 setter 中附加共享首选项的方法
    • 您可以为 shared_preferences 创建单独的实用程序并在应用程序启动期间使用它。检查this
    猜你喜欢
    • 2018-03-22
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多