📅  最后修改于: 2023-12-03 15:28:57.715000             🧑  作者: Mango
onDismissed
是 Flutter 中用于监听 ListView 中元素滑出屏幕并消失的回调函数。该回调函数的参数 DismissDirection
是一个枚举类型,表示元素消失时的滑动方向。
Dismissible
是可以滑动并带有“解雇”(即删除)功能的 widget。在列表中使用 Dismissible
可以方便地实现类似于邮件列表中向左或向右滑动一个邮件后出现的操作。
onDismissed
的用法是使用 Dismissible
包裹列表元素并传入 key
、direction
和 onDismissed
等参数。当用户向右或向左滑动元素并松手后,父 Widget 的 onDismissed
回调函数将被触发,对元素的“解雇”逻辑进行处理。
下面的代码示例演示了 Dismissible
和 onDismissed
的使用方法:
ListView.separated(
itemCount: _items.length,
separatorBuilder: (BuildContext context, int index) => Divider(),
itemBuilder: (BuildContext context, int index) {
final item = _items[index];
return Dismissible(
key: Key(item),
direction: DismissDirection.endToStart,
confirmDismiss: (DismissDirection direction) async {
return await showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text("确认删除"),
content: const Text("您确定要删除此项吗?"),
actions: <Widget>[
FlatButton(
onPressed: () => Navigator.of(context).pop(false),
child: const Text("取消"),
),
FlatButton(
onPressed: () => Navigator.of(context).pop(true),
child: const Text("删除"),
)
],
);
}
);
},
onDismissed: (direction) {
setState(() {
_items.removeAt(index);
});
Scaffold.of(context).showSnackBar(
SnackBar(
content: Text("$item 已删除"),
action: SnackBarAction(
label: "撤销",
onPressed: () {
setState(() {
_items.insert(index, item);
});
},
),
)
);
},
child: ListTile(
title: Text(item),
),
);
},
)
以上代码演示了如何在 ListView 中使用 Dismissible
和 onDismissed
。
在这个例子中,我们使用 Dismissible
包裹了 ListTile
并传入了必要的参数。然后,在 onDismissed
回调函数中我们删除了该元素并展示了一个 SnackBar
。通过这种简单的方法,我们就实现了“解雇”的功能。
flutter
为开发者提供了强大且易用的工具来实现这种功能,Dismissible
和 onDismissed
是其中一个很好的例子。