在列表中没有项目的情况下处理onDismissed

时间:2019-04-13 08:00:29

标签: dart flutter dismissible

我正在使用Dismissible小部件在应用程序中进行一些类似火种的轻扫。这意味着我实质上是在刷掉我的整个小部件。这意味着我没有可以关闭项目的ListView构建器。我该如何处理onDismissed而不将我的所有项目事先放入列表中?

我已经尝试过使用伪造的列表,在其中给它提供一个ID,然后将其删除。但这似乎无能为力,可以在下面看到此代码。

  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 个答案:

答案 0 :(得分:1)

如果您想要像卡片刷卡UI这样的小工具,可以使用这些项目从这些项目中准备一些代码:

  1. Card swipe v1
  2. Card swipe v2

已编辑: 您的要求是

  1. 您要刷卡。
  2. 您想要由Dismissible提供的动画。
  3. 您不希望使用List,而想要一个类似tinder的UI。

解决方案使用这样的堆栈:

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),
      ),
    ),
  ),
],
)

(请注意,上面的代码很脏,只是为了让您有一个想法将堆栈用于所需的UI) enter image description here