how to send an object in formdata flutter

4.5k views Asked by At

I am currently working on a mobile app and I am stuck in this for days now. I have been trying to send a post request to create an object "Leave" as represents the code below. The request body is formData with a key 'leave' and value 'jsonObject'.I've tried a lot of methods and it has a relation with 'Content-type'I suppose. If i change it to 'multipart/form-data' the response becomes 500 and if it is 'application/json' i always get 415 unsupported mediaType. This is my code using dio package, any advice would be helpful guys, thank u on advance.Postman request works fine

Future createLeave() async {
        var leave = Conge(
          dateDemand: DateTime.now(),
          dateEnd: DateTime.now().add(Duration(days: 3)),
          dateStart: DateTime.now().add(Duration(days: 1)),
          type: "CSS",
          endDateDaySlot: "X",
          startDateDaySlot: "X",
        );
        Map<String, String> heads = {
          "X-Auth-Token": UserPreferences().token,
          "Content-type": 'application/json',
          "accept": "application/json"
        };
        FormData formData = FormData.fromMap({"leave": leave.toJson()});
        var dio = Dio();
        try {
          Response response = await dio.post(API + '/leave/add',
              data: formData,
              options:
                  Options(headers: heads, contentType: Headers.jsonContentType));
        } on Exception catch (e) {
          print(e);
        }
      }

I have also tried to use MultiPartRequest but i always get 400 as a response, the request sent by the client was syntactically incorrect here is my code could anyone help me with this please

Future create(Conge leave) async {
String url = API + "/leave/add";
var uri = Uri.parse(url);
var request = new http.MultipartRequest("POST", uri);
Map<String, String> heads = {
  "X-Auth-Token": UserPreferences().token,
  "Content-type": 'application/json',
};
request.headers.addAll(heads);
request.fields['leave'] = json.encode(leave.toJson());
var response = await request.send();
print(response.statusCode);
response.stream.transform(utf8.decoder).listen((value) {
  print(value);
});

}

1

There are 1 answers

0
MR Skan On

Please try to disable the firewall of windows, if it works then make an exception for it in the firewall.