当用户登录时,将执行以下代码。
login() async { final SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setBool('loggedIn', true); }
我想在initialRoute中控制,如果loggedIn等于true,登录页面将不会显示。我该怎么做?
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的可读性。
AppRoutes
main.dart
1条答案
按热度按时间rxztt3cl1#
你可以在SharedPreferences上使用静态getter和setter:
然后在路由中添加一个条件:
另外,如果你要使用这样的路由,我建议你使用一个单独的类,比如
AppRoutes
,你可以保存所有的路由和与它们相关的逻辑,而不需要失去main.dart
的可读性。