使用“ onTap”时,我试图从列表和屏幕中删除该项目。目前,它从列表中删除了该项目,但我无法从屏幕上将其删除。我该如何实现?
这是我的代码:
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,
),
),
答案 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
子树。
让我知道这是否有帮助。