![](/img/trans.png)
[英]How to structure a model in Flutter and Firebase after null safety
[英]Firebase Auth failing with null safety
我有一个 Firebase 授权登录 function,我不得不更改一些代码以允许null safety
Auth
function 的这个特定部分被证明是棘手的
Future<String> getCurrentUser() async {
User? user = await _firebaseAuth.currentUser;
return user!.uid;
}
在我运行之前,我的代码没有错误。 然后它在return
语句上失败,其中Null check operator used on a null value
。
这是当没有用户登录时,因此没有当前用户可返回。
我必须安全地安装 null 但在这样做时 null 检查正在完成它的工作,看到没有当前用户并且失败。
然后我可以在模拟器上按“播放”,代码在 sim 上运行良好,但在生产中这不起作用,需要修复。
当我在没有用户登录的情况下再次按下重新启动时,它失败了,按下“播放”似乎让它很开心,尽管只返回了null
,但它工作正常。
有办法解决这个问题吗? 我试过if
但我仍然需要return user.;uid;
在最后
任何帮助表示赞赏,谢谢
所有应用程序的理想实现是使用authStateChanges()来使用身份验证 state 观察器。 只要知道用户已完全登录或注销,这就会给您一个回调。 这将使您可以根据 state 调整您的 UI。正确实施后,这将为您提供一种立即响应用户 state 的方法,并且如果用户 object 之前已登录并且还会为您提供用户 object 首先可用的时刻刚刚再次启动该应用程序。
FirebaseAuth.instance
.authStateChanges()
.listen((User? user) {
if (user == null) {
print('User is currently signed out!');
} else {
print('User is signed in!');
}
});
要清楚:不要使用 currentUser,除非您只需要快速检查用户在 state 中的登录。最好听取随时间的变化并在它们发生时做出响应。
如果用户是 null,您可以返回一个空字符串。
Future<String> getCurrentUser() async {
User? user = await _firebaseAuth.currentUser;
if(user != null){
return user!.uid;
} else {
return "";
}
}
然后当你调用你的方法时,你可以检查结果是否为空:
String userId = await getCurrentUser();
if(userId != ""){
// Do stuff when user is logged in
} else{
// Do stuff when user is not logged in
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.