Как поставить виджет на позицию перетаскиваемого?

#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, ), ),