Firebase FlatterFire如何使用onAuthStateChanges?
我想知道如何正确地使用FlatterWeb中的onAuthStateChanges my的流程应如下所示:Firebase FlatterFire如何使用onAuthStateChanges?,firebase,flutter,firebase-authentication,flutter-web,Firebase,Flutter,Firebase Authentication,Flutter Web,我想知道如何正确地使用FlatterWeb中的onAuthStateChanges my的流程应如下所示: Future<void> main() async { setupLocator(); WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); var authService = locator<AuthenticationService>(); v
Future<void> main() async {
setupLocator();
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
var authService = locator<AuthenticationService>();
var navigationService = locator<NavigationService>();
authService.listenToAuthChanges(
() => {navigationService.pushNamedAndRemoveUntil(Routes.login)},
() => {navigationService.pushNamedAndRemoveUntil(Routes.homePage)});
runApp(MyApp());
}
如果用户已登录,则:
- 如果该页面是登录页面,则应重定向至主页李>
- 如果该页面是除登录页面以外的任何其他页面,则应保留在该页面上李>
- 如果该页面是登录页面,则应保留在该页面上李>
- 如果页面不是登录页面,则应在登录页面上重定向:
void listenToAuthChanges(Function onNotLoggedIn, Function onLoggedIn) {
FirebaseAuth.instance.authStateChanges().listen((firebaseUser) {
if (firebaseUser == null){
onNotLoggedIn();
}else{
onLoggedIn();
}
然后在main.dart文件中的main()函数中,我添加了以下内容:
Future<void> main() async {
setupLocator();
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
var authService = locator<AuthenticationService>();
var navigationService = locator<NavigationService>();
authService.listenToAuthChanges(
() => {navigationService.pushNamedAndRemoveUntil(Routes.login)},
() => {navigationService.pushNamedAndRemoveUntil(Routes.homePage)});
runApp(MyApp());
}
Future main()异步{
setupLocator();
WidgetsFlutterBinding.ensureInitialized();
等待Firebase.initializeApp();
var authService=locator();
var navigationService=locator();
authService.listenToAuthChanges(
()=>{navigationService.pushName和RemoveUntil(Routes.login)},
()=>{navigationService.pushName和removeUntil(Routes.homePage)});
runApp(MyApp());
}
如果我登录并登录到登录页面,这个实现就可以工作,但是无论我在哪个页面上,它都会将我重定向到主页(对于我实现的第二个功能)
我的目标是,只有当我没有登录并且在登录页面上时,才能重定向到主页
因此,我更改了实现,删除了这个函数,并将其添加到我的登录页面的initialize函数中(我使用的是与提供者体系结构堆叠在一起的包),这样,只有当我在登录页面上时才会调用它
以下是我的实施:
Future<void> main() async {
setupLocator();
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
var authService = locator<AuthenticationService>();
var navigationService = locator<NavigationService>();
authService.listenToAuthChanges(
() => {navigationService.pushNamedAndRemoveUntil(Routes.login)},
() => {);
runApp(MyApp());
}
Future main()异步{
setupLocator();
WidgetsFlutterBinding.ensureInitialized();
等待Firebase.initializeApp();
var authService=locator();
var navigationService=locator();
authService.listenToAuthChanges(
()=>{navigationService.pushName和RemoveUntil(Routes.login)},
() => {);
runApp(MyApp());
}
在我的loginviewmodel.dart中,我有一个函数,只有在调用登录页面时才应调用该函数:
Future<void> initialise() async {
bool loggedIn = await authenticationService.isUserLoggedIn();
if (loggedIn) {
navigationService.pushNamedAndRemoveUntil(Routes.homePage);
}
}
Future initialise()异步{
bool loggedIn=wait authenticationService.isUserLoggedIn();
if(loggedIn){
navigationService.PushName和RemoveUntil(Routes.homePage);
}
}
isUserLoggedIn()函数是一个实用函数,如果auth.currentUser不为null,则返回true,否则返回false
这里的问题是这个函数,虽然它在登录页面中,但是它总是被调用,如果我在其他页面上重定向,那么它的行为和以前一样
我的问题有两个:
- 如何处理Flatter Web中的onAuthStateChanges
- 当我键入web应用程序的url时,是否总是调用路由页面(在我的情况下是登录页面),无论我调用什么页面