Вы можете использовать Отклоняемый Виджет для достижения этого.
Следующий код может помочь вам лучше понять его.
final items = List<String>.generate(20, (i) => "Item ${i + 1}");
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Dismissable demo"),
),
body: ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) {
final item = items[index];
return Dismissible(
key: Key(item),
onDismissed: (direction) {
setState(() {
items.removeAt(index);
});
Scaffold.of(context)
.showSnackBar(SnackBar(content: Text("$item dismissed")));
},
background: Container(
color: Colors.red,
child: Icon(Icons.delete),
),
child: Card(
margin: EdgeInsets.all(20),
child: Text("$item"),
));
},
),
);
}