【问题标题】:How do I create a Draggable without using DragTarget in Flutter?如何在 Flutter 中不使用 DragTarget 创建 Draggable?
【发布时间】:2021-09-08 17:01:02
【问题描述】:

我是 Flutter 的新手。我正在尝试创建一个 Draggable,但我不想使用 DragTarget。我希望它可以拖放到我想要的任何地方。当我在放置操作对象消失后这样做时。我不希望它消失。我怎样才能做到这一点?我检查了资源和 YouTube,但是,我找不到任何有用的东西。提前致谢。

【问题讨论】:

  • 在您的情况下,draggable 将仅用于获取位置信息,放下时它会消失,但您有它的位置。然后在 Stack 中的上一个拖动位置重绘相同的对象。
  • 但是我该怎么做呢?你能举个例子吗?
  • 你试过我提供的例子了吗?

标签: android flutter dart mobile draggable


【解决方案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。感谢您的回复,如果对您有帮助,请不要忘记将其设置为已回答:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多