如何在 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 播放视频

在 iOS 中不推荐使用 Flutter 依赖项

Flutter:iOS 富图像通知在 Firebase 消息传递中不起作用

Flutter + Chopper POST API 在网络中不起作用

为啥在 dart/flutter 中不等待 await 返回就执行代码?