如何在 Flutter 中不使用 DragTarget 创建 Draggable?
Posted
技术标签:
【中文标题】如何在 Flutter 中不使用 DragTarget 创建 Draggable?【英文标题】:How do I create a Draggable without using DragTarget in Flutter? 【发布时间】:2021-09-08 17:01:02 【问题描述】:我是 Flutter 的新手。我正在尝试创建一个 Draggable,但我不想使用 DragTarget。我希望它可以拖放到我想要的任何地方。当我在放置操作对象消失后这样做时。我不希望它消失。我怎样才能做到这一点?我检查了资源和 YouTube,但是,我找不到任何有用的东西。提前致谢。
【问题讨论】:
在您的情况下,draggable 将仅用于获取位置信息,放下时它会消失,但您有它的位置。然后在Stack
中的上一个拖动位置重绘相同的对象。
但是我该怎么做呢?你能举个例子吗?
你试过我提供的例子了吗?
【参考方案1】:
根据我的评论,这里是一个代码示例。
您有一个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;
);
,
),
),
],
),
),
);
【讨论】:
感谢您的努力!它对我有用。但如果有人想使用该代码,则必须将 Scaffold 包装在 MaterialApp 小部件中。 确实,该应用程序的基础是我的 MaterialApp。感谢您的回复,如果对您有帮助,请不要忘记将其设置为已回答:)以上是关于如何在 Flutter 中不使用 DragTarget 创建 Draggable?的主要内容,如果未能解决你的问题,请参考以下文章
如何将用户的TextFormField输入传递给flutter中不同类的按钮
如何使用 flutter_webview_plugin 播放视频
Flutter:iOS 富图像通知在 Firebase 消息传递中不起作用