我正在使用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);
}
}
}
navigationService是我从堆叠式包装(https://pub.dev/packages/stacked)中获得的服务。
此解决方案有效,但是有两个问题:
我的问题: 您将如何在Flutter Web中的代码中唯一之处进行管理? 有没有比我在此展示的方法更好的方法来实现这一区别?
答案 0 :(得分:0)
如果您有时间,请查看The Net Ninja's Flutter / Firebase教程中的前几对视频,这些视频将通过基本身份验证。我对Flutter还是很陌生,所以我会尽力解释他是如何做到的,而无需进行详细介绍:
他有一个文件wrapper.dart
,该文件使用自定义的User对象,该对象不断地传输身份验证状态。包装器根据身份验证状态决定用户应导航到的位置。
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();
}
}
我在项目中使用了这段代码,效果很好。