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

时间:2021-06-02 13:13:53

标签: 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 _picker = ImagePicker();

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

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

2 个答案:

答案 0 :(得分:1)

Dart 中可空的非def sorter(value): text, nb = value.split(" ") return int(nb.strip("()")), text l = ['hey (0)', 'hey (1)', 'bye (3)', 'bye (1)'] l.sort(key=sorter) print(l) # ['hey (0)', 'bye (1)', 'hey (1)', 'bye (3)'] 字段被初始化为 late

null

String? string; print(string); // prints null 字段并非如此。 late 不能包含 late String,因为 null 不是类型 null 的有效值(这是空安全的全部意义)。

相反,String 字段在首次分配之前未初始化。如果您尝试获取未初始化字段的值,则会得到 late,而不是返回 null。

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

LateInitializationError

简单的解决方法是让 if (_imagePicked == null) { // set _imagePicked } 可以为空。这有两个好处:

  1. 您不必存储一个名为 _imagePicked 的额外布尔值来跟踪您是否设置了此值

  2. 编译器会强迫你远离不安全的行为(比如当 _isImagePicked 为 null 时尝试调用 _imagePicked.foo()

答案 1 :(得分:0)

你能更新一下你调用 _pickImage() 函数的问题吗?我认为当您调用函数 _pickImage() 时,文件 _imagePicked 中没有任何内容。构建应用时,_imagePicked 没有任何内容,这会导致应用崩溃。