1

我最近开始学习 Flutter,但在使用 Droppable 和 DragTarget 处理拖放时我陷入了困境。当我将可拖动元素拖动到 DropTarget 元素上时,我在onWillAccept方法中进行了一些验证。这里的条件之一要求我与用户确认他们是否愿意在返回true并前往onAccept方法之前继续他们的操作。出于某种原因,代码执行不会等待用户的操作返回。

这就是我的 DragTarget 的样子

DragTarget<Map>(
  builder: (context, listOne, listTwo) {
    return Container();
  },
  onWillAccept: (value) {
    if(condition1) {
      return true;
    } else if(condition2) {
      return true;
    } else {
      if(!condition3) {
        return true;
      } else {
        await _showConfirmation();
        return false;
      }
    }
  },
  onAccept: (value) {
    print(value);
  },
)

_showConfirmation方法看起来这样

Future<void> _showConfirmation() async {
  return showDialog<void>(
    context: context,
    barrierDismissible: false,
    builder: (BuildContext context) {
      return AlertDialog(
        title: Text('Attention'),
        content: SingleChildScrollView(
          child: ListBody(
            children: <Widget>[
              Text('Some message")
            ],
          ),
        ),
        actions: <Widget>[
          FlatButton(
            child: Text('Accept'),
            onPressed: () {
              Navigator.of(context).pop();
              return true;
            },
          ),
          FlatButton(
            child: Text('Cancel'),
            onPressed: () {
              Navigator.of(context).pop();
              return false;
            },
          )
        ],
      );
    },
  );
}

添加 await 没有帮助,因为 onWillAccept 不是异步的。使其异步也无济于事。

_showConfirmation().then((result) {
  return result
})

上面的代码也没有帮助。在许多情况下,被拖动的项目会悬在 DragTarget 框上。

对此的任何帮助将不胜感激,谢谢。

4

0 回答 0