Сортировка массива не соответствует параметрам объектов массива - Flutter / Dart - PullRequest
2 голосов
/ 11 мая 2019

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

Вот код, который я пробовал, позже я также пытался сортировать вручную, но результат был таким же.И когда я комментирую только часть array.sort, код работает без проблем.

Заранее спасибо!

class _ListViewBuilderState extends State<ListViewBuilder> {
  List<Emoticon> _displayList = emoticonsList;

  Widget _buildListView() {
      _displayList.sort((b, a) => a.count.compareTo(b.count));

    return ListView.builder(
      shrinkWrap: true,
      padding: const EdgeInsets.all(16.0),
      itemCount: _displayList.length,
      itemBuilder: (context, i) {
        return _buildRow(emoticonsList[_displayList[i].id]);
      },
    );
  }

  Widget _buildRow(Emoticon emo) {
    printEmoji(emo.id);

    return ListTile(
        title: Text(emo.emoji),
        trailing: Icon(
          emo.favorite ? Icons.favorite : Icons.favorite_border,
          color: emo.favorite ? Colors.red : null,
        ),
        onTap: () {
          emo.count++;
          printEmoji(emo.id);
        },
        onLongPress: () {
          setState(() {
            emo.favorite = !emo.favorite;
            printEmoji(emo.id);
          });
        });
  }
class Emoticon {
  final String emoji;
  final List<String> tags;
  int count = 0;
  final int id;
  bool favorite = false;

  Emoticon(this.id, this.emoji, this.tags);
}
final emoticonsList = [
  new Emoticon(0, "¯\_(ツ)_/¯", ["Other"]),
  new Emoticon(1, "( ͡° ͜ʖ ͡°)", ["Happy"]),
  new Emoticon(2, "ಠ_ಠ", ["Sad"]),
  new Emoticon(3, "(╯°□°)╯︵ ┻━┻", ["Sad", "Other"]),
  new Emoticon(4, "┬──┬◡ノ(° -°ノ)", ["Other"]),
  new Emoticon(5, "ᕕ( ᐛ )ᕗ", ["Happy"]),
];

void printEmoji(int i){
  print(
    emoticonsList[i].id.toString() + " " + 
    emoticonsList[i].favorite.toString() + " " + 
    emoticonsList[i].count.toString() + " " + 
    emoticonsList[i].emoji.toString()
  );
}

Но когда я запускаю код,

01 - Подсчет значений для каждой плитки неуместно друг с другом

02 - при нажатии на лист списка печатается другой смайлик, чем я нажал.И увеличение количества также не произойдет.

Это мой первый вопрос переполнения стека.Так что я не уверен, что этой информации достаточно.Пожалуйста, спросите, нужна ли дополнительная информация.

Еще раз спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...