飞镖颤动 "Non-nullable instance field '_isSigningIn' must be initialized." 错误
Dart Flutter "Non-nullable instance field '_isSigningIn' must be initialized." Error
我正在尝试使用 Dart Flutter 进行 Google 身份验证操作。
我编写的代码与我观看的视频中的代码完全相同。虽然它在视频中没有给出错误,但它给了我一个错误。
我的代码:
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
class GoogleSignInProvider extends ChangeNotifier {
final googleSignIn = GoogleSignIn();
bool _isSigningIn;
GoogleSignInProvider() {
_isSigningIn = false;
}
bool get isSigningIn => _isSigningIn;
set isSigningIn(bool isSigningIn) {
_isSigningIn = isSigningIn;
notifyListeners();
}
Future login() async {
isSigningIn = true;
final user = await googleSignIn.signIn();
if (user == null) {
isSigningIn = false;
return;
} else {
final googleAuth = await user.authentication;
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
await FirebaseAuth.instance.signInWithCredential(credential);
isSigningIn = false;
}
}
void logout() async {
await googleSignIn.disconnect();
FirebaseAuth.instance.signOut();
}
}
错误:
GoogleSignInProvider GoogleSignInProvider()
package:todolist/google_sign_in.dart
Non-nullable instance field '_isSigningIn' must be initialized.
Try adding an initializer expression, or add a field initializer in this constructor, or mark it 'late'.
问题是什么?我该如何解决?在此先感谢您的帮助。
使 _isSigningIn 可以为空或初始化。即
class GoogleSignInProvider extends ChangeNotifier {
final googleSignIn = GoogleSignIn();
bool? _isSigningIn; // Note the ? (question mark).
或
class GoogleSignInProvider extends ChangeNotifier {
final googleSignIn = GoogleSignIn();
bool _isSigningIn = false;
您收到此错误是因为 dart 现在支持 null-safety 并且默认情况下处于启用状态。而旧版本的 dart 则没有。
因为您的值不可为空,所以它需要一个默认值
bool _isSigningIn; //non-nullable variable should be inialized
bool? _isSigningIn; //nullable variable and does not requires initialization
如果你让你的变量可以为空,你可以让它保持未初始化状态,在其他情况下,你应该在定义它时初始化它
bool _isSigningIn = false;
或者在构造函数中使用一个值,如下所示:
GoogleSignInProvider(this._isSigningIn);
还有一个选项,你也可以给个默认值:
- 将你的变量放在 [] 中并给出一个默认值,这将是位置参数,但不是必需的
参见下面的示例:
class GoogleSignInProvider extends ChangeNotifier {
final googleSignIn = GoogleSignIn();
bool _isSigningIn;
GoogleSignInProvider([this._isSigningIn = false]);
}
我正在尝试使用 Dart Flutter 进行 Google 身份验证操作。
我编写的代码与我观看的视频中的代码完全相同。虽然它在视频中没有给出错误,但它给了我一个错误。
我的代码:
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
class GoogleSignInProvider extends ChangeNotifier {
final googleSignIn = GoogleSignIn();
bool _isSigningIn;
GoogleSignInProvider() {
_isSigningIn = false;
}
bool get isSigningIn => _isSigningIn;
set isSigningIn(bool isSigningIn) {
_isSigningIn = isSigningIn;
notifyListeners();
}
Future login() async {
isSigningIn = true;
final user = await googleSignIn.signIn();
if (user == null) {
isSigningIn = false;
return;
} else {
final googleAuth = await user.authentication;
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
await FirebaseAuth.instance.signInWithCredential(credential);
isSigningIn = false;
}
}
void logout() async {
await googleSignIn.disconnect();
FirebaseAuth.instance.signOut();
}
}
错误:
GoogleSignInProvider GoogleSignInProvider()
package:todolist/google_sign_in.dart
Non-nullable instance field '_isSigningIn' must be initialized.
Try adding an initializer expression, or add a field initializer in this constructor, or mark it 'late'.
问题是什么?我该如何解决?在此先感谢您的帮助。
使 _isSigningIn 可以为空或初始化。即
class GoogleSignInProvider extends ChangeNotifier {
final googleSignIn = GoogleSignIn();
bool? _isSigningIn; // Note the ? (question mark).
或
class GoogleSignInProvider extends ChangeNotifier {
final googleSignIn = GoogleSignIn();
bool _isSigningIn = false;
您收到此错误是因为 dart 现在支持 null-safety 并且默认情况下处于启用状态。而旧版本的 dart 则没有。
因为您的值不可为空,所以它需要一个默认值
bool _isSigningIn; //non-nullable variable should be inialized
bool? _isSigningIn; //nullable variable and does not requires initialization
如果你让你的变量可以为空,你可以让它保持未初始化状态,在其他情况下,你应该在定义它时初始化它
bool _isSigningIn = false;
或者在构造函数中使用一个值,如下所示:
GoogleSignInProvider(this._isSigningIn);
还有一个选项,你也可以给个默认值:
- 将你的变量放在 [] 中并给出一个默认值,这将是位置参数,但不是必需的
参见下面的示例:
class GoogleSignInProvider extends ChangeNotifier {
final googleSignIn = GoogleSignIn();
bool _isSigningIn;
GoogleSignInProvider([this._isSigningIn = false]);
}