firebase - 这是检查用户是否登录的正确方法吗? flutter 火力

标签 firebase flutter firebase-authentication

我正在使用 Firebase 在我的应用程序中添加登录/注册。它运行良好,但现在我想检查用户在打开应用程序时是否已经注册并登录,如果是这样,则向他显示主页,否则向他显示登录页面。所以我做了一些搜索,主要是使用 Streambuilder 方法完成的。但我所做的只是检查用户是否使用登录

initialRoute: FirebaseAuth.instance.currentUser == null
              ? Routes.loginScreen
              : Routes.homePage,
它运行完美,几乎每个人都在使用 Streambuilder 方法。所以我很好奇我做错了吗?有一个更好的方法吗?这是完整的代码顺便说一句。哪个工作正常,但我只想知道这是否正确?
void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());
}

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

class _MyAppState extends State<MyApp> {
  final _initialization = Firebase.initializeApp();

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: _initialization,
      builder: (context, snapshot) {
        if (snapshot.connectionState != ConnectionState.done) {
          return Center(
            child: CircularProgressIndicator(),
            //Todo Add splashscreen
          );
        }
        return MaterialApp(
          debugShowCheckedModeBanner: false,
          title: "MyApp",
          initialRoute: FirebaseAuth.instance.currentUser == null
              ? Routes.loginScreen
              : Routes.homePage,
          onGenerateRoute: Routes.generateRoute,
        );
      },
    );
  }
}

最佳答案

使用 streambuilder 的原因是监视更改并将它们实际反射(reflect)在您的应用程序上。这段代码:

FirebaseAuth.instance.currentUser == null
              ? Routes.loginScreen
              : Routes.homePage,
当您的应用程序运行时,可以正常运行,但只能运行一次。仅当您的应用程序到达该行代码时,它才会捕获身份验证状态。但是如果之后用户注销,应用程序 UI 不会改变,这就是使用流的额外好处的来源。如果在您的应用程序中的任何地方添加了一个退出按钮,您的用户确实会被注销,但仍会在您的应用程序中。登录屏幕将不会返回。
由于您使用的是 FirebaseAuth SDK,建议充分利用它,因为它带有内置流,例如 idTokenChanges , authStateChanges , 和 userChanges ,它们将使您的生活更轻松,您的应用程序代码更优雅。
如果您想保持这样的代码,那很好,但请确保在您的 loginScreen 路由中,您有一个流,它监听 Auth 更改和类似于以下内容的伪代码:
StreamBuilder<User?>(
          stream: FirebaseAuth.instance.userChanges(),
          initialData: FirebaseAuth.instance.currentUser,
...etc
 if (snapshot.data == null) 
     return LoginScreenLogicWithButtons());
           
 if (snapshot.data != null) 
     return  HomePage();

关于firebase - 这是检查用户是否登录的正确方法吗? flutter 火力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68673592/

相关文章:

firebase - 如何在 flutter 和 firebase 中使用不同类型的用户登录?

javascript - 为复杂的 Firebase 查询提供 Angular 服务

javascript - 构建 Electron 应用程序后,Firebase无法进行身份验证

android - 无法解析 : com. google.firebase :firebase-firestore:16. 0.1

firebase - 将 SearchField 添加到从 Firestore 读取的 StreamBuilder

flutter - 如何在不使 main() 异步的情况下将异步对象注册到 get_it 包?

android - flutter 中的“A RenderFlex overflowed by 373 pixels on the bottom”问题[不重复]

c++ - 在 Flutter Windows 桌面应用程序中使用 C++ DLL

java - Firebase/DrawerLayout - 无缘无故注销?

firebase - 应用程序被终止后,Flutter firebase 身份验证不会持续存在