【发布时间】:2020-04-05 13:42:48
【问题描述】:
我这里有一个 JSON 对象:
{
"error": "0",
"message": "Succesfully fetched",
"data": [
{
"status": true,
"_id": "5df0b94841f0331baf1357bb",
"name": "test group",
"description": "test description",
"created_date": "2019-12-11T09:39:20.151Z",
"__v": 0
},
{
"status": true,
"_id": "5df0df507091683d2f1ad0cf",
"name": "new group",
"created_date": "2019-12-11T12:21:36.283Z",
"__v": 0
}
]
}
我想将数据下的名称参数提取到DropDownMenuList。我这里有一个数据模型:
class dataArray {
// final dynamic status;
final dynamic id;
final dynamic groupName;
// final dynamic description;
// final dynamic created_date;
// final dynamic v;
dataArray(this.groupName, this.id);
dataArray.fromJson(Map jsonMap)
: groupName = jsonMap['name'],
id = jsonMap['_id'];
Map toMapData(){
var mapGroup = new Map<String, dynamic>();
mapGroup["name"] = groupName;
mapGroup['_id'] = id;
return mapGroup;
}
}
获取函数:
Future<List<dataArray>> gettaskData() async {
List<dataArray> list;
String link = ""; //Cannot provide this due to confidentiality
var res = await http
.get(Uri.encodeFull(link), headers: {"Accept": "application/json"});
print(res.body);
if (res.statusCode == 200) {
var data = json.decode(res.body);
var rest = data["data"] as List;
var error = data['error'];
print("this is error = $error");
print(rest);
list = rest.map<dataArray>((json) => dataArray.fromJson(json)).toList();
}
print("List Size: ${list.length}");
return list;
}
此方法成功地将项目提取到 ListView.builder 小部件中,但我对如何将其提取到 List<DropdownMenuItem<T>> items 有点迷茫。
我已经尝试过这些解决方案:
第一个链接似乎是获取列表而不是地图,第二个链接显示的是地图,而在我的 JSON 列表中,我必须显示地图列表中的值。
编辑:根据接受的答案,我还修改了 initJson 方法到这个 -
Future initJson() async {
_list = await loadJsonFromAsset();
//print("Printing _List = ${_list[0].groupName}");
// if (_list.length > 0) {
setState(() {
for(int i =0; i<=_list.length - 1; i++) {
_selectedMenuItem = _list[i];
}
});
// }
}
这显示了 api 中存在的每个对象的名称参数。
【问题讨论】:
-
您已提供必要的详细信息,以便我们轻松理解您的问题。请参阅下面的答案。