Flutter 2.0 Firebase 身份验证包装器,具有空安全

时间:2021-04-30 21:32:57

标签: firebase flutter authentication firebase-authentication

我正在使用 Firebase 进行用户身份验证,并且一直在升级到 Flutter 2.0。在将代码重构为空安全时,我遇到了 Firebase 身份验证包装器的问题。我如何确保根据 firebase 用户身份验证状态返回正确的小部件?

以前的空检查就足够了,如下所示。

class AuthenticationWrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {

final firebaseUser = context.watch<User>();
if (firebaseUser != null) {
  return MainMenu();
}
return Login();
}
}

1 个答案:

答案 0 :(得分:1)

好的,所以我找到了一种使用 Firebase 对 Flutter 进行身份验证检查的方法,并且具有 null 安全性。我用 Flutter 2.0.6 对此进行了测试。

在我的问题中,我没有像上面那样使用 firebaseUser != null 检查,而是创建了一个类,该类返回一个 Streambuilder 小部件,该小部件为 FirebaseAuth.instance.authStateChanges 流式传输并检查“snapshot.hasData”并返回相应的 Widget,在我的情况下是 Login 或 MainMenu。

这可以通过类或方法来实现,并且取决于偏好或用例。

课程版本:

class AuthenticationCheck extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder(
    stream: FirebaseAuth.instance.authStateChanges(),
    builder: (BuildContext context, snapshot) {
      if (snapshot.hasData) {
        return MainMenu();
      } else
        return Login();
    });
}
}

方法版本:

Widget checkAuthenticationStatus() {
return StreamBuilder(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (BuildContext context, snapshot) {
  if (snapshot.hasData) {
    return MainMenu();
  } else
    return Login();
},
);
}