#flutter #dart
Вопрос:
Я хочу установить положение изображения с расположенными — расположенными свойствами: сверху, снизу, слева, справа. Я хочу выбрать положение в зависимости от того, куда игрок перетаскивает эту картинку. Но перетаскиваемый виджет имеет свойства offset.x и offset.y
После перетаскивания я получил x и y из перетаскиваемого , и когда я установил top = x и left = y, эти 2 позиции совершенно разные. Почему?
ОБНОВЛЕНИЕ: вверху = y , слева = x
Ответ №1:
Потребительная delta
стоимость, предоставленная во время onDragUpdate
Ознакомьтесь с полным примером здесь: https://dartpad.dev/6943a8e1a9ae2a0539edfa7884225372?
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
double top = 0;
double left = 0;
@override
Widget build(BuildContext context) {
final child = Material(
child: Container(
height: 100.0,
width: 100.0,
color: Colors.red,
child: const Center(
child: Text('Draggable'),
),
),
);
return Stack(
children: <Widget>[
Positioned(
top: top,
left: left,
child: Draggable<int>(
data: 10,
onDragUpdate: (details) {
top = top details.delta.dy;
left = left details.delta.dx;
setState(() {});
},
child: child,
feedback: child,
),
),
],
);
}
}
Комментарии:
1. спасибо, может быть, вы знаете, как я могу передать позицию (вверху и слева) в данные? Вместо 10
2. Не уверен, насколько это относится к данному вопросу, но вы можете хранить данные в смещении
dart Offset data = Offset(0, 0); ..... Widget build(BuildContext context) { ..... Positioned( top: data.dy, left: data.dx, child: Draggable<Offset>( data: data, onDragUpdate: (details) { data = Offset(data.dx details.delta.dx,data.dy details.delta.dy) setState(() {}); }, child: child, feedback: child, ), ),