отправка файла в api во флаттере - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь отправить файл из приложения флаттера в API. Этот API принимает следующие значения: enter image description here

Здесь profileImage принимает тип File

Это код, который я использовал во флаттере

                      ....................
                      ....................

                      final File _imgfile = widget.imageFile;

                      print(_fbName + _fbEmail);

                      final body = {
                        "name": _fbName,
                        "gender": gender,
                        "bday": bday,
                        "email": _fbEmail,
                        "phone": _phone,
                        "profileImage": _imgfile
                      };
                      print(body);

                      RegisterUserService.RegisterUser(jsonEncode(body))
                          .then((success) {
                        if (success) {
                          print('registration successfull');

                          //passing data to next screens
                          Navigator.of(context).push(MaterialPageRoute(
                              builder: (context) => SetupStepThree()));
                        } else {
                          print('registration error !');
                        }
                      });
                      ..................

И этот сервис вызывается указанным выше кодом

class RegisterUserService {
  static Future<bool> RegisterUser(body) async {

    final response =
        await http.post('${URLS.BASE_URL}/user/register', body:body);

    var data = response.body;
    // print(body);
    print(json.decode(data));

    // Map<String, dynamic> res_data = jsonDecode(data);
    // log(res_data['loginstatus']);
    // if (res_data['loginstatus'] == 'olduser') {
    //   return true;
    // } else {
    //   return false;
    // }
    return false;
  }
}

Но дело в том, что это дает мне следующую ошибку:

**

I/flutter ( 4860): ══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
I/flutter ( 4860): The following JsonUnsupportedObjectError was thrown while handling a gesture:
I/flutter ( 4860): Converting object to an encodable object failed: Instance of '_File'

**

Я хочу знать, что не так с этим кодом и как можно Я передаю изображение в эту конечную точку

1 Ответ

1 голос
/ 07 февраля 2020

Для загрузки файлов во флаттере вы можете использовать MultipartRequest

Uri uri = Uri.parse("${URLS.BASE_URL}/user/register");
var fileStream = new http.ByteStream(DelegatingStream.typed(imageFile.openRead()));
  var length = await imageFile.length();

var request = new http.MultipartRequest("POST", uri);
//add your fields here
request.fields.add("gender","male");
request.fields.add("name","sssss");

var multipartFile = new http.MultipartFile('file', fileStream, length,
      filename: <Your file name>);
request.files.add(multipartFile);
  var response = await request.send();
 //do whatever you want with the response

Дайте мне знать, если это решит вашу проблему

...