显示“ _MapStream <FirebaseUser,用户>”的实例,而不是在Flutter中显示uid

时间:2020-04-15 00:53:21

标签: firebase flutter firebase-authentication

我要在此处保留 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});

}

2 个答案:

答案 0 :(得分:1)

是的。这是因为“用户”是Firebase用户的实例。要获取uid,只需将'uid'属性用作:

_auth.user.uid

答案 1 :(得分:0)

您不能直接将流与.uid一起使用

我正在使用StreamProvider首先解析流

final user = Provider.of<User>(context);
final uid = user.uid;