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