Firebase LateInitializationError:字段'_imagePicked@20490806';尚未初始化

Firebase LateInitializationError:字段'_imagePicked@20490806';尚未初始化,firebase,flutter,dart,Firebase,Flutter,Dart,在尝试初始化数据时获取此信息 [The following LateError was thrown building UserImagePicker(dirty, state: _UserImagePickerState#adbb9): LateInitializationError: Field '_imagePicked@20490806' has not been initialized.] 代码如下: late File _imagePicked; final _pick

在尝试初始化数据时获取此信息

 [The following LateError was thrown building UserImagePicker(dirty, state:
_UserImagePickerState#adbb9):
LateInitializationError: Field '_imagePicked@20490806' has not been initialized.]
代码如下:

  late File _imagePicked;

  final _picker = ImagePicker();

  void _pickImage(ImageSource src) async {
    final pickedImageFile = await _picker.getImage(source: src);

    if (pickedImageFile != null) {
      setState(() {
        _imagePicked = File(pickedImageFile.path);
      });
    }
  }

Dart中的可为空的非
late
字段初始化为
null

String? string;
print(string);  // prints null
对于
late
字段,情况并非如此。
late字符串
不能包含
null
,因为
null
不是类型
字符串
的有效值(这是null安全的全部要点)

相反,
late
字段在首次分配之前未初始化。如果试图获取未初始化字段的值,则会出现
LateInitializationError
,而不是返回null

在您的情况下,我怀疑某处有一行包含:

if (_imagePicked == null) {
  // set _imagePicked
}
简单的解决方法是将
\u imagePicked
设为空。这有两个好处:

  • 您不必存储一个名为
    \u isImagePicked
    的额外布尔值来跟踪您是否设置了此值

  • 编译器将迫使您远离不安全的行为(例如当
    \u imagePicked
    为空时尝试调用
    \u imagePicked.foo()


  • 能否更新调用_pickImage()函数的位置?我认为当调用函数_pickImage()时,文件_imagePicked中没有任何内容。构建应用程序时,\u imagePicked没有任何内容,这将导致应用程序崩溃。

    请尝试“延迟文件”\u imagePicked