身份验证状态更改 return 始终为空
authentication state changes return always null
我正在尝试基于 fire base 的身份验证服务创建我的用户模式流。
基于 FirebaseUser 创建用户对象:
UnicoUser? _userFromFirebaseUser(User? user){
if (user != null) {
UnicoUser? _unicoUser;
DatabaseService(uid: user.uid).getUserFromUserId().then((value){ _unicoUser = value; print("user id: "+ value.uid);});
return _unicoUser;
}
return null;
}
创建授权更改用户流:
Stream<UnicoUser?> get unicoUser {
return _auth.authStateChanges().map(_userFromFirebaseUser);
}
小部件中的工具:
StreamBuilder(
stream: AuthServices().unicoUser,
builder: (context, AsyncSnapshot<UnicoUser?> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting){
return const Loading();}
else if(snapshot.hasData ){
return LoggedInWrapper(currentUser: snapshot.data!,);}
else if (snapshot.hasError){
return const Center(child: Text("Something went wrong"),);}
else {
print("snapshot is: "+ snapshot.data.toString());return const Authenticate();}
},
)
即使用户已通过身份验证且 unicouser 对象不为 null,快照数据也为 null..
输出:
Performing hot reload...
Syncing files to device AOSP on IA Emulator...
Reloaded 0 libraries in 111ms.
I/flutter (22920): snapshot is: null
I/flutter (22920): user id: fnWyLWrCznQDSmZGr6kShpXSsK52
问题出在您的 _userFromFirebaseUser
函数上。不幸的是,您不能以这种方式处理 async
值。 _unicouser
之前的函数 returns 由 then
设置。您需要使用 async
函数和 await
结果如下:
Future<UnicoUser?> _userFromFirebaseUser(User? user) async {
if (user != null) {
return await DatabaseService(uid: user.uid).getUserFromUserId();
}
return null;
}
那么你应该可以这样使用它:
Stream<UnicoUser?> get unicoUser {
return _auth.authStateChanges().asyncMap(_userFromFirebaseUser);
}
我正在尝试基于 fire base 的身份验证服务创建我的用户模式流。
基于 FirebaseUser 创建用户对象:
UnicoUser? _userFromFirebaseUser(User? user){
if (user != null) {
UnicoUser? _unicoUser;
DatabaseService(uid: user.uid).getUserFromUserId().then((value){ _unicoUser = value; print("user id: "+ value.uid);});
return _unicoUser;
}
return null;
}
创建授权更改用户流:
Stream<UnicoUser?> get unicoUser {
return _auth.authStateChanges().map(_userFromFirebaseUser);
}
小部件中的工具:
StreamBuilder(
stream: AuthServices().unicoUser,
builder: (context, AsyncSnapshot<UnicoUser?> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting){
return const Loading();}
else if(snapshot.hasData ){
return LoggedInWrapper(currentUser: snapshot.data!,);}
else if (snapshot.hasError){
return const Center(child: Text("Something went wrong"),);}
else {
print("snapshot is: "+ snapshot.data.toString());return const Authenticate();}
},
)
即使用户已通过身份验证且 unicouser 对象不为 null,快照数据也为 null.. 输出:
Performing hot reload...
Syncing files to device AOSP on IA Emulator...
Reloaded 0 libraries in 111ms.
I/flutter (22920): snapshot is: null
I/flutter (22920): user id: fnWyLWrCznQDSmZGr6kShpXSsK52
问题出在您的 _userFromFirebaseUser
函数上。不幸的是,您不能以这种方式处理 async
值。 _unicouser
之前的函数 returns 由 then
设置。您需要使用 async
函数和 await
结果如下:
Future<UnicoUser?> _userFromFirebaseUser(User? user) async {
if (user != null) {
return await DatabaseService(uid: user.uid).getUserFromUserId();
}
return null;
}
那么你应该可以这样使用它:
Stream<UnicoUser?> get unicoUser {
return _auth.authStateChanges().asyncMap(_userFromFirebaseUser);
}