奇怪的FirebaseAuth.instance.onAuthStateChanged无法更新streambuilder

时间:2020-05-15 19:26:26

标签: flutter firebase-authentication

我正在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();
        }
      },
    );

1 个答案:

答案 0 :(得分:0)

可能您确实使用未在 onAuthStateChanged 中分配的 FirebaseAuth 登录,因此您应该这样做:

 _auth = FirebaseAuth.instance;
///
StreamBuilder<FirebaseUser>(
      stream: _auth.onAuthStateChanged,
///
signIn() async {
var result = await _auth.signInWithCredential(credential);
}