在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,
- 答复:
- 参考:
@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”流为我提供登录和注销事件,但不提供创建帐户的事件。-有什么需要说明的吗?