未捕获的延迟初始化错误:字段"设备令牌"尚未初始化



错误:未捕获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

最新更新