无法将“OAuthCredential”类型的值分配给“GoogleAuthCredential”类型的变量
Posted
技术标签:
【中文标题】无法将“OAuthCredential”类型的值分配给“GoogleAuthCredential”类型的变量【英文标题】:A value of type 'OAuthCredential' can't be assigned to a variable of type 'GoogleAuthCredential' 【发布时间】:2022-01-03 11:02:21 【问题描述】:这是我的谷歌登录代码..
onPressed: () async
final GoogleSignInAccount newuser= await GoogleSignIn().signIn();
final GoogleSignInAuthentication newuserauth= await
googleUser.authentication;
final GoogleAuthCredential cred= GoogleAuthProvider.credential(accessToken:
newuserauth.accessToken,idToken: newuserauth.idToken);
await FirebaseAuth.instance.signInWithCredential(cred);
,
我得到的错误如下..
error: A value of type 'OAuthCredential' can't be assigned to a variable of type
'GoogleAuthCredential'. (invalid_assignment at [firebase] lib\firstpage.dart:147)
error: Undefined name 'googleUser'. (undefined_identifier at [firebase]
lib\firstpage.dart:145)
error: A value of type 'GoogleSignInAccount?' can't be assigned to a variable of type
'GoogleSignInAccount'. (invalid_assignment at [firebase] lib\firstpage.dart:144)
这些是我的 pubspec.yaml 中的依赖项。
dependencies:
flutter:
sdk: flutter
firebase_auth: ^3.2.0
firebase_core : ^1.10.0
flutter_spinkit: ^5.1.0
cloud_firestore: ^3.1.0
google_sign_in: ^5.2.1
【问题讨论】:
【参考方案1】:您的代码存在多个问题,如下所示:
第 2 行:GoogleSignIn().signIn()
返回GoogleSignInAccount?
,这意味着它可能为空,但您使用的是GoogleSignInAccount
,这意味着它不能为空,,所以将其更改为(这是您遇到的最后一个错误):
final GoogleSignInAccount? newuser= await GoogleSignIn().signIn();
第 3 行和第 4 行:您使用了变量名 newuser
而不是 googleUser
更改其中之一(第二个错误)
第 5 行和第 6 行:GoogleAuthProvider.credential(..)
返回 OAuthCredential
而不是 GoogleAuthCredential
,这是您遇到的第一个错误。
但是,使用final
,您无需指定变量类型,这是 Dart 的优势之一。
此外,您会在newuser.authentication
上收到错误,因为如前所述,newuser 可能为 null,因此您无法访问 authentication
... 我喜欢这样做,因为我不喜欢处理空值就是在使用它之前从函数返回,如果它是空的。
所以整个代码将是(我添加了类型,以便您可以看到差异,但您不需要它们):
final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();
if (googleUser == null) return null;
final GoogleSignInAuthentication googleAuth = await googleUser.authentication;
final OAuthCredential credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
await FirebaseAuth.instance.signInWithCredential(credential);
【讨论】:
以上是关于无法将“OAuthCredential”类型的值分配给“GoogleAuthCredential”类型的变量的主要内容,如果未能解决你的问题,请参考以下文章
如何用sql语句将一个字段的值加1-MS-SQLServer/疑难问题
无法将类型“[PHAsset]”的值分配给类型“UIImageView!”