我正在 Flutter 应用程序中实现 firebase 身份验证,但在尝试获取用户 uid 时,它崩溃并显示 noSuchMethodError uid 为 null ,如果有人可以提供帮助,不胜感激
class _UserRegistrationState extends State<UserRegistration> {
FirebaseAuth auth;
DocumentReference reference;
Reference storage;
PickedFile imageUri;
final ImagePicker _imagePicker = new ImagePicker();
@override
void initState() {
super.initState();
auth = FirebaseAuth.instance;
// the uid is where the logcat is pointing too and it is null
reference = FirebaseFirestore.instance.collection('users').doc(auth.currentUser.uid);
storage = firebase_storage.FirebaseStorage.instance.ref('avatar').child(auth.currentUser.uid);
}
答案 0 :(得分:1)
currentUser → 用户? 如果当前用户已登录,则返回当前用户,否则返回 null。
所以很可能是你没有登录,因此将 null 传递给 reference
答案 1 :(得分:1)
当您登录 Firebase 身份验证时,SDK 会自动将用户的凭据保存在本地存储中。当您重新启动应用程序时,SDK 会尝试从存储的凭据中恢复用户的身份验证状态。这要求它调用服务器以获取新的 ID 令牌,例如检查帐户是否在此期间被删除/禁用。
根据您运行代码的平台,对服务器的调用可能在您的 auth.currentUser
运行之前完成,也可能未完成。要安全地响应用户状态,请始终使用身份验证状态侦听器,如 responding to auth state changes 上的 FlutterFire 文档中所示:
@override
void initState() {
super.initState();
auth = FirebaseAuth.instance;
FirebaseAuth.instance.authStateChanges().listen((User user) {
if (user == null) {
print('User is currently signed out!');
} else {
print('User is signed in!');
reference = FirebaseFirestore.instance.collection('users').doc(auth.currentUser.uid);
storage = firebase_storage.FirebaseStorage.instance.ref('avatar').child(auth.currentUser.uid);
}
});
}