Тип аргумента «Файл?» не может быть присвоен типу параметра » Будущее?»

#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,  );  } }```