繁体   English   中英

未捕获的 LateInitializationError:字段“deviceToken”尚未初始化

[英]Uncaught LateInitializationError: Field 'deviceToken' has not been initialized

错误:未捕获的 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。请记住, late关键字仅告诉您该变量将在运行时初始化而不是编译时间。

这意味着您的代码的某些其他部分可能会在deviceToken在您的Future中初始化之前访问它。

你可以这样解决:

// Assign a value (empty string in this case).  
String deviceToken = "";

另一种解决方案是使您的字段可为空,这可能是您的情况下更好的解决方案。

// Null is a valid value and will not cause a error. 
String? deviceToken;

或者:确保该字段在您访问它之前已被初始化。

如需进一步参考,本文可能会对您有所帮助: https://dart.dev/null-safety/understanding-null-safety

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM