Анимация изменения положения элементов ListView во Flutter

У меня есть ListView чья сортировка зависит от состояния его элементов: Item объекты модели имеют bool свойство, isActive, и все Items со значением true сортируются раньше всех со значением false. Нажатие на элемент переключает егоisActiveгосударство. Логика установки состояния не выполняется в самом списке; скорее, это выполняется BLoC, который также знает, как сортировать элементы. В результате весь список получает потокList<Item> которые правильно отсортированы.

В настоящее время результат довольно неприятный - нажатый элемент исчезает со своего места и появляется где-то еще в списке, и я хотел бы сделать его более плавным, например, возможно, анимировать изменение положения - что-то вроде того, что ReorderableListViewделает, но программно. Понятия не имею, как это сделать, начал возиться сAnimatedList но я не уверен, что это правильный компонент для моего варианта использования - он может анимировать удаления и добавления, что на самом деле не то, что я делаю (я мог бы добавить удаление сразу, а затем добавление, но это кажется сложным).

Это код, который у меня есть (упрощенный), он поддерживает удаление анимации:

class ItemListWidget extends StatelessWidget {
  final items = [
    'Item A',
    'Item B',
    'Item C',
    'Item D',
    'Item E',
  ];

  @override
  Widget build(BuildContext context) {
    return AnimatedList(
      initialItemCount: items.length,
      itemBuilder: (context, index, animation) {
        final item = items[index];
        return ListTile(
          title: Text(item),
          onTap: () {
            final state = AnimatedList.of(context);
            state.removeItem(
              index,
              (context, animation) => SizeTransition(
                sizeFactor: animation,
                child: ListTile(title: Text(item)),
              ),
              // duration: const Duration(seconds: 5),
            );
            items.removeAt(index);
          },
        );
      },
    );
  }
}

Он удаляет элемент, теперь мне нужно будет как-то прикрепить добавление элемента снова с другим индексом, когда анимация удаления будет готова. Но это просто не кажется правильным, я не думаю, что смогу анимировать позицию

Другое дело, что меня изрядно смущает API, я не уверен, правильно ли я его использую. Я никогда не используюanimation параметр в itemBuilder потому что я не понимаю, для чего я могу это использовать.

Как я могу реализовать это во Flutter?

0 ответов

Другие вопросы по тегам