首页 > 解决方案 > 使用firebase在flutter中设置动态初始路由

问题描述

我是flutter和firebase开发的新手,我有一个问题:我有2条路线:SignInRoute和HomeRoute,当应用程序启动时,用户将被重定向到取决于currentUser的屏幕。如果 CurrentUser != null => 将他重定向到 homeScreen 否则重定向到 SignInScreen。如何将此逻辑添加到 main.dart。这是我的代码,当我运行它时,它总是将 SignInScreen.routeName 作为初始路由:

import 'package:books_library_app/routes.dart';
import 'package:books_library_app/theme.dart';
import 'package:books_library_app/ui/views/home/home_view.dart';
import 'package:books_library_app/ui/views/auth/sign_in_view.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';


void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  FirebaseUser user;
  
  @override
  void initState() {
    super.initState();
    getCurrentUser();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: theme(),
      initialRoute:
          (user != null) ? HomeView.routeName : SignInScreen.routeName,
      routes: routes,
    );
  }

  getCurrentUser() async {
    FirebaseUser currentUser;
    currentUser = await FirebaseAuth.instance.currentUser();
    setState(() {
      user = currentUser;
    });
  }
}

标签: firebaseflutterdartfirebase-authentication

解决方案


问题可能是由于让用户函数异步而出现的,所以首先在构建欢迎页面时,用户的初始值为 null,当它更新时,小部件已经构建,因此您可以做的一种方法是将欢迎页面创建为加载屏幕或应用程序的任何启动屏幕以及 getcurrentuser 函数

 getCurrentUser() async {
    FirebaseUser currentUser;
    currentUser = await FirebaseAuth.instance.currentUser();
    if(currentuser==null){
//push to signin page
} 
else{
//push to home page
}
}

初始化函数

 void initState() {
    getCurrentUser();
     super.initState();
  }

谢谢,我希望它会帮助让我知道您是否仍然遇到一些问题


推荐阅读