【发布时间】: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(),.
标签: flutter dart file-upload imagepicker