0

我是新来的颤振。正在练习 google 帐户登录。当我定义 GoogleSignInAccount 时,出现错误:“A value of type 'GoogleSignInAccount?' 不能分配给“GoogleSignInAccount”类型的变量。”

final GoogleSignInAccount googleUser = await _googleSignIn.signIn();

其他人说我们可以使用“?” 来解决这个问题。有用。但是,弹出另一个问题:“属性'authentication'不能无条件访问,因为receiver可以是'null'。”

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

任何建议都会很棒。泰

4

1 回答 1

0

您会收到该警告,因为googleUser有一个可为的类型 ( GoogleSignInAccount?) 以便在 googleAuth 中使用它,您可以使用像这样的bang (null-aware) 运算符googleUser!.authentication;对其进行标记。但是,仅当您 100% 确定这永远不会为空时才使用该方法,在这种情况下,如果可能,您可以简单地使用不可为空的类型(不带“?”)。

或者,您可以使用control flow statements仅在使用非空值初始化 googleUser 后初始化 googleAuth。

例如这样的空检查:

if(googleUser !=null) {
   final GoogleSignInAuthentication googleAuth = await googleUser.authentication;
}

更多背景:

您收到错误的原因是:"A value of type 'GoogleSignInAccount?' can't be assigned to a variable of type 'GoogleSignInAccount'."_googleSignIn.signIn();具有可为的返回类型'GoogleSignInAccount?'(因为它可能会失败并且不返回用户),因此您不能将其分配给具有该类型的不可为空的变量'GoogleSignInAccount'.

仅供参考:在 _googleSignIn.signIn(); 周围添加空检查很可能更有意义。

于 2022-01-13T10:02:16.910 回答