Пакет flutter_reorderable_list 0.1.5. Элементы не покидают состояние заполнителя, и переупорядочивание ведет себя странно

       class HomePage extends StatefulWidget {
  const HomePage({
    Key key,
  }) : super(key: key);

  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  List<String> _items;

  _HomePageState() {
    _items = [
      "A",
      "B",
      "C",
      "D",
      "E",
    ];
  }

  Widget _buildItem(int index) {
    Widget content = Container(
      margin: const EdgeInsets.symmetric(vertical: 5),
      padding: const EdgeInsets.all(20),
      alignment: Alignment.centerLeft,
      color: Colors.blue,
      child: Text(
        "${_items[index]}",
      ),
    );

    return ReorderableItem(
      key: ValueKey(index),
      childBuilder: (context, state) {
        content = Opacity(
          opacity: state == ReorderableItemState.placeholder ? 0.1 : 1.0,
          child: DelayedReorderableListener(
            delay: Duration(milliseconds: 500),
            child: content,
          ),
        );
        return content;
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return ReorderableList(
      onReorder: (draggedItem, newPosition) {
        var oldIndex = (draggedItem as ValueKey<int>).value;
        var newIndex = (newPosition as ValueKey<int>).value;
        final item = _items[oldIndex];

        setState(() {
          _items.removeAt(oldIndex);
          _items.insert(newIndex, item);
          print("Reoredering [$oldIndex] -> [$newIndex]");
        });
        return true;
      },
      child: ListView.builder(
        itemBuilder: (context, index) => _buildItem(index),
        itemCount: _items.length,
      ),
    );
  }
}

Я пробовал изучить этот пакет на его примере. Я ожидал нормального поведения переупорядочиваемого списка, но результат оказался неверным. Приведенный выше код - это просто упрощенная версия более сложного дерева виджетов, которое иллюстрирует ту же проблему. И да, я пытался решить это за пару часов, прежде чем задавать этот вопрос.

  • Результат (не обращайте внимания на кнопки ниже, они не из этого кода):

0 ответов

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