0
votes

I have JSON data and I am loading into List<List<Map<String, dynamic>>> using await jsonDecode

For example, I have a;

and I need to filter the son to get name value: Abdul Fatah

Also if I have a name_group = alpukat.

How can I filter List JSON data to get a value in Flutter?

[       
             {
                "receive_brutto" : 10,
                "receive_netto" : 20,
                "receive_reject" : 30,
                "data" : [
                    {
                        "id_trx_procurement" : 1,
                        "item_group_id" : 3135,
                        "date_proc" : "2020-11-29",
                        "trx_procurement2" : {
                            "user_proc" : {
                                "user" : {
                                    "name" : "Abdul Fatah"
                                }
                            }
                        },
                        "item_group_proc" : {
                            "name_group" : "Alpukat",
                            "uom_item_group_name" : "Kg"
                        },
                        "uom_proc" : {
                            "name" : "Kg"
                        }
                    },
                    {
                        "id_trx_procurement" : 2,
                        "item_group_id" : 3135,
                        "date_proc" : "2020-11-29",
                        "trx_procurement2" : {
                            "user_proc" : {
                                "user" : {
                                    "name" : "Abdul Fatah"
                                }
                            }
                        },
                        "item_group_proc" : {
                            "name_group" : "Apel",
                            "uom_item_group_name" : "Kg"
                        },
                        "uom_proc" : {
                            "name" : "Kg"
                        }
                    }
                ]
            },
            {
                "receive_brutto" : 10,
                "receive_netto" : 20,
                "receive_reject" : 30,
                "data" : [
                    {
                        "id_trx_procurement" : 1,
                        "item_group_id" : 3135,
                        "date_proc" : "2020-11-29",
                        "trx_procurement2" : {
                            "user_proc" : {
                                "user" : {
                                    "name" : "Abdul Fatah"
                                }
                            }
                        },
                        "item_group_proc" : {
                            "name_group" : "Alpukat",
                            "uom_item_group_name" : "Kg"
                        },
                        "uom_proc" : {
                            "name" : "Kg"
                        }
                    },
                    {
                        "id_trx_procurement" : 2,
                        "item_group_id" : 3135,
                        "date_proc" : "2020-11-29",
                        "trx_procurement2" : {
                            "user_proc" : {
                                "user" : {
                                    "name" : "Abdul Fatah"
                                }
                            }
                        },
                        "item_group_proc" : {
                            "name_group" : "Apel",
                            "uom_item_group_name" : "Kg"
                        },
                        "uom_proc" : {
                            "name" : "Kg"
                        }
                    }
                ]
            }
]

I want result filter list data and data list add to list,

This my code, but not working.

List<E> listItemReceive;
listItemReceive.forEach((element1) {
  element1.data.forEach((element2) {
    if (element2.itemGroupProc.namegroup
            .toLowerCase()
            .contains(text.toLowerCase()) ||
        element2.trxProcurement2.userProc.user.name
            .toLowerCase()
            .contains(text.toLowerCase())) {
      tmp2.add(element2);
    }
    element1.add(tmp2);
  });
  tmplistItemReceive.add(element1);
});

How can I solve it?

2
Thanks for edited my question. 🙏 - Iqbal Abdurrazaq

2 Answers

0
votes
  • From what your code is doing. For each element1 you will filter out some desiser items from element1.data. into a List ( i guess) called tmp2.

  • Then, add to element1: element1.add(tmp2);

  • After adding to element1. You don't reset and allocate a new tmp2 for the next iteration. So tmp2 will keep growing

0
votes

You can traverse through the List using the keys. Please see the following code that filters out all the names and name_group.

    void main() {
  List<Map<String, dynamic>> one = [
    {
      "receive_brutto": 10,
      "receive_netto": 20,
      "receive_reject": 30,
      "data": [
        {
          "id_trx_procurement": 1,
          "item_group_id": 3135,
          "date_proc": "2020-11-29",
          "trx_procurement2": {
            "user_proc": {
              "user": {"name": "Abdul Fatah"}
            }
          },
          "item_group_proc": {
            "name_group": "Alpukat",
            "uom_item_group_name": "Kg"
          },
          "uom_proc": {"name": "Kg"}
        },
        {
          "id_trx_procurement": 2,
          "item_group_id": 3135,
          "date_proc": "2020-11-29",
          "trx_procurement2": {
            "user_proc": {
              "user": {"name": "Abdul Fatah"}
            }
          },
          "item_group_proc": {
            "name_group": "Apel",
            "uom_item_group_name": "Kg"
          },
          "uom_proc": {"name": "Kg"}
        }
      ]
    },
    {
      "receive_brutto": 10,
      "receive_netto": 20,
      "receive_reject": 30,
      "data": [
        {
          "id_trx_procurement": 1,
          "item_group_id": 3135,
          "date_proc": "2020-11-29",
          "trx_procurement2": {
            "user_proc": {
              "user": {"name": "Abdul Fatah"}
            }
          },
          "item_group_proc": {
            "name_group": "Alpukat",
            "uom_item_group_name": "Kg"
          },
          "uom_proc": {"name": "Kg"}
        },
        {
          "id_trx_procurement": 2,
          "item_group_id": 3135,
          "date_proc": "2020-11-29",
          "trx_procurement2": {
            "user_proc": {
              "user": {"name": "Abdul Fatah"}
            }
          },
          "item_group_proc": {
            "name_group": "Apel",
            "uom_item_group_name": "Kg"
          },
          "uom_proc": {"name": "Kg"}
        }
      ]
    }
  ];

  List<String> names = [];
  one.forEach((item)=>
    (item['data'] as List).forEach((item2)=>
      names.add(item2['trx_procurement2']['user_proc']['user']['name'])
    )
  );
  print(names);

 
 List<String> nameGroup = [];
  one.forEach((item)=>
    (item['data'] as List).forEach((item2)=>
      nameGroup.add(item2['item_group_proc']['name_group'])
    )
  );
  print(nameGroup);
  
  
}