【发布时间】:2020-07-14 16:05:43
【问题描述】:
- 说我创建了一个 ListView.Builder。
- 我有一个“添加作业”按钮可以将作业添加到列表中。
- 现在让我在列表中添加了 2 个工作。我想通过 API 提交这个数组数据。
- 我的问题是如何对地图数组进行编码并正确传递它们?
- This image describes what I'm trying to tell.
- 非常感谢您。
这是请求正文:
{"batch":
[
{"sector_id":1,"company":"Company"},
{"sector_id":2,"company":"Organization"},
......if has more
]
}
我有这个模型:
class Occupations {
List<Batch> batch;
Occupations({this.batch});
Occupations.fromJson(Map<String, dynamic> json) {
if (json['batch'] != null) {
batch = new List<Batch>();
json['batch'].forEach((v) {
batch.add(new Batch.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.batch != null) {
data['batch'] = this.batch.map((v) => v.toJson()).toList();
}
return data;
}
}
class Batch {
int sectorId;
String company;
Batch({this.sectorId, this.company});
Batch.fromJson(Map<String, dynamic> json) {
sectorId = json['sector_id'];
company = json['company'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['sector_id'] = this.sectorId;
data['company'] = this.company;
return data;
}
}
我的POST方法:
createOccupations(int id, String company)async{
var _sectorsUrl = '$_hostUrl/occupations';
String _body ='{"batch":[{"sector_id":id,"company":"$company"}]}';
final _response = await post(
_sectorsUrl,
body: _body,
headers: {
'Content-type':'application/json',
'Accept':'application/json',
}
);
if (_response.statusCode==200) {
return Occupations.fromJson(json.decode(_response.body));
} else {
print(_response.statusCode);
print(_data);
}
}
这是我的UI:
Column(children: <Widget>[
Expanded(
child: ListView.builder(
itemCount: jobCount,
itemBuilder: (context, index) {
_sectorIdController.add(new TextEditingController());
_companyNameController.add(new TextEditingController());
return Container(
margin: margin10,
padding: padding10,
decoration: BoxDecoration(
border: Border.all(color:black)
),
child: Column(
children: <Widget>[
TextField(
decoration: InputDecoration(labelText: 'Sector Id'),
controller: _sectorIdController[index],
),
TextField(
decoration:
InputDecoration(labelText: 'Company Name'),
controller: _companyNameController[index]),
],
),
);
})),
RaisedButton(
child: Text('Add Job'),
onPressed: () {
setState(() {
jobCount++;
});
}),
RaisedButton(child: Text('Submit Occupations'), onPressed: () {}),
])
【问题讨论】:
-
查看this answer。它们看起来很相似