#flutter #flutter-provider #flutter-image
Вопрос:
Я должен загрузить изображение из галереи на сервер с помощью поставщика в Flutter.
Вот средство выбора файлов
_loadPicker(ImageSource source) async {
File picked = await ImagePicker.pickImage(source: ImageSource.gallery);
print(picked);
if (picked != null) {
final response = await Provider.of<ProfilePictureUpdate>(context, listen:
false).profilePicUpdate(picked);
if (response["status"] ) {
Fluttertoast.showToast(msg: response["title"]);
}
else {
Fluttertoast.showToast(msg: response["title"]);
}
}
}
И вот метод post
Future<Map<String, dynamic>> profilePicUpdate(picked) async {
try {
final response = await ApiRequest.send(route: "profile/update/picture", method: "POST",
body: {
" photo_url" : picked,
});
if (response.statusCode == 200 ) {
return {
"status": true,
"title" : response["title"]
};
}
}
Ответ №1:
Если вы хотите отправить изображение, вам нужно использовать FormData( составную часть) в аналогичной сети » Dio » (enctype). В http вы также можете использовать составные части.
Необходимо помнить, что вы используете изображение всегда не одно и то же, здесь используйте это поле, когда имя параметров на стороне сервера совпадает.
class ImageRepository {
Future<dynamic> uploadImage(filepath) async {
FormData formData = FormData.fromMap({
"image": await MultipartFile.fromFile(filepath,
filename: filepath.split('/').last)
});
var response = await Dio().post(
url,
data: formData),
);
print(response.data);
if (response.statusCode == 200) {
return 'Image Upload';
} else {
throw Exception 'Problem occour';
}
}