Я недавно начал изучать Flutter, и я застрял в какой-то момент, работая с Drag and Drop, используя 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 не асин c. Сделать асин c тоже не помогло.
_showConfirmation().then((result) {
return result
})
Выше код тоже не помог. Во многих случаях перетаскиваемый объект остается нависшим над полем DragTarget.
Любая помощь по этому вопросу будет принята, спасибо.