如何在不使用 Flutter 中的 DragTarget 的情况下创建 Draggable?
How do I create a Draggable without using DragTarget in Flutter?
我是 Flutter 的新手。我正在尝试创建一个 Draggable,但我不想使用 DragTarget。我希望它可以拖放到任何我想要的地方。当我在放置操作对象消失后这样做时。我不想让它消失。我怎样才能做到这一点?我检查了资源和 YouTube,但是,我找不到任何有用的东西。提前致谢。
根据我的评论,这是一个代码示例。
您有一个 Stack
,带有 Draggable
元素,然后您使用 Positioned
小部件和偏移量将其重建到新位置。
您也可以按照相同的示例重新创建 DragTarget
,如果您需要它的功能,只需重新定位它即可。
您可能需要稍微调整偏移量以使其对您的目标元素大小做出反应。
import 'package:flutter/material.dart';
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool _started = false;
Offset _position = Offset(20, 20);
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Stack(
children: <Widget>[
Positioned(
top: _position.dy - 30, // Size of widget to reposition correctly
left: _position.dx,
child: Draggable(
child: Chip(label: Text('Element')),
feedback: Material(
child: Chip(
label: Text('Element'),
)),
onDragEnd: (details) {
print(details.offset);
setState(() {
if (!_started) _started = true;
_position = details.offset;
});
},
),
),
],
),
),
);
}
}
我是 Flutter 的新手。我正在尝试创建一个 Draggable,但我不想使用 DragTarget。我希望它可以拖放到任何我想要的地方。当我在放置操作对象消失后这样做时。我不想让它消失。我怎样才能做到这一点?我检查了资源和 YouTube,但是,我找不到任何有用的东西。提前致谢。
根据我的评论,这是一个代码示例。
您有一个 Stack
,带有 Draggable
元素,然后您使用 Positioned
小部件和偏移量将其重建到新位置。
您也可以按照相同的示例重新创建 DragTarget
,如果您需要它的功能,只需重新定位它即可。
您可能需要稍微调整偏移量以使其对您的目标元素大小做出反应。
import 'package:flutter/material.dart';
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool _started = false;
Offset _position = Offset(20, 20);
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Stack(
children: <Widget>[
Positioned(
top: _position.dy - 30, // Size of widget to reposition correctly
left: _position.dx,
child: Draggable(
child: Chip(label: Text('Element')),
feedback: Material(
child: Chip(
label: Text('Element'),
)),
onDragEnd: (details) {
print(details.offset);
setState(() {
if (!_started) _started = true;
_position = details.offset;
});
},
),
),
],
),
),
);
}
}