我正在flutter应用程序中使用Firebase身份验证。当用户注册或登录时,我可以看到FirebaseAuth.instance.onAuthStateChanged被调用 但Streambuilder不会更新小部件。我还注意到,有时用户登录后甚至没有调用FirebaseAuth.instance.onAuthStateChanged。但是,当我重新加载屏幕或重新运行应用程序时,我可以看到该用户已登录。以下是我的streambuilder代码。
return StreamBuilder<FirebaseUser>(
stream: FirebaseAuth.instance.onAuthStateChanged,
builder: (ctx, userSnapshot) {
if (userSnapshot.hasData) {
print(userSnapshot.data);
print('data changed');
return FutureBuilder(
future: Future.delayed(Duration(seconds: 1)),
builder: (ctx, asyncdata) {
if (asyncdata.connectionState == ConnectionState.done) {
print('user has data');
return UserList();
} else {
return Scaffold(
body: Center(
child: CircularProgressIndicator(),
),
);
}
},
);
} else {
print('load auth screen');
return AuthScreen();
}
},
);
答案 0 :(得分:0)
可能您确实使用未在 onAuthStateChanged 中分配的 FirebaseAuth 登录,因此您应该这样做:
_auth = FirebaseAuth.instance;
///
StreamBuilder<FirebaseUser>(
stream: _auth.onAuthStateChanged,
///
signIn() async {
var result = await _auth.signInWithCredential(credential);
}