Я хочу создать виджет в виде дерева, анализируя вложенный json объект.
{
"styles":{
"4C999CBB":{
"enabled":true,
"name":"Yandex",
"displayName":"Yandex"
},
"8BF87C17":{
"enabled":true,
"name":"Bing",
"displayName":"Bing"
},
"ED2C3511":{
"styles":{
"1469ADD7":{
"styles":{
"36078DAA":{
"enabled":true,
"name":"0",
"displayName":"0",
"color":"#C5C1AA"
},
"74FF2779":{
"enabled":true,
"name":"aaa",
"displayName":"aaa",
"color":"#CDBA96"
},
"109B698":{
"enabled":true,
"name":"PL",
"displayName":"PL",
"color":"#8B8B00"
}
},
"enabled":true,
"name":"geo",
"displayName":"Plan"
},
"527F74F4":{
"enabled":false,
"name":"geo_1000",
"displayName":"geo1000"
}
},
"enabled":false,
"name":"Plan1",
"displayName":"Plan1"
}
},
"enabled":false,
"name":null,
"displayName":"bbb"
}
У меня есть json объект выше. Я хочу разобрать его в виджет дерева. Из-за его вложенности я не знаю, как сохранить родительские значения в качестве параметра.
Мой класс pojo ниже:
List<InnerLayerTreeModel> dynamicList = List();
Future<List<InnerLayerTreeModel>> fetchLayers(
http.Client client, String holder) async {
final response = await rootBundle.loadString("assets/data.json");
return parseLayers(response);
}
List<InnerLayerTreeModel> parseLayers(String responseBody) {
Map map = jsonDecode(responseBody);
parseMap(map);
return dynamicList;
}
parseMap(Map map) {
var data = LayerTreeModel.fromJson(map);
data.styles.forEach((k, v) {
Map map2 = v;
if (v.containsKey("styles")) {
parseMap(map2);
} else {
var innerModel = InnerLayerTreeModel(
enabled: map2['enabled'],
displayName: map2['displayName'],
name: map2['name'],
id: k);
dynamicList.add(innerModel);
}
});
}
Я проанализировал json в списке, но я не знаю, как обеспечить связь между родителем и ребенком. Я вставил только часть моего json объекта. Не указано c сколько у него вложенных слоев.