Flutter: GoogleSignInAccount 属性 'authentication' 无法无条件访问,因为receiver可以'null'

Flutter: GoogleSignInAccount The property 'authentication' can't be unconditionally accessed because the receiver can be 'null'

我是 Flutter 新手。正在练习 google 账号登录。 当我定义 GoogleSignInAccount 时,出现错误:“'GoogleSignInAccount?' 类型的值无法分配给 'GoogleSignInAccount' 类型的变量。”

final GoogleSignInAccount googleUser = await _googleSignIn.signIn();

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

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

任何建议都很好。泰

您收到该警告是因为 googleUser 具有 nullable 类型 (GoogleSignInAccount?) 以便在 googleAuth 中使用它可以用 bang(null 感知)运算符 标记它,就像这样 googleUser!.authentication;。但是,只有在您 100% 确定 this 永远不会为 null 时才使用该方法,在这种情况下,您可以尽可能简单地使用不可为 null 的类型(不带“?”)。

或者,您可以使用 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(); 有一个 nullable return 类型的 'GoogleSignInAccount?' (因为它可能会失败并且不会 return 用户),因此您不能将其分配给类型为 'GoogleSignInAccount'.[=18 的 不可空变量 =]

仅供参考:在 _googleSignIn.signIn();

周围添加空值检查很可能更有意义