簡體   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