Флаттер вложенный json -Tree Widget - PullRequest
0 голосов
/ 08 января 2020

Я хочу создать виджет в виде дерева, анализируя вложенный 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 сколько у него вложенных слоев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...