Reputation: 21
I want to send an array for post API in a flutter.
{
"data":[{"question_id":1,"option_id":2},{"question_id":2,"option_id":6}]
}
I want to send the data like the above.
This is my code:
class Sent {
List<Data> data;
Sent({this.data});
Sent.fromJson(Map<String, dynamic> json) {
if (json['data'] != null) {
data = new List<Data>();
json['data'].forEach((v) {
data.add(new Data.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.data != null) {
data['data'] = this.data.map((v) => v.toJson()).toList();
}
return data;
}
}
class Data {
int questionId;
int optionId;
Data({this.questionId, this.optionId});
Data.fromJson(Map<String, dynamic> json) {
questionId = json['question_id'];
optionId = json['option_id'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['question_id'] = this.questionId;
data['option_id'] = this.optionId;
return data;
}
}
Here is how I sent it to POST API
Future<Sent> saveAnswer() async {
var data = {"question_id": sent[0][0], "option_id": sent[0][1]};
var url = await Network().link("/exercise/1/saveAnswer");
SharedPreferences localStorage = await SharedPreferences.getInstance();
final token = jsonDecode(localStorage.getString('token'));
http.Response response =
await http.post(Uri.parse(url), body: jsonEncode(data), headers: {
'Content-type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer $token'
});
if (response.statusCode == 200) {
print(response.body);
} else {
print(response.body);
}
}
While this is how I get the question_id and option_id from CustomCheckBoxGroup.
List<dynamic> sent;
CustomCheckBoxGroup(
buttonValuesList: [
[
snapshot.data.result[index].id,
snapshot.data.result[index]
.options[0].id
],
[
snapshot.data.result[index].id,
snapshot.data.result[index]
.options[1].id
],
[
snapshot.data.result[index].id,
snapshot.data.result[index]
.options[2].id
],
[
snapshot.data.result[index].id,
snapshot.data.result[index]
.options[3].id
],
],
checkBoxButtonValues: (values) {
sent = values;
print(values);
print(sent[0][0]);
print(sent[0][1]);
},
)
Please help me. How to sent an array like I want to post request API. what is wrong with my code.
Upvotes: 1
Views: 7393
Reputation: 81
I suggest using json.encode
List<dynamic> ListData =
[{"question_id":1,"option_id":2},
{"question_id":2,"option_id":6}];
var json = {
'listKey': json.encode(ListData)
}
Upvotes: 1
Reputation: 676
Simplest way is to encode the list and add it to json. For example:
List<dynamic> ListData = [{"question_id":1,"option_id":2},{"question_id":2,"option_id":6}];
var json = {
'listKey': json.encode(ListData)
}
Upvotes: 0