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

标签 firebase flutter dart firebase-authentication stream

我知道存在这样的问题,但它充满了过时和不正确的答案。新款FlutterFire文档使用 Streams 来获取用户的状态,我很难尝试执行如此微不足道的任务,因为我对 Flutter 和 Dart 缺乏经验。这是过时问题的答案和引用。

  • 答案:https://stackoverflow.com/a/50714618/14080391
  • 引用:https://firebase.flutter.dev/docs/auth/usage#authentication-state

  • 我期待与 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 enables you to subscribe in realtime to this state via a >Stream. Once called, the stream provides an immediate event of the user's >current authentication state, and then provides subsequent events whenever ?the authentication state changes.


    FlutterFire Auth Doc

    最佳答案

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

    关于firebase - 在 Flutter 中使用 FirebaseAuth 检查用户的身份验证状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63669262/

    相关文章:

    dart - 新的Dart版本破坏了int和double使用num的抽象

    swift - 观察 Firebase 的特定数据集

    reactjs - Firebase 错误 : Bucket name not specified or invalid

    android - 为什么我在Flutter Android项目中收到gradle错误?

    android - Flutter - 在 webview 上拉动刷新?

    class - 类的对象未在 Flutter 的循环中实例化

    flutter - FieldValue.increment在离线状态下无法正常工作

    ios - 此假通知应转发到 firebase Swift5 iOS

    ios - 如何通过swift3在firebase中24小时内删除数据

    flutter - 在 Flutter 中绘制 ListView 边界之外