首页 > 解决方案 > Flutter Firebase 身份验证:StreamBuilder 中的 authStateChanges() 方法无法从 LoginScreen 更改为 Dashboard

问题描述

我在文件中使用小部件StreamBuilderhome属性,以便在提供的包的帮助下在 WelcomeScreen(包含登录和注册按钮)和 DashboardScreen 之间导航。但每当我登录或注册时,它只会停留在该屏幕上,直到我手动热重载应用程序。我必须热重新加载应用程序才能从登录屏幕到仪表板。Firebase 身份验证工作正常。我可以看到用户在 firebase 控制台中注册。但是屏幕不会自动改变。此外,登录或注册代码后没有方法。MaterialApp()main.dartauthStateChanges()firebase_authNavigator.push()

主要飞镖:

import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_auth/firebase_auth.dart';

import 'package:banquet_owner_app/screens/welcome_screen.dart';
import 'package:banquet_owner_app/screens/dashboard.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: StreamBuilder(
        stream: FirebaseAuth.instance.authStateChanges(),
        builder: (context, userSnapshot) {
          if (userSnapshot.hasData) {
            return Dashboard();
          }
          return WelcomeScreen();
        },
      ),
    );
  }
}

标签: firebaseflutterdartfirebase-authenticationflutter-dependencies

解决方案


您需要获取流的状态,然后检查它是否有数据

这是怎么做

home: StreamBuilder(
        stream: FirebaseAuth.instance.authStateChanges(),
        builder: (context, userSnapshot) {
if (userSnapshot.connectionState == ConnectionState.waiting) {
//loading screen
}
if (userSnapshot.connectionState == ConnectionState.done) {
//state is loaded check if snapshot has data
if (userSnapshot.hasData) {
            return Dashboard();
          }else{
   return WelcomeScreen();
}
          
       
        },


          

推荐阅读