我知道存在这样的问题,但是问题已经过时且不正确。新的FlutterFire文档使用Streams来获取User的状态,由于我对Flutter和Dart经验不足,因此我很难执行一个琐碎的任务。这是过时问题的答案和参考。
我期待与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; ???
}
});
}
编辑:
Firebase Auth使您可以通过> Stream实时订阅此状态。一旦被调用,该流将提供用户当前>当前身份验证状态的即时事件,然后在身份验证状态更改时提供后续事件。
答案 0 :(得分:2)
isUserLoggedIn()
未返回任何流。我建议只听实际的authStateChanges()
流。
Widget build(BuildContext context) {
return StreamBuilder<User>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (BuildContext context, AsyncSnapshot<User> snapshot) {
if(snapshot.hasData) {
print("data exists");
return First();
}
else {
return SignIn();
}
},
);
}