From 1d70b2348934daac093b1a796bda0ed460e10454 Mon Sep 17 00:00:00 2001 From: nb312 Date: Wed, 12 Jun 2019 00:22:45 +0800 Subject: [PATCH] add the Draggable,DragTarget widget. --- lib/const/page_item_const.dart | 5 ++ lib/const/page_name_const.dart | 1 + lib/main.dart | 1 + lib/page/_page.dart | 1 + lib/page/interation/DraggablePage.dart | 80 ++++++++++++++++++++++++++ lib/page/interation/_interaction.dart | 6 ++ 6 files changed, 94 insertions(+) create mode 100644 lib/page/interation/DraggablePage.dart create mode 100644 lib/page/interation/_interaction.dart diff --git a/lib/const/page_item_const.dart b/lib/const/page_item_const.dart index 630e176..426c270 100644 --- a/lib/const/page_item_const.dart +++ b/lib/const/page_item_const.dart @@ -252,4 +252,9 @@ const PAGE_ITEMS = [ "img": PageImage.FLUTTER_OPEN, "click": PageName.ANIM_OPACITY, }, + { + "title": PageName.INTER_DRAG, + "img": PageImage.FLUTTER_OPEN, + "click": PageName.INTER_DRAG, + }, ]; diff --git a/lib/const/page_name_const.dart b/lib/const/page_name_const.dart index 3dd6c18..8486b6c 100644 --- a/lib/const/page_name_const.dart +++ b/lib/const/page_name_const.dart @@ -55,4 +55,5 @@ class PageName { static const ANIM_WIDGET = "AnimatedWidget"; static const ANIM_PYH_MODEL = "PyhModel"; static const ANIM_OPACITY = "OpacityPage"; + static const INTER_DRAG = "Draggable"; } diff --git a/lib/main.dart b/lib/main.dart index 65ce6d3..b79cda8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -69,6 +69,7 @@ class FlutterOpenApp extends StatelessWidget { PageName.ANIM_WIDGET: (context) => AnimWidgetPage(), PageName.ANIM_PYH_MODEL: (context) => PyhModelPage(), PageName.ANIM_OPACITY: (context) => AnimOpacityPage(), + PageName.INTER_DRAG: (context) => DraggablePage(), }, ); } diff --git a/lib/page/_page.dart b/lib/page/_page.dart index 4ee8003..7e9b243 100644 --- a/lib/page/_page.dart +++ b/lib/page/_page.dart @@ -36,3 +36,4 @@ export 'layoutsingle/_layout_single.dart'; export 'muti/_muti.dart'; export 'assets/_assets.dart'; export 'anim/_anim.dart'; +export 'interation/_interaction.dart'; diff --git a/lib/page/interation/DraggablePage.dart b/lib/page/interation/DraggablePage.dart new file mode 100644 index 0000000..e19eaf9 --- /dev/null +++ b/lib/page/interation/DraggablePage.dart @@ -0,0 +1,80 @@ +/// +/// Created by NieBin on 2019/6/11 +/// Github: https://github.com/nb312 +/// Email: niebin312@gmail.com +/// +import "package:flutter/material.dart"; +import "package:flutter_widgets/const/_const.dart"; + +class DraggablePage extends StatefulWidget { + @override + _DragState createState() => _DragState(); +} + +class _DragState extends State { + String _value = ""; + + Widget _draggable(String _data) => Draggable( + child: Text( + "$_data", + style: TextStyle(color: RED_LIGHT, fontSize: 30), + ), + feedback: Text( + "$_data", + style: TextStyle(color: BLUE_DEEP), + ), + childWhenDragging: Container(), + maxSimultaneousDrags: 1, + onDragCompleted: () { + print("Complete."); + }, + onDragStarted: () { + print("Start"); + }, + onDraggableCanceled: (v, off) { + print("Cancel"); + }, + data: _data, + ); + + Widget _target() => DragTarget( + builder: (context, List candidateData, rejectedData) => + Container( + constraints: BoxConstraints.expand(height: 100), + color: GREEN, + alignment: Alignment.center, + child: Text( + candidateData.length > 0 ? candidateData[0] : _value, + style: TextStyle(color: Colors.white, fontSize: 30), + ), + ), + onAccept: (value) { + print("Accept value= $value"); + _value = value; + }, + onLeave: (value) { + print("leave = $value"); + }, + onWillAccept: (value) { + print("Will Accept: value = $value"); + return true; + }, + ); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(PageName.INTER_DRAG), + ), + body: Column( + children: [ + Text(" You should drag the text and put it into the green area," + "then you can see the text changed."), + _draggable("Hello"), + _draggable("World"), + _target(), + ], + )); + } +} diff --git a/lib/page/interation/_interaction.dart b/lib/page/interation/_interaction.dart new file mode 100644 index 0000000..4926046 --- /dev/null +++ b/lib/page/interation/_interaction.dart @@ -0,0 +1,6 @@ +/// +/// Created by NieBin on 2019/6/11 +/// Github: https://github.com/nb312 +/// Email: niebin312@gmail.com +/// +export "DraggablePage.dart"; \ No newline at end of file