我正在开发这款应用程序(简单的待办事项列表),我在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;
                      },
                    );
                  },
                ),
              )
            ]);
      },
    );

推荐答案

只需从您的confirmDismiss方法返回一个正确的布尔值(在本例中为"true"),如下所示:

confirmDismiss: (DismissDirection direction) async {
              if (direction == DismissDirection.startToEnd) {
                 await showDialog(
                    context: context,
                    builder: (BuildContext context) {
                      return AlertDialog(
                        title: const Text("Well Done!"),
                      );
                    });
                    return true;
              } else {...

来自这个小部件的confirmDismiss个方法文档:

如果返回的Future完成为True,则此小工具将被取消,否则将被移回其原始位置.

希望这能有所帮助

Flutter相关问答推荐

当仅点击一行时,所有行都被选中

在Flutter 中压缩图片返回空

下拉图标未居中

Fighter:基于ChangeNotifier状态动态更新AppBar中的图标

IsScrollable为True时如何删除Flutter 选项卡栏左侧填充

如何将Visual Studio代码中Flutter 应用的包名从com.example.XXX更改为Play Store中受限制的包名称

UI中的Flutter 下拉列表值未更改

如何从DART中的事件列表中获取即将到来的日期

Flutter 蜂巢不能正常工作,我正在使用蜂巢在设备上存储数据,但当我关闭并重新启动应用程序时,我失go 了一切

摆动更改标记可轻敲文本按钮样式

Riverpod 2.0-如何使用FutureOr和AutoDisposeSyncNotificationer处理api状态代码?

Flutter 中的 setState() 内部是如何工作的?

如何使用 Material3 创建带有高度的完美白色提升按钮?

无法将参数类型Future Function(String?)分配给参数类型void Function(NotificationResponse)?

在 Flutter 中更改高架按钮 OnPressed 的背景 colored颜色

如何在 flutter 中过滤 DateTime(intl)?

我几乎每次都将 Stateless Widget 与 BLoC 一起使用.我错了吗?

构建失败 - 无法解析 io.grpc:grpc-core:[1.28.0]. (是的,我已经升级到 mavenCentral())

如何在Flutter 中将列表的模型类型转换为数组?

Flutter - 如何调用此函数?