在 Flutter 中使用条件将数据解析为两个单独的列表

Parse data to two separate lists with condition in Flutter

[
    {
        "name": "ITEM-1",
        "desc": "DESCRIPTION",
        "listNo" :"0"
    },
    {
        "name": "ITEM-2",
        "desc": "DESCRIPTION",
        "listNo" :"0"
    },
    {
        "name": "ITEM-3",
        "desc": "DESCRIPTION",
        "listNo" :"0"
    },
    {
        "name": "ITEM-4",
        "desc": "DESCRIPTION",
        "listNo" :"1"
    },
    {
        "name": "ITEM-5",
        "desc": "DESCRIPTION",
        "listNo" :"1"
    },
    {
        "name": "ITEM-6",
        "desc": "DESCRIPTION",
        "listNo" :"1"
    }
]

如何在futter中实现这个模型?我想显示上面 JSON 中所示的两个列表和数据。 LIST-A 的条件是“listNo”="0",LIST-B 的条件是"listNo"="1"。

有多种方法可以做到这一点,但我认为最容易理解的解决方案是执行以下操作:

import 'dart:convert';

void main() {
  const input = '''
[
    {
        "name": "ITEM-1",
        "desc": "DESCRIPTION",
        "listNo" :"0"
    },
    {
        "name": "ITEM-2",
        "desc": "DESCRIPTION",
        "listNo" :"0"
    },
    {
        "name": "ITEM-3",
        "desc": "DESCRIPTION",
        "listNo" :"0"
    },
    {
        "name": "ITEM-4",
        "desc": "DESCRIPTION",
        "listNo" :"1"
    },
    {
        "name": "ITEM-5",
        "desc": "DESCRIPTION",
        "listNo" :"1"
    },
    {
        "name": "ITEM-6",
        "desc": "DESCRIPTION",
        "listNo" :"1"
    }
]
''';

  final list1 = <Map<String, dynamic>>[];
  final list2 = <Map<String, dynamic>>[];

  for (final map in json.decode(input)) {
    if (map['listNo'] == '0') {
      list1.add(map as Map<String, dynamic>);
    } else {
      list2.add(map as Map<String, dynamic>);
    }
  }

  print(list1);
  // [{name: ITEM-1, desc: DESCRIPTION, listNo: 0}, {name: ITEM-2, desc: DESCRIPTION, listNo: 0}, {name: ITEM-3, desc: DESCRIPTION, listNo: 0}]

  print(list2);
  // [{name: ITEM-4, desc: DESCRIPTION, listNo: 1}, {name: ITEM-5, desc: DESCRIPTION, listNo: 1}, {name: ITEM-6, desc: DESCRIPTION, listNo: 1}]
}

如果您认为这样看起来更清楚,您还可以执行以下操作:

  final parsedJson = json.decode(input) as List<dynamic>;
  final list1 = [
    ...parsedJson
        .cast<Map<String, dynamic>>()
        .where((map) => map['listNo'] == '0')
  ];
  final list2 = [
    ...parsedJson
        .cast<Map<String, dynamic>>()
        .where((map) => map['listNo'] == '1')
  ];