Draggable + DragTarget
Виджет Draggable используется для создания элемента, который можно перетаскивать и помещать в другое место внутри приложения. Он позволяет пользователю взаимодействовать с интерфейсом, перемещая элемент с помощью касания или мыши.
Виджет DragTarget применяется вместе с Draggable и определяет область, куда можно сбрасывать перетаскиваемый элемент. Эта область принимает данные, передаваемые виджетом Draggable.
Когда элемент перетаскивается над DragTarget, виджет получает возможность определить, может ли он принять этот элемент. Если может — он выполняет заданное действие, например, обновляет состояние приложения.
Например, в приложении корзины покупок можно позволить пользователю перетаскивать товары в иконку корзины, чтобы добавить их туда.
Добавление виджетов Draggable и DragTarget
Рассмотрим пр имер, в котором пользователю предлагается разместить растения на полке.
1. Создание переменной состояния страницы
В примере используются два изображения полки — пустая и заполненная растениями.
Чтобы управлять отображением нужного изображения в зависимости от результата перетаскивания, создайте переменную состояния страницы isShelfFull с типом Boolean и значением по умолчанию False.
2. Добавление виджетов Draggable
Теперь добавим Draggable-элементы и зададим для каждого данные, по которым можно определить, подходит ли элемент для цели. Например, каждому присвоим тип (растение, ложка, мяч).
Эти данные позже понадобятся виджету DragTarget, чтобы определить, подходит ли сбрасываемый элемент.
- Внутри виджета Row добавьте Draggable-элементы.
- В качестве дочернего виджет а используйте Image.
- Задайте тип и значение данных в панели свойств (Draggable Properties).
Виджет Draggable также поддерживает события перетаскивания (Action Triggers):
- On Drag Started — начало перетаскивания;
- On Drag Update — процесс перетаскивания (можно отслеживать позицию);
- On Drag Completed — успешное завершение (элемент сброшен в DragTarget);
- On Drag Cancelled — отмена перетаскивания;
- On Drag End — завершение операции в любом случае.
3. Добавление виджета DragTarget
DragTarget принимает сбрасываемые элементы.
Мы помещаем его поверх изображения полки с помощью Stack, а отображение управляется виджетом ConditionalBuilder, который использует переменную isShelfFull.
- В палитре виджетов найдите DragTarget (вкладка Base Elements) и добавьте его в нужное место.
- Внутри DragTarget добавьте Container того же размера, что и изображение, с прозрачным фоном. Это будет зона приёма.
- Укажите тип данных, который может принимать цель (Draggable Properties → Type).