удалить дубликаты из списка в дартс - PullRequest
0 голосов
/ 14 марта 2020

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

enter image description here

вот код для получения результатов

 void _getFieldsData() {
getUserDetails().then((data) {
  final items = jsonDecode(data).cast<Map<String, dynamic>>();
  var fieldListData = items.map<User>((json) {
    return User.fromJson(json);
  }).toSet().toList();
  ///set list for class
  _selectedField = fieldListData[0].series;
  _selectedField = fieldListData[0].classs;
  setState(() {
       for (Map user in items) {
         _userDetails.add(User.fromJson(user));
        print(_userDetails.length);

         //if (_userDetails.classs != userDetail.classs.contains(_selectedText))
      }
     });
  // update widget
  setState(() {
    _fieldList = fieldListData.toSet().toList();
    //print(resultseries);
   // print(uniqueCount);
    print(_fieldList);
  });
});

здесь это выпадающий список

                new  DropdownButton<String>(
                    hint: Text("Series"),
                   // value: null,

                    items: _fieldList.map((value){
                      return DropdownMenuItem<String>(
                        value: value.series,
                        child: Container(
                          width: 100,
                        child: new Text(value.series),

1 Ответ

0 голосов
/ 14 марта 2020

не совсем ясно, как выглядит ваш класс User, но я предполагаю, что у вас есть несколько полей, у которых не все имеют одинаковые значения, например, каждое с уникальным идентификатором, поэтому следующая строка не работает в вашем случае :

setState(() {
  _fieldList = fieldListData.toSet().toList();
});

Я бы предложил использовать List.fold, List.any и изменить строку выше, чтобы проверять только поле .series, как показано ниже:

List initialResultsList = [];

setState(() {
  // use fold (similar to .reduce()) to iterate through fieldListData and return the updated filtered 'results'
  // list with each iteration:
  _fieldList = fieldListData.fold(initialResultsList, (results, currentItem) {
    // check to see if currentItem.series already exists in any item of filtered results:
    if (!results.any((item) => item.series == currentItem.series)) {
      // if not, add it to results:
      results.add(currentItem);
    }
    // return results for next iteration
    return results;
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...