我正在構建一個僅支持使用google_sign_in包進行谷歌登錄的應用程式。當應用程式運行時,它首先檢查 FirebaseAuth 是否處于活動狀態。如果用戶輸入FirebaseAuth.instance.authStateChanges().listen((User? user)不為空,HomePage()則應顯示。如果用戶為空,則應轉到具有谷歌登錄按鈕的 AuthPage()。
的代碼main.dart如下所示。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
Widget _defaultHome = HomePage();
// Check if user already logged in
FirebaseAuth auth = FirebaseAuth.instance;
auth.authStateChanges().listen((User? user) {
if (user == null) {
_defaultHome = AuthPage();
}
print(user);
});
runApp(MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => SignInProvider()),
ChangeNotifierProvider(create: (_) => DataProvider()),
],
child: new MaterialApp(
title: 'Mentea',
home: _defaultHome,
routes: {
'auth': (context) => AuthPage(),
'home': (context) => HomePage(),
},
),
));
}
但是當我運行它時,控制臺給出
I/flutter (14933): null
這意味著沒有登錄用戶,但模擬器顯示 HomePage() 而不是 AuthPage()。有誰知道如何解決這個問題?我嘗試將 'home:' 屬性更改為 'initialRoute:',但它也不起作用(在列印 null 時指向 HomePage())。
String _defaultHome = 'home';
...
auth.authStateChanges().listen((User? user) {
if (user == null) {
_defaultHome = 'auth;
}
});
...
child: new MaterialApp(
title: 'Mentea',
initialRoute: _defaultHome,
routes: {
'auth': (context) => AuthPage(),
'home': (context) => HomePage(),
},
),
uj5u.com熱心網友回復:
我們可以將一個StreamBuilder監聽FirebaseAuth狀態變化的home屬性分配給屬性:
StreamBuilder(
stream: FirebaseAuth.instance.onAuthStateChanged,
builder: (user) {
return user == null ? AuthPage() : HomePage(),
}
),
遵循一個完整的例子:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => SignInProvider()),
ChangeNotifierProvider(create: (_) => DataProvider()),
],
child: MaterialApp(
title: 'Mentea',
home: StreamBuilder(
stream: FirebaseAuth.instance.onAuthStateChanged,
builder: (user) {
return user == null ? AuthPage() : HomePage(),
},
),
routes: {
'auth': (context) => AuthPage(),
'home': (context) => HomePage(),
},
),
));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/342555.html
標籤:火力基地 扑 镖 firebase-身份验证
