Flutter提供了强大的拖拽控件,可以灵活定制,并且非常简单。下面作一个拖拽的案例。

Draggable Widget

Draggable控件负责就是拖拽,父层使用了Draggable,它的子元素就是可以拖动的,子元素可以实容器,可以是图片。用起来非常的灵活。

参数说明:

  • data: 是要传递的参数,在DragTarget里,会接受到这个参数。当然要在拖拽控件推拽到DragTarget的时候。
  • child:在这里放置你要推拽的元素,可以是容器,也可以是图片和文字。
  • feedback: 常用于设置推拽元素时的样子,在案例中当推拽的时候,我们把它的颜色透明度变成了50%。当然你还可以改变它的大小。
  • onDraggableCanceled:是当松开时的相应事件,经常用来改变推拽时到达的位置,改变时用setState来进行。
  1. Draggable( //拖拽组件
  2. data:widget.widgetColor,
  3. child:Container(
  4. width: 100.0,
  5. height:100.0,
  6. color: widget.widgetColor,
  7. ),
  8. feedback:Container( //feedback:拖动控件时子元素的样子
  9. width: 100.0,
  10. height:100.0,
  11. color: widget.widgetColor.withOpacity(0.5),
  12. ),
  13. onDraggableCanceled:(Velocity velocity,Offset offset){ //松手的时候
  14. setState(() {
  15. this.offset = offset;
  16. });
  17. },
  18. ),

DragTarget Widget

DragTarget是用来接收拖拽事件的控件,当把Draggable放到DragTarget里时,他会接收Draggable传递过来的值,然后用生成器改变组件状态。

  • onAccept:当推拽到控件里时触发,经常在这里得到传递过来的值。
  • builder: 构造器,里边进行修改child值。
  1. DragTarget(
  2. onAccept: (Color color){
  3. _draggabColor = color;
  4. },
  5. builder: (context, candidateData, rejectedData){
  6. return Container(
  7. width: 200.0,
  8. height: 200.0,
  9. color: _draggableColor,
  10. );
  11. },
  12. ),

完整代码如下:

  1. import 'package:flutter/material.dart';
  2. import 'draggable_demo.dart';
  3.  
  4. void main() => runApp(new MyApp());
  5.  
  6. class MyApp extends StatelessWidget {
  7. @override
  8. Widget build(BuildContext context) {
  9. return MaterialApp(
  10. title:'Flutter Demo',
  11. theme:ThemeData(
  12. primarySwatch: Colors.blue
  13. ),
  14. home:DraggableDemo()
  15. );
  16. }
  17. }

draggable_demo.dart代码:

  1. import 'package:flutter/material.dart';
  2. import 'draggable_widget.dart';
  3.  
  4. class DraggableDemo extends StatefulWidget {
  5. _DraggableDemoState createState() => _DraggableDemoState();
  6. }
  7.  
  8. class _DraggableDemoState extends State<DraggableDemo> {
  9. Color _draggableColor = Colors.grey;
  10.  
  11. @override
  12. Widget build(BuildContext context) {
  13. return Scaffold(
  14. appBar: AppBar(title: Text('拖拽案例')),
  15. body: Stack(
  16. children: <Widget>[
  17. DraggableWidget(
  18. offset: Offset(80.0, 80.0),
  19. widgetColor: Colors.tealAccent,
  20. ),
  21. DraggableWidget(
  22. offset: Offset(180.0, 80.0),
  23. widgetColor: Colors.redAccent,
  24. ),
  25. Center(
  26. child: DragTarget(
  27. onAccept: (Color color){
  28. _draggableColor = color;
  29. },
  30. builder: (context, candidateData, rejectedData){
  31. return Container(
  32. width: 200.0,
  33. height: 200.0,
  34. color: _draggableColor,
  35. );
  36. },
  37. ),
  38. ),
  39. ],
  40. ),
  41. );
  42. }
  43. }

draggable_widget.dart代码:

  1. class DraggableWidget extends StatefulWidget {
  2. final Offset offset; //位置
  3. final Color widgetColor; //颜色
  4. const DraggableWidget({Key key, this.offset, this.widgetColor}):super(key:key);
  5.  
  6. _DraggableWidgetState createState() => _DraggableWidgetState();
  7. }
  8.  
  9. class _DraggableWidgetState extends State<DraggableWidget> {
  10. Offset offset = Offset(0.0,0.0);
  11. @override
  12. void initState() {
  13. super.initState();
  14. offset = widget.offset;
  15. }
  16.  
  17. @override
  18. Widget build(BuildContext context) {
  19. return Positioned(
  20. left: offset.dx,
  21. top:offset.dy,
  22. child: Draggable( //拖拽组件
  23. data:widget.widgetColor,
  24. child:Container(
  25. width: 100.0,
  26. height:100.0,
  27. color: widget.widgetColor,
  28. ),
  29. feedback:Container( //feedback:拖动控件时子元素的样子
  30. width: 100.0,
  31. height:100.0,
  32. color: widget.widgetColor.withOpacity(0.5),
  33. ),
  34. onDraggableCanceled:(Velocity velocity,Offset offset){ //松手的时候
  35. setState(() {
  36. this.offset = offset;
  37. });
  38. },
  39. ),
  40. );
  41. }
  42. }

