Я довольно новичок, чтобы трепетать, и я строю список, который сортирует себя в соответствии с использованием его элементов.Но проблема в том, что метод сортировки не соответствует некоторым параметрам объектов массива.
Вот код, который я пробовал, позже я также пытался сортировать вручную, но результат был таким же.И когда я комментирую только часть 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 - при нажатии на лист списка печатается другой смайлик, чем я нажал.И увеличение количества также не произойдет.
Это мой первый вопрос переполнения стека.Так что я не уверен, что этой информации достаточно.Пожалуйста, спросите, нужна ли дополнительная информация.
Еще раз спасибо за помощь!