#dart #flutter
#dart #flutter
Вопрос:
Я хочу создать перетаскиваемую плавающую кнопку и, если возможно, напечатать положение перетаскивания в консоли.
Ответ №1:
Благодаря возможности компоновать виджеты Flutter любым удобным для вас способом, вы можете просто сделать это следующим образом:
Draggable(
feedback: FloatingActionButton(child: Icon(Icons.drag_handle), onPressed: () {}),
child: FloatingActionButton(child: Icon(Icons.drag_handle), onPressed: () {}),
childWhenDragging: Container(),
onDragEnd: (details) => print(details.offset))
Это Draggable
может быть передано в качестве floatingActionButton
аргумента Scaffold
.
feedback
Параметр управляет тем, как будет выглядеть виджет, который перетаскивается в конце, и child
определяет, как должен выглядеть стационарный Draggable
. Поскольку вы, вероятно, хотите видеть только FloatingActionButton
за раз, вы можете передать Container
пустую childWhenDragging
в,.
Offset
(Позиция) перетаскивания будет выведена на консоль при отпускании перетаскивания.
Комментарии:
1. только одна вещь! когда я отпускаю плавающую кнопку, она возвращается в свою первую позицию!!! есть помощь?
2. @saidbendrioue Да, это ожидаемое поведение. Если вы хотите обновить ее положение, вам, вероятно, придется поместить ее в
Stack
сPositioned
виджетом и обновитьposition
времяonDragEnd
вызова с помощьюStatefulWidget
иsetState
.3. И если вы хотите управлять направлением перетаскивания, то используйте
axis
поле, чтобы указать горизонтальную или вертикальную линию перетаскивания. Если не указано, по умолчанию это случайное значение
Ответ №2:
Мне нужно было добавить позиционируемый виджет, чтобы установить положение моей кнопки
class _MyHomePageState extends State<MyHomePage> {
Offset position =Offset(20.0, 20.0);
@override
Widget build(BuildContext context) {
return new Scaffold(
body: Stack(
children: <Widget>[
Container(
decoration: new BoxDecoration(
image: new DecorationImage(
image: new AssetImage("data_repo/img/bg1.jpg"),
fit: BoxFit.cover,
),
),
),
Positioned(
left : position.dx,
top : position.dy ,
child : Draggable(
feedback: Container(
child : FloatingActionButton(child: Icon(Icons.add), onPressed: () {})
),
child: Container(
child : FloatingActionButton(child: Icon(Icons.add), onPressed: () {}),
),
childWhenDragging: Container(),
onDragEnd: (details){
setState(() {
position = details.offset;
});
print(position);
print(position.dx);
print(position.dy);
}))
],
));
}
}
Ответ №3:
Вы можете использовать пакет DraggableFloatingButton:https://pub.dartlang.org/packages/draggable_floating_button