user16454221
user16454221

Reputation:

How to pass a list of json to body of http Post request in Flutter?

I have objects that will filled by a user in a form. I parse these objects to json and add that json in a list to pass in body of request. But i cant do this.

submitQuestions() async {
var headers = {
  'Content-Type': 'application/json',
  'x-auth-token': '123edrfe33ewed'
};
var request = http.Request('POST', Uri.parse('url'));
request.body = json.encode({
  "school_id": "123",
  "teacher_id": "123",
  "observer_id": "123",
  "subject_id": "123",
  "subject_name": "abc",
  "class_id": "123",
  "batch_id": "123",
  "topic": "topic",
  "academic_year": "2019-2020",
  "remarks_data": [
    {
      "_id": "123",
      "heading": "heading",
      "Indicators": [
        {
          "name": "abc",
          "_id": "123",
          "remark": "abc",
          "point": 4
        },
        {
          "name": "abc",
          "_id": "123",
          "remark": "abc",
          "point": 1
        }
      ]
    },
    {
      "_id": "123",
      "heading": "abc",
      "Indicators": [
        {
          "name": "abc",
          "_id": "123",
          "remark": "abc",
          "point": 3
        }
      ]
    }
  ]
});
request.headers.addAll(headers);

http.StreamedResponse response = await request.send();

if (response.statusCode == 200) {
  print(await response.stream.bytesToString());
}
else {
  print(response.reasonPhrase);
}
}

This json will change dynamically when the number of questions increase. I cannot place this json file in the body like this. How to Do this one.

Upvotes: 1

Views: 2075

Answers (2)

Moataz Fouuad
Moataz Fouuad

Reputation: 113

Wrap each list of json with jsonEncode like:

"remarks_data": jsonEncode(..)

and do not forget to import.

import 'dart:convert';

Upvotes: 1

jbyen
jbyen

Reputation: 1088

The request body try to use Map data type. You can create a model class to deal with it.

Example

class School {
  String school_id;
  String teacher_id;
  String observer_id;

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();

    data['school_id'] = this.school_id;
    data['teacher_id'] = this.teacher_id;
    data['observer_id'] = this.observer_id;
    ...

    return data;
  }

}
/// Make sure your _school got data
School _school;
request.body = _school.toJson();

Upvotes: 0

Related Questions