Flutter: Draggable和DragTarget 可拖动小部件
class _MyHomeState extends State<MyHome> {
  List<Map<String, String>> _data1 = [
    {'title': 'a'},
    {'title': 'b'}
  ];
  Set<Map<String, String>> _data2 = Set();
  @override
  Widget build(BuildContext context) {
    Widget myChip(e) {
      return Chip(
        avatar: CircleAvatar(
          child: Text(e['title'][0]),
        ),
        label: Text(e['title']),
      );
    }
    Widget myGreyBox(w) {
      return Material(
        child: w,
      );
    }
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo'),
      ),
      body: ListView(
        children: <Widget>[
          Container(
            height: 280,
            decoration: BoxDecoration(
              color: Colors.grey[200],
            ),
            child: Wrap(
              children: _data1.map((e) {
                return Draggable<Map>(
                  data: e,
                  child: myChip(e),
                  childWhenDragging: Opacity(
                    opacity: 0.5,
                    child: myChip(e),
                  ),
                  feedback: myGreyBox(myChip(e)),
                );
              }).toList(),
            ),
          ),
          SizedBox(
            height: 50,
          ),
          DragTarget<Map>(
            onWillAccept: (v) => true,
            // 当在此拖动目标上放置可接受的数据时调用
            onAccept: (value) {
              print('Accept: $value');
              setState(() {
                _data2.add(value);
                _data1.remove(value);
              });
            },
            // 当拖动此目标的给定数据片段离开目标时调用
            onLeave: (value) {
              print('Leave: $value');
            },
            builder: (context, candidates, rejects) {
              return Container(
                constraints: BoxConstraints(
                  minHeight: 280,
                ),
                decoration: BoxDecoration(
                  color: Colors.grey[200],
                ),
                child: Column(
                  children: _data2.map((e) {
                    return ListTile(
                      leading: CircleAvatar(
                        child: Text(e['title'][0]),
                      ),
                      title: Text(e['title']),
                      trailing: IconButton(
                        onPressed: () {
                          setState(() {
                            _data2.remove(e);
                          });
                        },
                        icon: Icon(Icons.delete_outline),
                      ),
                    );
                  }).toList(),
                ),
              );
            },
          ),
        ],
      ),
    );
  }
}
Flutter: Draggable和DragTarget 可拖动小部件的更多相关文章
- jQuery UI API - 可拖拽小部件(Draggable Widget)(转)
		所属类别 交互(Interactions) 用法 描述:允许使用鼠标移动元素. 版本新增:1.0 依赖: UI 核心(UI Core) 部件库(Widget Factory) 鼠标交互(Mouse I ... 
- A Deep Dive Into Draggable and DragTarget in Flutter
		https://medium.com/flutter-community/a-deep-dive-into-draggable-and-dragtarget-in-flutter-487919f6f1 ... 
- Flutter进阶—点击、拖动和其他手势
		Flutter中的手势系统有两个层次.第一层具有原始指针事件,其描述了穿过屏幕的指针(例如触摸.鼠标和触控笔)的位置和移动.第二层具有手势,其描述由一个或多个指针移动组成的语义动作. 指针指针代表用户 ... 
- flutter Draggable Widget拖拽控件
		Draggable Widget Draggable控件负责就是拖拽,父层使用了Draggable,它的子元素就是可以拖动的,子元素可以实容器,可以是图片.用起来非常的灵活. 参数说明: data: ... 
- 优质Android小部件:索尼滚动相册
		虽然骚尼手机卖的不怎么样,但是有些东西还是做的挺好的,工业设计就不用说了,索尼的相册的双指任意缩放功能也是尤其炫酷.其桌面小部件滚动相册我觉得也挺好的,比谷歌原生的相册墙功能好多了,网上搜了一下也没发 ... 
- 从Hello World说起(Dart)到“几乎所有东西都是Widget”小部件。
		import 'package:flutter/material.dart'; void main() => runApp(new MyApp()); class MyApp extends S ... 
- ArcGIS API For JavaScript 开发(三)使用小部件设计页面框架
		其实上一个的鹰眼.比例尺.图例等都是小部件:这篇文章主要是页面布局设计,dojo提供了非常多的小部件,从功能的角度可以分为3大类:表单小部件.布局小部件和应用小部件. 表单小部件于HTML中的表单部件 ... 
- Android开发5:应用程序窗口小部件App Widgets的实现
		前言 本次主要是实现一个Android应用,实现静态广播.动态广播两种改变 widget内容的方法,即在上篇博文中实验的基础上进行修改,所以此次实验的重点是AppWidget小部件的实现啦~ 首先,我 ... 
- ArcGIS Server开发教程系列(8)ArcGIS API for Javascript-控件(小部件)
		1. 鹰眼 OverviewMap小部件用于在其关联的主地图内较清楚的当前鸟瞰图的范围.当主地图范围变化时,鹰眼图会自动在其空间内更新范围以保持和地图的当前范围保持一致,当鹰眼图空间的地图范围 ... 
随机推荐
- CF460C Present
			写在前面 由于菜,写树状数组写挂了. 于是想出了一种不像线段树或树状数组+二分答案那样显然,但是依旧不难想,复杂度比较优秀,代码难度低的做法. 算法思路 外部二分答案,不多解释,稍证明一下单调性: 若 ... 
- SpringCloud-常用组件介绍
			SpringCloud-常用组件介绍 分布式系统开发用于分布式环境(多个服务器不在同一个机房,同一个业务服务在多台服务器运行) Spring Cloud 是基于Springboot的分布式云服务架构, ... 
- Grafana Prometheus系统监控Redis服务
			Grafana Prometheus系统监控Redis服务 一.Grafana Prometheus系统监控Redis服务 1.1流程 1.2安装redis_exporter 1.3配置prometh ... 
- Kubernetes (yaml 文件详解)
			# yaml格式的pod定义文件完整内容:apiVersion: v1 #必选,版本号,例如v1kind: Pod #必选,Podmetadata: #必选,元数据 ... 
- Session (简介、、相关方法、流程解析、登录验证)
			Session简介 Session的由来 Cookie虽然在一定程度上解决了"保持状态"的需求,但是由于Cookie本身最大支持4096字节,以及Cookie本身保存在客户端,可能 ... 
- Java中的fail-fast和 fail-safe 的区别
			在我们详细讨论这两种机制的区别之前,首先得先了解并发修改. 1.什么是同步修改? 当一个或多个线程正在遍历一个集合Collection,此时另一个线程修改了这个集合的内容(添加,删除或者修改).这就是 ... 
- Python 字符串指定位置替换字符
			指定位置替换字符 def replace_char(old_string, char, index): ''' 字符串按索引位置替换字符 ''' old_string = str(old_string ... 
- 封装Vue Element的可编辑table表格组件
			前一段时间,有博友在我那篇封装Vue Element的table表格组件的博文下边留言说有没有那种"表格行内编辑"的封装组件,我当时说我没有封装过这样的组件,因为一直以来在实际开发 ... 
- HDU6434 Count【欧拉函数 线性筛】
			HDU6434 I. Count T次询问,每次询问\(\sum_{i=1}^{n}\sum_{j=1}^{n-1}[gcd(i-j,i+j)=1]\) \(T\le 1e5, n \le 2e7\) ... 
- hdu2141 Can you find it? (二分)
			Problem Description Give you three sequences of numbers A, B, C, then we give you a number X. Now yo ... 
