В настоящее время я работаю над мобильным приложением Flutter, которое должно работать на Android и IOS. У меня проблема с ListView и его обновлением.
Я знаю, что со многими вещами я поступаю неправильно, но я учусь и хотел бы научиться правильно. Поэтому, если у вас есть какие-либо комментарии, советы по поводу кода, который им дается :)
По сути, вот что он делает: Основной игрок сам выберет, кто будет играть с ним в игре через AlertDialog, внутри которого есть CheckboxList. и каждый раз, когда он выбирает игрока, он обновляет список с именем choosenPlayers, в котором есть все выбранные объекты игрока.
Затем я хочу отобразить список всех выбранных игроков (переупорядочиваемый список изменить порядок игроков) и обновлять его каждый раз, когда обновляется список choosenPlayers.
Мне удалось отобразить этих игроков, но я должен перезагрузить страницу, зайдя в меню ящика и щелкнув ссылку на страницу, чтобы увидеть добавленные игроки.
Я использую виджет с отслеживанием состояния для своего переупорядочиваемого списка игроков и передаю родителю список игроков (это не самый лучший способ сделать это, я знаю):
import 'package:flutter/material.dart';
import 'package:mollky/models/player.dart';
class ChoosenPlayers extends StatefulWidget {
_ChoosenPlayersState _choosenPlayersState = _ChoosenPlayersState();
List<Player> choosenPlayers = [];
ChoosenPlayers({Key key, this.choosenPlayers}) : super(key: key);
@override
_ChoosenPlayersState createState() => _choosenPlayersState;
}
class _ChoosenPlayersState extends State<ChoosenPlayers> {
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return ReorderableListView(
onReorder: onReorder,
children: getListItems(),
);
}
List<ListTile> getListItems() => widget.choosenPlayers
.asMap()
.map((i, item) => MapEntry(i, buildTenableListTile(item, i)))
.values
.toList();
ListTile buildTenableListTile(Player item, int index) {
return ListTile(
key: ValueKey(item.id),
title: Text(item.nickname + " " + item.name),
leading: Text("#${index + 1}"),
);
}
void onReorder(int oldIndex, int newIndex) {
if (newIndex > oldIndex) {
newIndex -= 1;
}
setState(() {
Player reOrderedPlayer = widget.choosenPlayers[oldIndex];
widget.choosenPlayers.removeAt(oldIndex);
widget.choosenPlayers.insert(newIndex, reOrderedPlayer);
});
}
}
Здесь это код главной страницы, где отображается переупорядочиваемый список и отображается AlertDialog. Извините, я не смог отформатировать с помощью Dart, не запускайте код, очевидно Я хочу.
Это настоящий кошмар xD. Извините за французские слова, кстати, я могу перевести, если нужно, но они не важны, простой текст.
Вот два скриншота списка и диалоговое окно предупреждения:


Заранее спасибо:)