我有一个flutter应用程序。我想让用户即使在退出应用程序后也能登录。我有main.dart文件、login.dart和dashboard.dart。如果用户尚未登录,我希望main.dart重定向到login.dart,但如果找到共享的首选项值,则直接重定向到仪表板。
您不必做任何事情来保持用户使用Firebase身份验证登录。SDK将记住该用户,并在应用程序重新启动时重新登录。在共享的首选项中存储任何内容都没有帮助。根据文件:
所有平台的Firebase SDK都提供开箱即用的支持,以确保用户的身份验证状态在应用程序重新启动或页面重新加载时保持不变。
您应该使用状态侦听器流来了解SDK何时验证了用户登录时用户对象可用。请务必阅读相关文档。
FirebaseAuth.instance
.authStateChanges()
.listen((User user) {
if (user == null) {
print('User is currently signed out!');
} else {
print('User is signed in!');
}
});
您甚至可以使用pub.dev中的共享首选项插件,检查这个插件。我也用过,如果你需要更多的解释,请问我我会帮你。首先,当用户登录时,创建一个共享的首选项实例。然后将用户id值存储在那里。
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('uid', userCredential.user!.uid);
然后检查用户是否登录,检查该实例。
SharedPreferences prefs = await SharedPreferences.getInstance();
bool userStatus = prefs.containsKey('uid');
如果用户已经登录,"userStatus"将返回true。然后您可以使用"uid"显示有关该用户的所有详细信息。当用户注销时,请从共享引用中删除"uid"。
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.remove('uid');
您可以使用共享首选项来保持登录和注销。您可以检查如何使用共享首选项来保持用户登录flutter。