使用onTap时如何从列表和屏幕中删除项目?

时间:2019-06-06 12:44:53

标签: flutter dart

使用“ onTap”时,我试图从列表和屏幕中删除该项目。目前,它从列表中删除了该项目,但我无法从屏幕上将其删除。我该如何实现?

enter image description here

这是我的代码:

          SliverList(
             delegate: SliverChildBuilderDelegate(
             (context, i) => ListTile(
                title: Slidable(
                  actionPane: SlidableDrawerActionPane(),
                  actionExtentRatio: 0.25,
                  child: new Text(
                    items[i],
                    style: TextStyle(fontSize: 30),
                  ),
                  secondaryActions: <Widget>[
                    IconSlideAction(
                      caption: 'Remove',
                      color: Colors.red,
                      icon: Icons.delete,
                      onTap: () {
                        setState(() {
                          items.removeAt(i);
                        });
                      },
                    ),
                  ],
                ),
              ),
          childCount: items.length,
        ),
      ),

1 个答案:

答案 0 :(得分:1)

我认为发生这种情况是因为setState不会触发您的Sliver小部件执行重建。

尝试将SliverList包装在StatefulBuilder中。

例如

StatefulBuilder(builder: (innerContext, innerSetState) =>
  SliverList(
    delegate: SliverChildBuilderDelegate(
      (context, i) => ListTile(
        title: Slidable(
          actionPane: SlidableDrawerActionPane(),
          actionExtentRatio: 0.25,
          child: new Text(
            items[i],
            style: TextStyle(fontSize: 30),
          ),
          secondaryActions: <Widget>[
            IconSlideAction(
              caption: 'Remove',
              color: Colors.red,
              icon: Icons.delete,
              onTap: () {
                innerSetState(() {
                  items.removeAt(i);
                });
              },
            ),
          ],
        ),
      ),
      childCount: items.length,
    ),
  ),
)

这里最重要的部分是innerSetState函数,该函数在生成器的function参数中传递。它将重建整个StatefulBuilder子树。

让我知道这是否有帮助。