我要在此处保留 uid 值,但是当我使用 _auth.user.toString()时,它将返回'_MapStream的实例而不是uid,我被困在这里,新扑腾
somefile.dart
Future<void> verifyPhone(phoneNo) async {
final PhoneVerificationCompleted verified = (AuthCredential authResult) {
_auth.signInWithOTP(smsCode, verificationId);
print(phoneNo);
//print uid value over here
print(_auth.user.toString());
};
somefile2.dart
User _userFromFireBaseUser(FirebaseUser user){
return user != null ? User(uid: user.uid) : null;
}
Stream<User> get user{
return _auth.onAuthStateChanged.map(_userFromFireBaseUser);
// .map((FirebaseUser user) => _userFromFireBaseUser(user));
}
Future signInWithOTP(smsCode, verId) async {
try{
AuthCredential authCreds = PhoneAuthProvider.getCredential(
verificationId: verId, smsCode: smsCode);
AuthResult result = await _auth.signInWithCredential(authCreds);
FirebaseUser user = result.user;
return _userFromFireBaseUser(user);
}
catch(e){
print(e.toString());
return null;
}
}
user.dart
class User{
final String uid;
User({this.uid});
}
答案 0 :(得分:1)
是的。这是因为“用户”是Firebase用户的实例。要获取uid,只需将'uid'属性用作:
_auth.user.uid
答案 1 :(得分:0)
您不能直接将流与.uid一起使用
我正在使用StreamProvider首先解析流
final user = Provider.of<User>(context);
final uid = user.uid;