Flutter 拖拽控件Draggable的更多相关文章

  1. Flutter 拖拽控件Draggable看这一篇就够了

    注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 Draggable系列组件可以让我们拖动组件. Dragg ...

  2. flutter Draggable Widget拖拽控件

    Draggable Widget Draggable控件负责就是拖拽,父层使用了Draggable,它的子元素就是可以拖动的,子元素可以实容器,可以是图片.用起来非常的灵活. 参数说明: data: ...

  3. 【C#/WPF】GridSplitter 分割布局,拖拽控件分隔栏以改变控件尺寸

    需求:界面由多部分控件组成,想要拖拽控件之间的分隔栏以改变尺寸. MainWindow.xaml: <Grid> <Grid.ColumnDefinitions> <Co ...

  4. Unity编辑器 - DragAndDrop拖拽控件

    Unity编辑器 - DragAndDrop拖拽控件 Unity编辑器的拖拽(DragAndDrop)在网上能找到的资料少,自己稍微研究了一下,写了个相对完整的案例,效果如下 代码: object d ...

  5. ios-将代码创建的视图控件放入拖拽控件的下面

    如图所示 图片是拖拽上去的imageView,橘黄色控件是在代码中创建的添加上去的,此时黄色view在imageView 上方 调用方法bringSubviewToFront:试图将imageView ...

  6. H5实现多图片预览上传,可点击可拖拽控件介绍

    版权声明:欢迎转载,请注明出处:http://blog.csdn.net/weixin_36380516 在做图片上传时发现一个蛮好用的控件,支持多张图片同时上传,可以点击选择图片,也可以将图片拖拽到 ...

  7. 拖拽控件java版

    Button vv = new Button("vvvv");  DragSource.getDefaultDragSource().createDefaultDragGestur ...

  8. 开发winform程序,在拖拽控件大小时,VS会卡死

    你可以看看你最近有没有装什么新的软件,比如说:有道词典就会与VS有冲突,导致卡死,可以把进程关闭.

  9. 【C#】自定义容器控件,设置界面控件,支持设计器拖入控件

    先上效果图: 1.先重写设置界面的控件功能: public partial class SetterControl : UserControl { public SetterControl() { I ...

随机推荐

  1. 前端与SQL

    转载自:http://developer.51cto.com/art/201706/542163.htm

  2. ansible的安装和简单使用

    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真 ...

  3. Flask实现简单的群聊和单聊

    Flask是使用python写的一个简单轻量级的框架,今天我们使用Flask实现一个简单的单聊和群聊功能 . 主要思路 : 前端登录聊天室,聊天室信息包含用户的登录信息,相当于一个登录功能,会把这个信 ...

  4. docker起容器配置MySQL主从复制

    https://www.jianshu.com/p/0439206e1f28

  5. Jquery实践--精读开篇

    JQuery实践,我已经看了最少三遍了.这里面的很多方法对我的工作很有帮助.但由于不是真的进行前端开发,所以JQuery中的很多功能也没有用到.所以隔一段时间想起,就会发觉,一些东西又忘记了.所以趁这 ...

  6. 006_FreeRTOS其他API函数

    (一)FreeRTOS其他API函数是在调试中使用的,具体使用的看书本,贴出来为了方便查找 (二)FreeRTOS其他API函数 (三)常用 1. uxTaskGetSystemState() 获取信 ...

  7. 洛谷P1860 新魔法药水

    洛谷题目链接 动态规划: 这个题目调了我好久....结果循环变量写错了... 而且题目有个坑!!!只能用开始给你的$v$元买入东西 回归正题: 我们定义状态$ans[i][j]$表示第$i$个物品用了 ...

  8. codevs 1166 矩阵取数游戏

    二次联通门 : codevs 1166 矩阵取数游戏 /* codevs 1166 矩阵取数游戏 SB区间dp dp[l][r] = max (dp[l + 1][r] + number[l], dp ...

  9. 【线性代数】6-2:对角化(Diagonalizing a Matrix)

    title: [线性代数]6-2:对角化(Diagonalizing a Matrix) categories: Mathematic Linear Algebra keywords: Eigenva ...

  10. 虚拟机Linux无法查看本地ip地址 解决办法

    解决方案: 1.虚拟机与本机采用的连接方式为:Host-only模式,其中几种连接模式的区别我不做介绍,自己百度.如果之前连接方式不为Host-only,更改之后需要重新启动虚拟机. 2.将本机的两块 ...