在Flutter中使用FirebaseAuth检查用户的身份验证状态

时间:2020-08-31 10:41:33

标签: firebase flutter dart firebase-authentication stream

我知道存在这样的问题,但是问题已经过时且不正确。新的FlutterFire文档使用Streams来获取User的状态,由于我对Flutter和Dart经验不足,因此我很难执行一个琐碎的任务。这是过时问题的答案和参考。

我期待与StreamBuilder一起回答,这是我到目前为止所写的代码:

@override
  Widget build(BuildContext context) {
    return StreamBuilder(
      builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) { 
        if(snapshot.hasData) {
          print("data exists");
          return snapshot.data ? First() : SignIn();
        }
        else {
          return SignIn();
        }
      },
      future: isUserLoggedIn(),
    );
  }

Stream<bool> isUserLoggedIn() {
    FirebaseAuth.instance
        .authStateChanges()
        .listen((User user) {
      if (user == null) {
        print('User is currently signed out!');
        // return false; ???
      } else {
        print('User is signed in!');
        // return true; ???
      }
    });
  }

编辑:

Firebase Auth使您可以通过> Stream实时订阅此状态。一旦被调用,该流将提供用户当前>当前身份验证状态的即时事件,然后在身份验证状态更改时提供后续事件。

FlutterFire Auth Doc

1 个答案:

答案 0 :(得分:2)

isUserLoggedIn()未返回任何流。我建议只听实际的authStateChanges()流。

  Widget build(BuildContext context) {
    return StreamBuilder<User>(
      stream: FirebaseAuth.instance.authStateChanges(),
      builder: (BuildContext context, AsyncSnapshot<User> snapshot) { 
        if(snapshot.hasData) {
          print("data exists");
          return First();
        }
        else {
          return SignIn();
        }
      },
    );
  }