Как вызвать onMove или onAccept в DragTarget, когда какая-либо часть обратной связи Draggable находится над DragTarget?
Используя пример Flutter.dev Draggable, у меня есть два контейнера, один из которых является обратной связью и дочерним элементом Draggable, а другой — возвратом DragTarget.
Как я могу иметь триггер onAccept, когда какая-либо часть Draggable находится над DragTarget? Приведенный ниже пример кода вызывает onAccept только тогда, когда палец перетаскивания находится над DragTarget.
До сих пор мне удавалось приблизиться к этому только с помощью DragUpdateDetails, чтобы найти позиции x и y при обновлении перетаскивания, но позиционирование не всегда точное, возможно, из-за задержки между действием перетаскивания и срабатывание onDragUpdate.
Образец кода:
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
int acceptedData = 0;
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Draggable<int>(
// Data is the value this Draggable stores.
data: 10,
feedback: Container(
color: Colors.deepOrange,
height: 100,
width: 100,
child: const Icon(Icons.directions_run),
),
childWhenDragging: Container(
height: 100.0,
width: 100.0,
color: Colors.pinkAccent,
child: const Center(
child: Text('Child When Dragging'),
),
),
child: Container(
height: 100.0,
width: 100.0,
color: Colors.lightGreenAccent,
child: const Center(
child: Text('Draggable'),
),
),
),
DragTarget<int>(
builder: (
BuildContext context,
List<dynamic> accepted,
List<dynamic> rejected,
) {
return Container(
height: 100.0,
width: 100.0,
color: Colors.cyan,
child: Center(
child: Text('Value is updated to: $acceptedData'),
),
);
},
onAccept: (int data) {
setState(() {
acceptedData += data;
});
},
),
],
);
}
}