我正在使用一个可驳回项目列表,希望朝一个方向滑动以删除该项目,但朝另一个方向滑动以启动对该项目的编辑.然而,弗利特坚持认为,在onDismissed回调中,必须从树中删除一个可驳回的项目.我试着重新插入该项目,但不起作用.有什么 idea 吗?创建列表项的代码摘录如下:

  return new Dismissible(
    key: new ObjectKey(item),
    direction: DismissDirection.horizontal,
    onDismissed: (DismissDirection direction) {
      setState(() {
        item.deleteTsk();
      });
      if (direction == DismissDirection.endToStart){
        //user swiped left to delete item
        _scaffoldKey.currentState.showSnackBar(new SnackBar(
          content: new Text('You deleted: ${item.title}'),
          action: new SnackBarAction(
            label: 'UNDO',
            onPressed: () { handleUndo(item); }
          )
        ));
      }
      if (direction == DismissDirection.startToEnd){
        //user swiped right to edit so undo the delete required by flutter
        Async.scheduleMicrotask((){handleUndo(item);});
        Navigator.of(context).pushNamed('/tskedit');
      }
    },
  ...

推荐答案

只要物品键改变,Dismissible人就会认为你的物品被驳回了.假设您的项目类别是MyItem.如果在MyItem类中实现复制字段的构造函数MyItem.from,例如:

class MyItem {
  MyItem({ @required this.title, @required this.color });
  MyItem.from(MyItem other) : title = other.title, color = other.color;
  final String title;
  final Color color;
}

然后,您可以用handleUndo(new MyItem.from(item))替换handleUndo(item),这样您的new ObjectKey(item)将不同于您以前使用的旧ObjectKey(假设您没有在MyItem上实现operator ==).

Dart相关问答推荐

自定义主题无法正常工作

Dart:使用正则表达式从字符串中删除空格

FlutterError (setState() 在 dispose() 之后调用:(生命周期状态:defunct,not mounted)

Flutter android 生成apk

跳过 JavaScript 直接进入 Dart

Dart JavaScript 与 jQuery 的互操作回调

Flutter:将照片或图像显示为模态弹出窗口

Flutter-创建value和name数组

在 Dart 中将对象推入数组

找不到正确的提供程序-Flutter

对象的默认stringify,相当于Java的toString?

用默认值初始化成员的最优雅的方法

如何在 Dart 中以正确的方式重定向和重新加载?

用于 dartlang 的 REPL

在 Dart 中,将动态转换为给定类型或返回 null 的语法好方法?

用一个 catch 表达式在 Dart 中捕获多种特定的异常类型

在 Dart 中打开类类型

GWT 与 Dart - 主要区别是什么? Dart 是 GWT 的潜在替代品吗?

Dart 中的 Math.round() 在哪里?

如何展平flatten列表?