dart 如何使用SharedPreferences更改初始路由?

ffvjumwh  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(111)

当用户登录时,将执行以下代码。

login() async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setBool('loggedIn', true);
  }

我想在initialRoute中控制,如果loggedIn等于true,登录页面将不会显示。我该怎么做?

rxztt3cl

rxztt3cl1#

你可以在SharedPreferences上使用静态getter和setter:

class Preferences extends ChangeNotifier {
  static late SharedPreferences _prefs;

  static Future init() async {
    _prefs = await SharedPreferences.getInstance();
  }

  static bool _isLoggedIn = false;
  static bool get isLoggedIn {
    return _prefs.getBool('loggedIn') ?? _isLoggedIn;
  }

  static set isLoggedIn(bool loggedIn) {
    _isLoggedIn = loggedIn;
    _prefs.setBool('loggedIn', _isLoggedIn);
  }
}

然后在路由中添加一个条件:

MaterialApp(
initialRoute: Preferences.isLoggedIn? 'main': 'login',
...);

另外,如果你要使用这样的路由,我建议你使用一个单独的类,比如AppRoutes,你可以保存所有的路由和与它们相关的逻辑,而不需要失去main.dart的可读性。

相关问题