问题描述
我已经使用 view=>viewmodel=>services 设置了我的架构。
在 FirestoreServices()
类中,我检索了登录用户的数据并将其存储在变量 _currentUser()
中,以便从应用程序内的任何位置访问它。这是执行此操作的代码:
Future getUser(String userId) async {
try {
DocumentSnapshot snapshot =
await _usersCollectionReference.doc(userId).get();
Object? data = snapshot.data();
var userObjectAsstring = (data as Map<String,dynamic>);
return usermodel.fromData(userObjectAsstring);
} on FirebaseException catch (e) {
return e.message;
}
}
返回值在我的 AuthenticationServices()
类中可用,我将其设置为私有变量 _currentUser 并创建了 getter。
...
usermodel? _currentUser;
usermodel? get currentUser => _currentUser;
...
Future _populateCurrentUser(User? user) async {
if (user != null) {
_currentUser = await _firestoreService!.getUser(user.uid);
}
}
问题是,当我尝试通过 getter 访问 Marketviewmodel()
中的这个变量时,该值始终为空:
String? _displayName;
set displayName(String? _displayName) {
_displayName = _authenticationService.currentUser!.fullName;
}
String? get displayName => _displayName;
class usermodel {
final String? fullName;
final String? id;
final String? email;
final String? phoneNumber;
usermodel({this.email,this.fullName,this.id,this.phoneNumber});
usermodel.fromData(Map<String,dynamic> data)
: id = data['id'],fullName = data['fullName'],email = data['email'],phoneNumber = data['phoneNuber'];
Map<String,dynamic> toJson() {
return {
'fullName': fullName,'email': email,'phoneNumber': phoneNumber,'id': id,};
}
}
为什么 Marketviewmodel()
没有收到填充的 currentUser?
编辑: 注册()
`usermodel? _currentUser;
usermodel? get currentUser => _currentUser;
Future signUp(
{required String fullName,required String email,required String phoneNumber,required String password}) async {
try {
var authResult = await _firebaseAuth.createuserWithEmailAndPassword(
email: email,password: password);
_currentUser = usermodel(
id: authResult.user!.uid,email: email,fullName: fullName,);
await _firestoreService!.createuserRecord(_currentUser!);
print(_currentUser);
return authResult.user != null;
} on FirebaseAuthException catch (e) {
return e.message;
}
}`
编辑: 登录()
`Future logIn({required email,required password}) async {
try {
var authResult = await _firebaseAuth.signInWithEmailAndPassword(
email: email,password: password);
await _populateCurrentUser(authResult.user!);
return authResult.user;
} on FirebaseAuthException catch (e) {
return e.message;
}
}
编辑: isUserLoggedIn()
` isUserLoggedIn() {
var user = FirebaseAuth.instance.currentUser;
_populateCurrentUser(user);
return user;
}
}`
解决方法
试试这个改变:
UserModel? get currentUser => _firebaseAuth.currentUser;
注意:我没有在 _firebaseAuth.currentUser
中使用空安全,因为我不熟悉它。如果需要,请将任何空安全功能添加到 _firebaseAuth.currentUser
。