[英]The getter 'uid' was called on null in flutter
我在 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);
}
当前用户→用户? 如果当前用户当前已登录,则返回当前用户,否则返回 null。
所以最有可能的是您没有登录,因此将 null 传递给reference
当您登录 Firebase 身份验证时,SDK 会自动将用户的凭据保存在本地存储中。 当您重新启动应用程序时,SDK 会尝试从存储的凭据中恢复用户的身份验证 state。 这要求它调用服务器以获取新的 ID 令牌,例如检查帐户是否同时被删除/禁用。
根据您运行代码的平台,对服务器的调用可能在您的auth.currentUser
运行之前完成,也可能没有。 为了安全地响应用户 state,请始终使用身份验证 state 侦听器,如 FlutterFire 文档中关于响应身份验证 state 更改中所示:
@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);
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.