Flutter框架实现Android拖动到垃圾桶删除效果

 更新时间:2023年12月30日 10:20:10   作者:江上清风山间明月  
这篇文章主要介绍了Flutter框架实现Android拖动到垃圾桶删除效果,Flutter框架中的Draggable部件,用于支持用户通过手势拖动,它是基于手势的一种方式,可以使用户可以在屏幕上拖动指定的部件,下面我们来详细了解一下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

Draggable介绍

Draggable是Flutter框架中的一个小部件,用于支持用户通过手势拖动一个子部件。它是基于手势的一种方式,可以使用户可以在屏幕上拖动指定的部件。以下是关于Draggable的一些详细介绍:

构造函数

Draggable的构造函数

Draggable<T>({
  Key? key,
  required this.child,
  this.feedback,
  this.data,
  this.axis,
  this.childWhenDragging,
  this.feedbackOffset = Offset.zero,
  this.dragAnchor = DragAnchor.child,
  this.affinity,
  this.onDragStarted,
  this.onDragEnd,
  this.onDraggableCanceled,
  this.maxSimultaneousDrags,
  this.canDrag = true,
  this.gestureRecognizer,
  this.dragAnchorStrategy = DefaultDragAnchorStrategy,
})

参数说明

  • child (Widget): 被拖动的子部件。
  • feedback (Widget?): 拖动时显示的反馈部件。如果为null,则使用child作为反馈部件。
  • data (T?): 拖动过程中传递给DragTarget的数据。
  • axis (Axis?): 限制拖动的轴向。可以是Axis.horizontal(水平方向)或Axis.vertical(垂直方向)。
  • childWhenDragging (Widget?): 在拖动时替代child的部件。如果为null,则在拖动时显示child。
  • feedbackOffset (Offset): 反馈部件相对于拖动手势的偏移。
  • dragAnchor (DragAnchor): 控制拖动锚点的位置。可以是DragAnchor.child(默认值,锚点在child部件的中心)或DragAnchor.pointer(锚点在拖动手势的位置)。
  • affinity (Axis?): 用于指定对齐到某个轴的情况,可以是Axis.horizontal或Axis.vertical。
  • onDragStarted (VoidCallback?): 拖动开始时的回调函数。
  • onDragEnd (DraggableDetailsCallback?): 拖动结束时的回调函数。
  • onDraggableCanceled (DraggableCanceledCallback?): 在拖动被取消时的回调函数。
  • maxSimultaneousDrags (int?): 同时拖动的最大数量。
  • canDrag (bool): 是否允许拖动。如果为false,Draggable将不响应拖动手势。
  • gestureRecognizer (DragGestureRecognizer?): 用于自定义拖动手势检测的手势识别器。
  • dragAnchorStrategy (DragAnchorStrategy): 用于控制拖动锚点的策略。

使用示例

Draggable<int>(
  data: 42,
  child: Container(
    width: 100,
    height: 100,
    color: Colors.blue,
    child: Center(
      child: Text("Drag me"),
    ),
  ),
  feedback: Container(
    width: 120,
    height: 120,
    color: Colors.blue.withOpacity(0.5),
    child: Center(
      child: Text("Dragging..."),
    ),
  ),
  onDragStarted: () {
    // 拖动开始时执行的操作
    print("Drag started!");
  },
  onDragEnd: (details) {
    // 拖动结束时执行的操作
    print("Drag ended!");
  },
);

在这个例子中,当用户拖动包含文本"Drag me"的蓝色容器时,onDragStarted回调被触发,打印"Drag started!“。在拖动结束时,onDragEnd回调被触发,打印"Drag ended!”。被拖动的数据是42,可以通过DragTarget接收并处理。

DragTarget介绍

DragTarget 是 Flutter 框架中的一个小部件,用于接收拖动操作并处理拖动过程中传递的数据。它是与 Draggable 配合使用的一种方式,允许你指定拖动对象应该如何被接收和处理。

以下是关于 DragTarget 的详细介绍:

构造函数

DragTarget<T>(
  {Key? key,
  required this.builder,
  this.onWillAccept,
  this.onAccept,
  this.onLeave,
  this.hitTestBehavior = HitTestBehavior.deferToChild,
  this.feedback,
  this.child,
})

