Флаттер. Сгруппированный список по полю, которое является списком - PullRequest
0 голосов
/ 07 августа 2020

У меня есть список предметов с группами полей. Группы также есть в списке. Я хочу отобразить этот список этих элементов, сгруппированных по группам. Товар может быть частью двух или более групп.

List<Product> _items = [
    Product(
        id: '1',
        title: 'Apple and more more thing', description: 'Some data to describe',
        group: ['Picnic', 'New'], price: 25, bonus: 1, quantity: 1.5, measure: 'кг', measureStep: 1.5,
        imageUrl: 'assets/fruits/orange.jpg'),
    Product(
        id: '2',
        title: 'Apple and more more thing', description: 'Some data to describe',
        price: 24.50, bonus: 1, group: ['Picnic', 'New'], quantity: 1.5, measure: 'кг', measureStep: 1.5,
        imageUrl: 'assets/fruits/orange.jpg'),
    Product(
        id: '3',
        title: 'Apple and more more thing', description: 'Some data to describe',
        price: 5.00, bonus: 1, group: ['New'], quantity: 1, measure: 'шт', measureStep: 1,
        imageUrl: 'assets/fruits/orange.jpg'),
    Product(
        id: '4',
        title: 'Apple and more more thing', description: 'Some data to describe',
        price: 24.00, bonus: 1, group: ['New'], quantity: 1.250, measure: 'кг', measureStep: 1.250,
        imageUrl: 'assets/fruits/orange.jpg'),
    Product(
        id: '5',
        title: 'Apple and more more thing', description: 'Some data to describe',
        price: 15.75, bonus: 1, group: ['Picnic'], quantity: 1, measure: 'шт', measureStep: 1,
        imageUrl: 'assets/fruits/orange.jpg'),
    Product(
        id: '6',
        title: 'Apple and more more thing', description: 'Some data to describe',
        price: 9.50, bonus: 1, group: ['For children', 'New'], quantity: 0.5, measure: 'лт', measureStep: 0.5,
        imageUrl: 'assets/fruits/orange.jpg'),
    Product(
        id: '7',
        title: 'Apple and more more thing', description: 'Some data to describe',
        price: 40.00, bonus: 1, group: ['For children'], quantity: 1, measure: 'шт', measureStep: 1,
        imageUrl: 'assets/fruits/orange.jpg'),
    Product(
        id: '8',
        title: 'Apple and more more thing', description: 'Some data to describe',
        price: 32.50, bonus: 1, group: ['For children', 'New'], quantity: 1.75, measure: 'кг', measureStep: 1.75,
        imageUrl: 'assets/fruits/orange.jpg')

Я новичок в flutter, поэтому можете дать некоторое представление, как это возможно, иначе код будет идеальным.

Я сделал сгруппированный список по одной строке, но теперь у меня есть список.

1 Ответ

0 голосов
/ 07 августа 2020

Это то, что вы хотите?

  var list = [
    Product(id: '1', groups: ['Picnic', 'New']),
    Product(id: '2', groups: ['For children', 'New']),
    Product(id: '3', groups: ['New']),
    Product(id: '4', groups: ['For children']),
  ];

  var groupedLists = {};

  list.forEach((product) {
    product.groups.forEach((group) {
      if (groupedLists['$group'] == null) {
        groupedLists['$group'] = <Product>[];
      }

      (groupedLists['$group'] as List<Product>).add(product);
    });
  });

  print(groupedLists);

результат:

{
Picnic: [Instance of 'Product'], 
New: [Instance of 'Product', Instance of 'Product', Instance of 'Product'], 
For children: [Instance of 'Product', Instance of 'Product']
}

Теперь вы можете легко отобразить их в LisView

...