我最近开始学习 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 框上。
对此的任何帮助将不胜感激,谢谢。