#flutter #dart #file-upload #imagepicker
#трепетать #дротик #файл-загрузить #формирователь изображений
Вопрос:
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 FutureBuilderlt;Filegt;( future: file, builder: (BuildContext context, AsyncSnapshotlt;Filegt; snapshot) { if (snapshot.connectionState == ConnectionState.done amp;amp; 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
Комментарии:
1.
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, ); } }```