参数类型“文件?”不能分配给参数类型 'Future<File>?'
Posted
技术标签:
【中文标题】参数类型“文件?”不能分配给参数类型 \'Future<File>?\'【英文标题】:The argument type 'File?' can't be assigned to the parameter type 'Future<File>?'参数类型“文件?”不能分配给参数类型 'Future<File>?' 【发布时间】:2022-01-14 08:03:42 【问题描述】: File ? file;
String status = '';
String ? base64Image;
File ? tmpFile;
String errMessage = 'Error Uploading Image';
chooseImage() async
var image = await ImagePicker().pickImage(source: ImageSource.gallery);
setState(()
file = File(image!.path);
);
setStatus('');
print(base64Image);
startUpload()
setStatus('Uploading Image...');
if (null == tmpFile)
setStatus(errMessage);
return;
String fileName = tmpFile!.path.split('/').last;
upload(fileName);
setStatus(String message)
setState(()
status = message;
);
upload(String fileName)
http.post(Uri.parse(URL), body:
"image": base64Image,
"name": fileName,
).then((result)
setStatus(result.statusCode == 200 ? result.body : errMessage);
).catchError((error)
setStatus(error);
);
Widget showImage()
return FutureBuilder<File>(
future: file,
builder: (BuildContext context, AsyncSnapshot<File> snapshot)
if (snapshot.connectionState == ConnectionState.done &&
null != snapshot.data)
tmpFile = snapshot.data;
base64Image = base64Encode(snapshot.data!.readAsBytesSync());
return Flexible(
child: Image.file(
snapshot.data!,
fit: BoxFit.fill,
),
);
else if (null != snapshot.error)
return const Text(
'Error Picking Image',
textAlign: TextAlign.center,
);
else
return const Text(
'No Image Selected',
textAlign: TextAlign.center,
);
,
);
我正在尝试选择一个图像并将其转换为 base64
【问题讨论】:
future: file,
这是违规行。 file
是一个 File?
对象。 FutureBuilder
需要某种 Future
。你想用那个FutureBuilder
做什么?我想这就是你想要的:future: chooseImage(),
.
【参考方案1】:
你不需要使用 FutureBuilder 来使用 File
而是直接使用它:
Widget showImage()
if (file != null)
tmpFile = file!;
base64Image = base64Encode(file!.readAsBytesSync());
return Flexible(
child: Image.file(
file!,
fit: BoxFit.fill,
),
);
else
return const Text(
'No Image Selected',
textAlign: TextAlign.center,
);
```
【讨论】:
以上是关于参数类型“文件?”不能分配给参数类型 'Future<File>?'的主要内容,如果未能解决你的问题,请参考以下文章
参数类型“Function”不能分配给参数类型“void Function()?”在零安全之后
参数类型“Future<bool>”不能分配给参数类型“bool”