尝试初始化数据时得到这个。
[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);
});
}
}
答案 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
}
可以为空。这有两个好处:
您不必存储一个名为 _imagePicked
的额外布尔值来跟踪您是否设置了此值
编译器会强迫你远离不安全的行为(比如当 _isImagePicked
为 null 时尝试调用 _imagePicked.foo()
)
答案 1 :(得分:0)
你能更新一下你调用 _pickImage() 函数的问题吗?我认为当您调用函数 _pickImage() 时,文件 _imagePicked 中没有任何内容。构建应用时,_imagePicked 没有任何内容,这会导致应用崩溃。