我正在开发这款应用程序(简单的待办事项列表),我在startToEnd刷卡上遇到了奇怪的行为:Disdisable没有被解雇(当我使用调试模式时,甚至没有注册!).EndToStart运行得很好.背景和确认解散的效果与预期一致. 我已经判断了官方文档和一些免费教程,尽管我在这一点上遵循了说明,但我的代码不能正常工作.有什么 idea 可能是错的吗?我使用简单的ListView.Builder来确保没有其他手势事件可以干扰,仍然不起作用
代码:
class TaskListW extends StatefulWidget {
TaskListW({Key? key}) : super(key: key);
@override
State<TaskListW> createState() => _TaskListWState();
}
class _TaskListWState extends State<TaskListW> {
@override
Widget build(BuildContext context) {
List tasks = ['task', 'task1', 'task2'];
return LayoutBuilder(
builder: (ctx, constraints) {
return Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Expanded(
flex: 1,
child: ListView.builder(
scrollDirection: Axis.vertical,
// shrinkWrap: true,
// physics: const AlwaysScrollableScrollPhysics(),
itemCount: tasks.length,
itemBuilder: (ctx, index) {
return Dismissible(
child: TaskItem("1231241242", "DummyTask", "Social"),
key: ValueKey(tasks[index]),
direction: DismissDirection.horizontal,
background: Container(
color: Colors.orangeAccent,
child: Padding(
padding: const EdgeInsets.all(5),
child: Row(
children: const [
Text(
'Done',
style: TextStyle(color: Colors.black),
),
],
),
),
),
secondaryBackground: Container(
color: Colors.redAccent,
child: Padding(
padding: const EdgeInsets.all(5),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: const [
Text(
'Delete',
style: TextStyle(color: Colors.white),
),
],
),
),
),
onDismissed: (DismissDirection direction) {
if (direction == DismissDirection.startToEnd) {
print('Marked Completed');
} else {
print('Removed item');
}
setState(() {
tasks.removeAt(index);
});
},
confirmDismiss: (DismissDirection direction) async {
if (direction == DismissDirection.startToEnd) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text("Well Done!"),
);
});
} else {
return await showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text("Delete Confirmation"),
content: const Text(
"Are you sure you want to delete this item?"),
actions: <Widget>[
TextButton(
onPressed: () async {
Navigator.of(context).pop(true);
},
child: const Text("Delete")),
TextButton(
onPressed: () =>
Navigator.of(context).pop(false),
child: const Text("Cancel"),
),
],
);
},
);
}
;
return null;
},
);
},
),
)
]);
},
);