Обработка onDisissed без наличия элементов в списке - PullRequest
0 голосов
/ 13 апреля 2019

Я использую виджет Dismissible для выполнения некоторых смахиваний на трубу в своем приложении. Это означает, что я, по сути, смахиваю весь свой виджет. Это означает, что у меня нет конструктора ListView с элементами, которые были отклонены. Как мне обработать onDismissed, не помещая все мои элементы в список заранее?

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

  static var uuid = new Uuid();
  final dismissRemover = List<String>.generate(50, (i) => "item: '$uuid'");

 body: Dismissible(
        key: new Key(dismissRemover[0]),
        background: Container(
          color: Colors.red,
          child: Icon(
            Icons.thumb_down,
            color: Colors.white,
            size: 150.0,
          ),
        ),
        secondaryBackground: Container(
          color: Colors.green,
          child: Icon(
            Icons.thumb_up,
            color: Colors.white,
            size: 150.0,
          ),
        ),
        onDismissed: (direction) {
          if (direction == DismissDirection.endToStart) {
            setState(() {
              _newPolitician.performPolitician(true, context, item[_politicianNo]['id'], _collectionName);
              dismissRemover.removeAt(0);
            });
          } else {
            setState(() {
              _newPolitician.performPolitician(false, context, item[_politicianNo]['id'], _collectionName);
              dismissRemover.removeAt(0);
            });
          }
        },

Ты хоть представляешь, как обойти эту проблему?

1 Ответ

1 голос
/ 13 апреля 2019

Если вам нужен пользовательский интерфейс, подобный карточному свайперу, вы можете получить готовый код из этих проектов:

  1. Размах карты v1
  2. Размах карты v2

Отредактировано: Ваше требование заключается в том, что

  1. Вы хотите, чтобы карты были считаны.
  2. Требуется анимация, предоставляемая Dismissible.
  3. Вы не хотите List и хотите похожий на трут пользовательский интерфейс.

Стек использования решения, подобный этому:

Stack(
  children: <Widget>[
    Dismissible(
      key: Key('Card'),
      child: Card(
        child: Padding(
          padding: const EdgeInsets.all(80.0), 
          child: Icon(Icons.accessibility),
        ),
      ),
    ),
    Dismissible(
      key: Key('Card 1'),
      child: Card(
        child: Padding(
        padding: const EdgeInsets.all(80.0),
        child: Icon(Icons.accessibility),
      ),
    ),
  ),
],
)

(обратите внимание, что приведенный выше код грязный, и он просто дает вам представление об использовании стека для требуемого пользовательского интерфейса) enter image description here

...