RangeError последнего элемента в AnimatedList - PullRequest
2 голосов
/ 22 апреля 2020

Я хотел создать простое приложение Todo с реализацией Material Design и AnimatedList. У меня не было проблем с вставкой элемента в AnimatedList, удаление элементов также было очень простым, за исключением случаев, когда я хочу удалить последний элемент из AnimatedList.

У меня есть отдельный класс ToDo, который содержит заголовок, описание, идентификатор и полный логический.

Исключение:

RangeError (index): Invalid value: Valid value range is empty: 0

Моя функция удаления элемента:

void _removeSingleItems(int index) {
int removeIndex = index;
AnimatedListRemovedItemBuilder builder = (context, animation) {
  return item(animation, removeIndex);
};
_listKey.currentState.removeItem(removeIndex, builder);
tasksTodo.removeAt(removeIndex);
}

Виджет AnimatedList;

AnimatedList(
                  key: _listKey,
                  initialItemCount: tasksTodo.length,
                  itemBuilder: (context, index, animation) {
                    return item(animation, index);
                  })

У доктора флаттера все хорошо, и я тоже попробовал флаттер, но я не помог. Версия флаттера: Флаттер 1.12.13 + исправление.7

Полный код на Github: https://gist.github.com/Maciejfiedler/eb77de37a94458f0f4375dd56c053591

1 Ответ

0 голосов
/ 23 апреля 2020

Я нашел решение проблемы. Проблема возникла, потому что функция _removeSingleItem была вызвана 2 раза. первый раз в моем animatedList и второй раз в _removeSingleItem функции. Просто добавьте bool к item Widget, который контролирует onPressed Callback. Если значение bool равно true, вызывается функция _removeSingleItem, а если false, то вызываться не будет. Установите для bool значение true в AnimatedList и значение false в функции _removeSingleItem.

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