dart - Flutter Dismissible 坚持必须从树中删除列表项

我正在使用 Dismissible 项目列表,并希望在一个方向上滑动以删除该项目,但在另一个方向上滑动以启动对该项目的编辑。但是,Flutter 坚持必须在 onDismissed 回调中从树中删除 Dismissible 项。我已经尝试重新插入该项目,但这不起作用。有任何想法吗?从创建列表项的代码中摘录如下:

  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 小部件的 confirmDismiss 功能。

如果您不希望小部件被关闭,那么您只需要从 confirmDismiss 返回 false

不要使用 onDismissed 来做你的滑动后处理,使用 confirmDismiss 代替,它会为你提供滑动方向就像 onDismissed.

这里是confirmDismiss函数的官方文档:

Gives the app an opportunity to confirm or veto a pending dismissal. If the returned Future completes true, then this widget will be dismissed, otherwise it will be moved back to its original location. If the returned Future completes to false or null the [onResize]

这是一个例子:

Dismissible(
  confirmDismiss: (direction) async {
    if (direction == DismissDirection.startToEnd) {
      /// edit item
      return false;
    } else if (direction == DismissDirection.endToStart) {
      /// delete
      return true;
    }
  },
  key: Key(item.key),
  child: Text(item.name),
)

https://stackoverflow.com/questions/45919197/

相关文章:

android-studio - Flutter Emulator 连接到服务协议(protocol

flutter - 在屏幕外构建小部件

flutter - 如何在 flutter 中为下拉弹出窗口设置动态高度

listview - ListView中如何维护widget的状态?

dart - 如何在 Flutter 中清除 AnimatedList 中的所有项目

string - 如何在本地保存用户名并在每个页面 flutter 中显示

dart - flutter 解析 NetworkImage 时如何捕获引发的异常?

dart - Flutter - 创建值和名称数组

firebase - 持久化用户身份验证 Flutter Firebase

dart - 如何显示 HTML Assets 文件?