错误:未捕获LateInitializationError:字段"deviceToken"尚未初始化。不确定这里出了什么问题。
late String deviceToken;
var registerRepo = GoogleSignInRepo();
FirebaseAuth auth = FirebaseAuth.instance;
Future<String> gettoken() async {
final String? token = await FirebaseMessaging.instance.getToken();
return token!;
}
@override
void initState() {
gettoken().then((value) {
deviceToken = value;
});
super.initState();
}
这个错误几乎告诉你问题:
Error: Uncaught LateInitializationError: Field 'deviceToken' has not been initialized.
Flutter是null安全的,因此,如果定义一个变量,则需要为其赋值,因为定义的值不允许为null。请记住,late
关键字仅告诉您变量将在运行时而不是编译时初始化。
这意味着代码的其他部分可能在Future
中初始化之前就访问了deviceToken
。
你可以这样解决:
// Assign a value (empty string in this case).
String deviceToken = "";
另一个解决方案是使字段可以为null,这可能是您的情况下更好的解决方案。
// Null is a valid value and will not cause a error.
String? deviceToken;
或者:在访问之前,请确保字段已初始化。
为了进一步参考,本文可能会帮助您:https://dart.dev/null-safety/understanding-null-safety