【问题标题】:A value of type 'AuthResult' can't be assigned to a variable of type 'FirebaseUser'无法将“AuthResult”类型的值分配给“FirebaseUser”类型的变量
【发布时间】:2019-12-23 10:21:04
【问题描述】:

我正在使用 Firebase Google 登录选项在我的项目中实现 google 登录方法,当在我的代码中添加以下行时,它会抛出如下错误:

A value of type 'AuthResult' can't be assigned to a variable of type 'FirebaseUser'

这是我的代码:

final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
final GoogleSignIn _googlSignIn = new GoogleSignIn();

Future<FirebaseUser> _signIn(BuildContext context) async {

  Scaffold.of(context).showSnackBar(new SnackBar(
    content: new Text('Sign in'),
  ));

  final GoogleSignInAccount googleUser = await _googlSignIn.signIn();
  final GoogleSignInAuthentication googleAuth =await googleUser.authentication;

  final AuthCredential credential = GoogleAuthProvider.getCredential(
    accessToken: googleAuth.accessToken,
    idToken: googleAuth.idToken,
  );

  FirebaseUser userDetails = await _firebaseAuth.signInWithCredential(credential).user;
  ProviderDetails providerInfo = new ProviderDetails(userDetails.providerId);

  List<ProviderDetails> providerData = new List<ProviderDetails>();
  providerData.add(providerInfo);

  UserDetails details = new UserDetails(
    userDetails.providerId,
    userDetails.displayName,
    userDetails.photoUrl,
    userDetails.email,
    providerData,
  );

  Navigator.push(
    context,
    new MaterialPageRoute(
      builder: (context) => new Profile(detailsUser: details),
    ),
  );
  return userDetails;
}

谁能告诉我是什么问题。

【问题讨论】:

    标签: firebase flutter dart firebase-authentication


    【解决方案1】:

    方法firebaseAuth.signInWithCredential(credential)返回一个AuthResult类型的值,因此您需要执行以下操作:

    AuthResult userDetails = await _firebaseAuth.signInWithCredential(credential);
    

    对于您的代码而言,另一种选择和更好的选择是因为 signInWithCredential 返回 AuthResult 并且由于类 AuthResult 包含 user 类型的实例变量 user FirebaseUser,那么您可以执行以下操作:

    FirebaseUser userDetails = (await _firebaseAuth.signInWithCredential(credential)).user;
    

    https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_auth/firebase_auth/lib/src/auth_result.dart#L18

    【讨论】:

    • 当我使用这行代码时,它仍然向我抛出错误 FirebaseUser userDetails = await _firebaseAuth.signInWithCredential(credential).user;
    • 未为类 Future 定义用户
    • 我做到了,但还是一样。我已经更新了我的代码,请检查
    • 应该是这样的FirebaseUser userDetails = (await _firebaseAuth.signInWithCredential(credential)).user;
    • 你能回答我的另一个问题吗?我真的很长时间以来都被困在这个问题上
    【解决方案2】:

    简单的解决方案(由类型更改引起):

    Firebase 最近已将其类型“FirebaseUser”(现已弃用)类型更改为“用户”。尝试在您的代码中重命名相同的名称,这应该是解决方案。就我而言,它适用于大多数相同的错误。

    最好的

    【讨论】:

      猜你喜欢
      • 2020-02-01
      • 2020-01-10
      • 2020-02-19
      • 2021-08-28
      • 2019-10-19
      • 2022-01-03
      • 2022-11-23
      • 2022-01-15
      • 2020-01-21
      相关资源
      最近更新 更多