我正在使用Flutter web和Firebase开发一个web应用程序。
我必须处理Firebase登录。
假设我们有两个屏幕,我想实现的情况如下:
如果用户未登录:
- 重定向登录页面上的用户
如果用户未登录:
- 如果他登录了登录页面,请在主页上重定向他
我已经实现了一个功能,该功能检查firebase中的当前用户,其作用如下:
void checkAuthentication() {
var url = window.location.href;
var navigationService = locator<NavigationService>();
var loggedIn = this.isUserLoggedIn();
if (!loggedIn) {
navigationService.replaceWith(Routes.login);
} else {
if (url.contains("Login")) {
navigationService.replaceWith(Routes.homepage);
}
}
}
导航服务是我从堆叠的软件包中获得的服务(https://pub.dev/packages/stacked)。
这个解决方案有效,但有两个问题:
- 这不是正确的方法。我不可能在每个屏幕页面上都调用这个
- 当你被重定向时,你可以看到一个带有新页面的转换
我的问题:在Flutter Web中,您将如何在代码中的一个独特点中管理这一点?有没有更好的方法来实现与我在这里展示的不同?
如果你有时间,请查看网络忍者Flutter/Firebase教程中的前几段视频,这些视频将介绍基本身份验证。我是Flutter的新手,所以我会尽我所能解释他是如何做到的,而不必详细说明:
他有一个文件wrapper.dart
,该文件使用一个自定义用户对象,该对象不断地流式传输身份验证状态。包装器根据身份验证状态决定用户应该导航到哪里。
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
print(user);
// return either home or authenticate
if (user == null) {
return Authenticate();
} else {
return Home();
}
}
我在我的项目中使用了这段代码,它运行得很好。