参数说明

  • builder (Widget Function(BuildContext, List<T?>, List): 用于构建 DragTarget 的子部件。builder 接受三个参数,分别是 BuildContext、当前拖动的数据列表和之前已经接收的数据列表。
  • onWillAccept (bool Function(T)?): 在拖动对象进入 DragTarget 区域时调用,用于决定是否接受拖动对象。如果返回 true,则 onAccept 将被调用。
  • onAccept (void Function(T)?): 在拖动对象被释放到 DragTarget 区域内时调用,用于处理接受的拖动数据。
  • onLeave (void Function(T)?): 在拖动对象离开 DragTarget 区域时调用。
  • hitTestBehavior (HitTestBehavior): 用于决定点击测试的行为。默认值是 HitTestBehavior.deferToChild,表示点击测试会被委托给子部件。
  • feedback (Widget?): 用于自定义拖动时的反馈部件。
  • child (Widget?): 用于放置在 DragTarget 区域内的子部件。

使用示例

DragTarget<int>(
  builder: (BuildContext context, List<int?> candidateData, List<dynamic> rejectedData) {
    return Container(
      width: 200,
      height: 200,
      color: Colors.grey,
      child: Center(
        child: Text("Drop here"),
      ),
    );
  },
  onWillAccept: (data) {
    // 在拖动对象进入 DragTarget 区域时调用
    // 返回 true 表示接受拖动对象
    return true;
  },
  onAccept: (data) {
    // 在拖动对象被释放到 DragTarget 区域内时调用
    // 处理接受的拖动数据
    print("Accepted data: $data");
  },
  onLeave: (data) {
    // 在拖动对象离开 DragTarget 区域时调用
  },
)

在这个例子中,DragTarget 是一个大小为 200x200 的灰色容器,上面显示着 “Drop here” 文本。当有拖动对象进入这个容器时,onWillAccept 将被调用,决定是否接受拖动对象。如果返回 true,则 onAccept 将在拖动对象被释放时被调用,处理接受的拖动数据。onLeave 在拖动对象离开 DragTarget 区域时被调用。这种方式可以用来实现拖放交互,其中 DragTarget 接收并处理 Draggable 的数据。

DragTarget如何接收Draggable传递过来的数据

DragTarget 通过 onAccept 回调函数接收从 Draggable 拖动传递过来的数据。这个回调函数在拖动对象被释放到 DragTarget 区域时调用。

以下是一个简单的示例,演示了如何使用 Draggable 和 DragTarget 来传递和接收数据:

import 'package:flutter/material.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Draggable and DragTarget Example'),
        ),
        body: MyDraggableAndDragTarget(),
      ),
    );
  }
}
class MyDraggableAndDragTarget extends StatefulWidget {
  @override
  _MyDraggableAndDragTargetState createState() => _MyDraggableAndDragTargetState();
}
class _MyDraggableAndDragTargetState extends State<MyDraggableAndDragTarget> {
  String data = 'Initial Data';
  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Draggable<String>(
          data: 'Dragged Data',
          child: Container(
            width: 100,
            height: 100,
            color: Colors.blue,
            child: Center(
              child: Text('Drag Me'),
            ),
          ),
          feedback: Container(
            width: 100,
            height: 100,
            color: Colors.blue.withOpacity(0.5),
            child: Center(
              child: Text('Dragging...'),
            ),
          ),
          childWhenDragging: Container(
            width: 100,
            height: 100,
            color: Colors.blue.withOpacity(0.5),
          ),
        ),
        SizedBox(height: 20),
        DragTarget<String>(
          builder: (BuildContext context, List<String?> candidateData, List<dynamic> rejectedData) {
            return Container(
              width: 150,
              height: 150,
              color: Colors.grey,
              child: Center(
                child: Text('Drop Here'),
              ),
            );
          },
          onWillAccept: (data) {
            // 当拖动对象进入 DragTarget 区域时调用
            // 返回 true 表示接受拖动对象
            return true;
          },
          onAccept: (data) {
            // 当拖动对象被释放到 DragTarget 区域内时调用
            // 处理接受的拖动数据
            setState(() {
              this.data = data ?? 'No Data';
            });
          },
          onLeave: (data) {
            // 当拖动对象离开 DragTarget 区域时调用
          },
        ),
        SizedBox(height: 20),
        Text('Received Data: $data'),
      ],
    );
  }
}

在这个例子中,Draggable 包含一个文本框,你可以拖动它。DragTarget 是一个灰色容器,当你把文本框拖动到这个容器上时,它将接收拖动的数据,并将接收到的数据显示在屏幕上。

结束语

Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!

到此这篇关于Flutter框架实现Android拖动到垃圾桶删除效果的文章就介绍到这了,更多相关Android Draggable和DragTarget内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • Android中判断网络连接状态的方法

    Android中判断网络连接状态的方法

    App判断用户是否联网是很普遍的需求,这篇文章主要介绍了Android中判断网络连接状态的方法,感兴趣的朋友可以参考一下
    2016-02-02
  • 详解Android开发之MP4文件转GIF文件

    详解Android开发之MP4文件转GIF文件

    这篇文章介绍的是将录下来的视频选取一小段转为 GIF 文件,不仅时间段可以手动选取,而且还需要支持截取视频的局部区域转为 GIF,网上调研了一下技术方案,觉得还是有必要把实现过程拿出来分享下,有需要的可以直接拿过去用。下面来一起看看。
    2016-08-08
  • Android AccessibilityService实现微信抢红包插件

    Android AccessibilityService实现微信抢红包插件

    这篇文章主要介绍了Android AccessibilityService实现微信抢红包插件的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • 如何造个android Flow流式响应的轮子

    如何造个android Flow流式响应的轮子

    这篇文章主要介绍了如何造个android Flow流式响应的轮子,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • TabLayout用法详解及自定义样式

    TabLayout用法详解及自定义样式

    这篇文章主要介绍了TabLayout用法详解及自定义样式的相关资料,需要的朋友可以参考下
    2017-01-01
  • android实现图片反转效果

    android实现图片反转效果

    这篇文章主要介绍了android实现图片反转效果的方法,需要的朋友可以参考下
    2015-09-09
  • Android仿微信选择图片和拍照功能

    Android仿微信选择图片和拍照功能

    这篇文章主要为大家详细介绍了Android仿微信选择图片和拍照功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • android 九宫格滑动解锁开机实例源码学习

    android 九宫格滑动解锁开机实例源码学习

    开机密码的样式种类多种多样,五花八门.本文接下来介绍滑动九宫格来达到开机目的,感兴趣的朋友可以了解下
    2013-01-01
  • Android实现的仿淘宝购物车demo示例

    Android实现的仿淘宝购物车demo示例

    这篇文章主要介绍了Android实现的仿淘宝购物车demo示例,结合实例形式分析了Android购物车的功能、布局及逻辑实现技巧,需要的朋友可以参考下
    2016-07-07
  • Kotlin可见性修饰符详解

    Kotlin可见性修饰符详解

    本文详细讲解了Kotlin可见性修饰符,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-11-11

最新评论

?


http://www.vxiaotou.com