如何在Flutter的Firebase中检查当前用户为空



目标

我正在尝试在我的flutter应用程序屏幕上显示当前登录用户的姓名。如果当前没有用户从该设备登录,则会出现空白。此名称存储在一个名为userName的String变量中。此外,如果用户已登录,则布尔isSignedIn变量将设置为true,否则为false。

我的代码

firebase_auth_methods.dart文件中,我有以下代码:

final FirebaseAuth _auth;
//STATE PERSISTANCE
Stream<User?> get authState => FirebaseAuth.instance.authStateChanges();
//GET USER
User get user => _auth.currentUser!;

在我的account_screen.dart文件中,我在Widget build((中有以下代码:

final currUser = context.read<FirebaseAuthMethods>().user;
print(currUser);
if (!currUser.isAnonymous && currUser.phoneNumber == null) {
userName = currUser.email!;
isSignedIn = true;
}
if (currUser.phoneNumber != null) {
userName = currUser.phoneNumber!;
isSignedIn = true;
}
if (currUser.isAnonymous) {
isSignedIn = true;
}
if (currUser == null) {
userName = "Guest";
isSignedIn = false;
}

面临的问题

但是,我无法检查currUser的可能空值,因为我收到警告:操作数不能为空,因此条件始终为false。请尝试删除条件、封闭条件或整个条件语句

当没有用户从此模拟器AVD/设备登录时,导航到account_screen将返回空值错误使用空检查运算符。

我似乎理解为什么会出现这个错误,但不知道如何对currUser的null值执行所需的验证检查。这是我第一次尝试Firebase身份验证,所以请帮我解决这个问题。

删除'!'来自getter的符号:

User? get user => _auth.currentUser!; <--- here, and make the return type nullable.  

现在,当你阅读用户时:

final currUser = context.read<FirebaseAuthMethods>().user;

它将可以为null
您得到错误是因为您使用!强制用户不可为null!。

在您的user类中,如果user为空或非空,请为bool创建一个getter。

class User {
final String id;
final String? email;
final String? name;
final String? photo;
static const empty = User(id: '');
bool get isEmpty => this == User.empty;
bool get isNotEmpty => this != User.empty;
const User({
required this.id,
this.name,
this.email,
this.photo
});
}

这里的逻辑是,如果用户id或uid为空或等于'',则不存在用户

你可以这样使用它:

final currUser = context.read<FirebaseAuthMethods>().user;
if (currUser.isEmpty) {
userName = "Guest";
isSignedIn = false;
}

相关内容

  • 没有找到相关文章

最新更新