Создайте ListView из rest API только для категории без дублирования в Flutter

#flutter #listview #dart #rest

#flutter #listview #dart #rest

Вопрос:

 [
  {
    "category": "Apple",
    "name": "Macbook Air"
  }, {
    "category": "Apple",
    "name": "Macbook Pro"
  }, {
    "category": "Microsoft",
    "name": "Surface"
  }, {
    "category": "Apple",
    "name": "iPad"
  }, {
    "category": "Microsoft",
    "name": "Windows"
  }, {
    "category": "Apple",
    "name": "Siri"
  }, {
    "category": "Microsoft",
    "name": "Office"
  }
]
 

Мне нужно добавить общую категорию в ListView из данных Rest API, приведенных в примере выше.

Apple и Microsoft — это категория, которая является общей для шести данных.

Это делается автоматически.

Не могли бы вы дать решение для этого?

Комментарии:

1. приведите пример ожидаемого списка, который вы ожидаете, тогда я мог бы вам помочь.

2. Добро пожаловать в stack overflow . Пожалуйста, попробуйте получить помощь с английским языком, начиная с six data (считая 7).

Ответ №1:

 import 'dart:convert';

import 'dart:math';

const source = '''
{
    "data": [
        { "category": "Apple", "name": "Macbook Air" },
        { "category": "Apple", "name": "Macbook Pro" },
        { "category": "Microsoft", "name": "Surface" },
        { "category": "Apple", "name": "iPad" },
        { "category": "Microsoft", "name": "Windows" },
        { "category": "Apple", "name": "Siri" },
        { "category": "Microsoft", "name": "Office" }
    ]
}
''';

main(List<String> args) {
  final List data = jsonDecode(source)['data'];
  
  var mode = Map<String, int>();

  data.map<String>((e) => (e as Map)['category']).forEach((k) => mode[k] = (mode[k] ?? 0)   1);

  var maxVal = mode.values.toList().reduce(max);
  var category = List<String>();

  mode.forEach((k, v) => v==maxVal ? category.add(k) : null);

  print(category.toString());
}
 

Комментарии:

1. Другим способом мы можем использовать уникальную функцию dart для реализации вышеуказанной потребности. Но вышеупомянутый общий тип также полезен. Спасибо.

Ответ №2:

   List getCategory(List data) {
    List list = [];
    for (var a in data) 
      if (!list.contains(a["category"]))
       list.add(a["category"]);
    return list;
  }
 

Комментарии:

1.Другим способом мы можем использовать уникальную функцию dart для реализации вышеуказанной потребности. Но вышеупомянутый общий тип также полезен. Спасибо.