具有空安全性的Flatter 2.0 Firebase身份验证包装器

具有空安全性的Flatter 2.0 Firebase身份验证包装器,firebase,flutter,authentication,firebase-authentication,Firebase,Flutter,Authentication,Firebase Authentication,我正在使用Firebase进行用户身份验证,并已升级到Flatter 2.0。在将代码重构为空安全时,我遇到了Firebase身份验证包装器的问题。如何根据firebase用户身份验证状态确保返回正确的小部件 以前,空检查已足够,如下所示 class AuthenticationWrapper extends StatelessWidget { @override Widget build(BuildContext context) { final firebaseUser = context

我正在使用Firebase进行用户身份验证,并已升级到Flatter 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();
}
}
class AuthenticationWrapper扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
final firebaseUser=context.watch();
if(firebaseUser!=null){
返回主菜单();
}
返回登录名();
}
}

好的,所以我找到了一种方法,使用Firebase对具有空安全性的颤振进行身份验证检查。我用颤振2.0.6测试了这个

而不是使用firebaseUser!=空检查在我的问题中,我创建了一个类,该类返回一个Streambuilder小部件,该小部件为FirebaseAuth.instance.authStateChanges流,并检查“snapshot.hasData”是否为“snapshot.hasData”,并返回相应的小部件,在我的示例中,该小部件是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();
},
);
}
方法版本:

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