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

在Flatter中使用FirebaseAuth检查用户的身份验证状态,firebase,flutter,dart,firebase-authentication,stream,Firebase,Flutter,Dart,Firebase Authentication,Stream,我知道有这样一个问题存在,但它充满了过时和不正确的答案。新的文档使用流来获取用户的状态,我很难完成这样一项琐碎的任务,因为我对颤振和飞镖缺乏经验。这是这个过时问题的答案和参考 答复: 参考: 我期待着与StreamBuilder一起得到答案,以下是我迄今为止编写的代码: @override Widget build(BuildContext context) { return StreamBuilder( builder: (BuildContext context,

我知道有这样一个问题存在,但它充满了过时和不正确的答案。新的文档使用流来获取用户的状态,我很难完成这样一项琐碎的任务,因为我对颤振和飞镖缺乏经验。这是这个过时问题的答案和参考

  • 答复:
  • 参考:
我期待着与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; ???
      }
    });
  }
@覆盖
小部件构建(构建上下文){
返回流生成器(
生成器:(BuildContext上下文,异步快照){
if(snapshot.hasData){
打印(“数据存在”);
返回snapshot.data?First():SignIn();
}
否则{
返回符号();
}
},
future:isUserLoggedIn(),
);
}
流isUserLoggedIn(){
FirebaseAuth.instance
.authStateChanges()
.listen((用户){
if(user==null){
打印('用户当前已注销!');
//返回false???
}否则{
打印('用户已登录!');
//返回true???
}
});
}
编辑:

Firebase Auth使您能够通过>流实时订阅此状态。调用后,流提供用户>当前身份验证状态的即时事件,然后在身份验证状态更改时提供后续事件

isUserLoggedIn()
没有返回任何类型的流。我建议只听实际的
authStateChanges()

小部件构建(构建上下文){
返回流生成器(
流:FirebaseAuth.instance.authStateChanges(),
生成器:(BuildContext上下文,异步快照){
if(snapshot.hasData){
打印(“数据存在”);
先返回();
}
否则{
返回符号();
}
},
);
}

StreamBuilder
不接受
future
属性,它需要
stream
属性。我在问题中编写的代码已经过时。我要求更新代码,以使更多新手开发人员不会在以前的线程中遇到错误和过时的答案。你给出的答案是正确的!这在安卓系统中似乎是可行的,但在Web上,
hasData
永远不会triggers@Benjamin-在我的例子中,“FirebaseAuth.instance.authStateChanges”流为我提供登录和注销事件,但不提供创建帐户的事件。-有什么需要说明的吗?