Flutter 拖拽控件Draggable
Flutter提供了强大的拖拽控件,可以灵活定制,并且非常简单。下面作一个拖拽的案例。
Draggable Widget
Draggable
控件负责就是拖拽,父层使用了Draggable
,它的子元素就是可以拖动的,子元素可以实容器,可以是图片。用起来非常的灵活。
参数说明:
data
: 是要传递的参数,在DragTarget
里,会接受到这个参数。当然要在拖拽控件推拽到DragTarget
的时候。child
:在这里放置你要推拽的元素,可以是容器,也可以是图片和文字。feedback
: 常用于设置推拽元素时的样子,在案例中当推拽的时候,我们把它的颜色透明度变成了50%。当然你还可以改变它的大小。onDraggableCanceled
:是当松开时的相应事件,经常用来改变推拽时到达的位置,改变时用setState
来进行。
- Draggable( //拖拽组件
- data:widget.widgetColor,
- child:Container(
- width: 100.0,
- height:100.0,
- color: widget.widgetColor,
- ),
- feedback:Container( //feedback:拖动控件时子元素的样子
- width: 100.0,
- height:100.0,
- color: widget.widgetColor.withOpacity(0.5),
- ),
- onDraggableCanceled:(Velocity velocity,Offset offset){ //松手的时候
- setState(() {
- this.offset = offset;
- });
- },
- ),
DragTarget Widget
DragTarget
是用来接收拖拽事件的控件,当把Draggable
放到DragTarget
里时,他会接收Draggable
传递过来的值,然后用生成器改变组件状态。
- onAccept:当推拽到控件里时触发,经常在这里得到传递过来的值。
- builder: 构造器,里边进行修改child值。
- DragTarget(
- onAccept: (Color color){
- _draggabColor = color;
- },
- builder: (context, candidateData, rejectedData){
- return Container(
- width: 200.0,
- height: 200.0,
- color: _draggableColor,
- );
- },
- ),
完整代码如下:
- import 'package:flutter/material.dart';
- import 'draggable_demo.dart';
- void main() => runApp(new MyApp());
- class MyApp extends StatelessWidget {
- @override
- Widget build(BuildContext context) {
- return MaterialApp(
- title:'Flutter Demo',
- theme:ThemeData(
- primarySwatch: Colors.blue
- ),
- home:DraggableDemo()
- );
- }
- }
draggable_demo.dart代码:
- import 'package:flutter/material.dart';
- import 'draggable_widget.dart';
- class DraggableDemo extends StatefulWidget {
- _DraggableDemoState createState() => _DraggableDemoState();
- }
- class _DraggableDemoState extends State<DraggableDemo> {
- Color _draggableColor = Colors.grey;
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- appBar: AppBar(title: Text('拖拽案例')),
- body: Stack(
- children: <Widget>[
- DraggableWidget(
- offset: Offset(80.0, 80.0),
- widgetColor: Colors.tealAccent,
- ),
- DraggableWidget(
- offset: Offset(180.0, 80.0),
- widgetColor: Colors.redAccent,
- ),
- Center(
- child: DragTarget(
- onAccept: (Color color){
- _draggableColor = color;
- },
- builder: (context, candidateData, rejectedData){
- return Container(
- width: 200.0,
- height: 200.0,
- color: _draggableColor,
- );
- },
- ),
- ),
- ],
- ),
- );
- }
- }
draggable_widget.dart代码:
- class DraggableWidget extends StatefulWidget {
- final Offset offset; //位置
- final Color widgetColor; //颜色
- const DraggableWidget({Key key, this.offset, this.widgetColor}):super(key:key);
- _DraggableWidgetState createState() => _DraggableWidgetState();
- }
- class _DraggableWidgetState extends State<DraggableWidget> {
- Offset offset = Offset(0.0,0.0);
- @override
- void initState() {
- super.initState();
- offset = widget.offset;
- }
- @override
- Widget build(BuildContext context) {
- return Positioned(
- left: offset.dx,
- top:offset.dy,
- child: Draggable( //拖拽组件
- data:widget.widgetColor,
- child:Container(
- width: 100.0,
- height:100.0,
- color: widget.widgetColor,
- ),
- feedback:Container( //feedback:拖动控件时子元素的样子
- width: 100.0,
- height:100.0,
- color: widget.widgetColor.withOpacity(0.5),
- ),
- onDraggableCanceled:(Velocity velocity,Offset offset){ //松手的时候
- setState(() {
- this.offset = offset;
- });
- },
- ),
- );
- }
- }
Flutter 拖拽控件Draggable的更多相关文章
- Flutter 拖拽控件Draggable看这一篇就够了
注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 Draggable系列组件可以让我们拖动组件. Dragg ...
- flutter Draggable Widget拖拽控件
Draggable Widget Draggable控件负责就是拖拽,父层使用了Draggable,它的子元素就是可以拖动的,子元素可以实容器,可以是图片.用起来非常的灵活. 参数说明: data: ...
- 【C#/WPF】GridSplitter 分割布局,拖拽控件分隔栏以改变控件尺寸
需求:界面由多部分控件组成,想要拖拽控件之间的分隔栏以改变尺寸. MainWindow.xaml: <Grid> <Grid.ColumnDefinitions> <Co ...
- Unity编辑器 - DragAndDrop拖拽控件
Unity编辑器 - DragAndDrop拖拽控件 Unity编辑器的拖拽(DragAndDrop)在网上能找到的资料少,自己稍微研究了一下,写了个相对完整的案例,效果如下 代码: object d ...
- ios-将代码创建的视图控件放入拖拽控件的下面
如图所示 图片是拖拽上去的imageView,橘黄色控件是在代码中创建的添加上去的,此时黄色view在imageView 上方 调用方法bringSubviewToFront:试图将imageView ...
- H5实现多图片预览上传,可点击可拖拽控件介绍
版权声明:欢迎转载,请注明出处:http://blog.csdn.net/weixin_36380516 在做图片上传时发现一个蛮好用的控件,支持多张图片同时上传,可以点击选择图片,也可以将图片拖拽到 ...
- 拖拽控件java版
Button vv = new Button("vvvv"); DragSource.getDefaultDragSource().createDefaultDragGestur ...
- 开发winform程序,在拖拽控件大小时,VS会卡死
你可以看看你最近有没有装什么新的软件,比如说:有道词典就会与VS有冲突,导致卡死,可以把进程关闭.
- 【C#】自定义容器控件,设置界面控件,支持设计器拖入控件
先上效果图: 1.先重写设置界面的控件功能: public partial class SetterControl : UserControl { public SetterControl() { I ...
随机推荐
- 前端与SQL
转载自:http://developer.51cto.com/art/201706/542163.htm
- ansible的安装和简单使用
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真 ...
- Flask实现简单的群聊和单聊
Flask是使用python写的一个简单轻量级的框架,今天我们使用Flask实现一个简单的单聊和群聊功能 . 主要思路 : 前端登录聊天室,聊天室信息包含用户的登录信息,相当于一个登录功能,会把这个信 ...
- docker起容器配置MySQL主从复制
https://www.jianshu.com/p/0439206e1f28
- Jquery实践--精读开篇
JQuery实践,我已经看了最少三遍了.这里面的很多方法对我的工作很有帮助.但由于不是真的进行前端开发,所以JQuery中的很多功能也没有用到.所以隔一段时间想起,就会发觉,一些东西又忘记了.所以趁这 ...
- 006_FreeRTOS其他API函数
(一)FreeRTOS其他API函数是在调试中使用的,具体使用的看书本,贴出来为了方便查找 (二)FreeRTOS其他API函数 (三)常用 1. uxTaskGetSystemState() 获取信 ...
- 洛谷P1860 新魔法药水
洛谷题目链接 动态规划: 这个题目调了我好久....结果循环变量写错了... 而且题目有个坑!!!只能用开始给你的$v$元买入东西 回归正题: 我们定义状态$ans[i][j]$表示第$i$个物品用了 ...
- codevs 1166 矩阵取数游戏
二次联通门 : codevs 1166 矩阵取数游戏 /* codevs 1166 矩阵取数游戏 SB区间dp dp[l][r] = max (dp[l + 1][r] + number[l], dp ...
- 【线性代数】6-2:对角化(Diagonalizing a Matrix)
title: [线性代数]6-2:对角化(Diagonalizing a Matrix) categories: Mathematic Linear Algebra keywords: Eigenva ...
- 虚拟机Linux无法查看本地ip地址 解决办法
解决方案: 1.虚拟机与本机采用的连接方式为:Host-only模式,其中几种连接模式的区别我不做介绍,自己百度.如果之前连接方式不为Host-only,更改之后需要重新启动虚拟机. 2.将本机的两块 ...