卓越教育2019年年报:总营收同比增长24.3%,在线教育发展加速

几天没事学习了一个在Flutter当中可以拖动的组件,DragTarget是用于接受Draggable数据的Widget。当Draggable被拖动到DragTarget上方并松手,DragTarget会根据传递过来的数据判断是否需要接受该数据。DragTarget本身也是一个StatefulWidget,可以根据接收到的数据进行改变。

Flutter开发跨平台项目,可拖动组件-Draggable学习,有代码收藏

本头条核心宗旨

欢迎来到「技术刚刚好」作者,「技术刚刚好」是个人维护,每天至少更新一篇Flutter技术文章,实时为大家播报Flutter最新消息。如果你刚好也在关注Flutter这门技术,那就跟我一起学习进步吧,你的赞,收藏,转发是对我个人最大的支持,维护不易,欢迎关注。

技术刚刚好经历

近几年,移动端跨平台开发技术层出不穷,从Facebook家的ReactNative,到阿里家WEEX,前端技术在移动端跨平台开发中大展身手,技术刚刚好作为一名Android开发,经历了从Reactjs到Vuejs的不断学习。而在2018年,我们的主角变成了Flutter,这是Goolge开源的一个移动端跨平台解决方案,可以快速开发精美的移动App。希望跟大家一起学习,一起进步!

本文核心要点

Flutter开发跨平台项目,可拖动组件-Draggable学习,有代码收藏

import \'package:flutter/material.dart\';
import \'draggable_demo.dart\';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: \'Flutter Demo\',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: DraggableDemo(),
);
}
}
/**
* Draggable能够让您的小部件被用户拖拽
* 并能获取拖拽的位置信息
* Positioned能够对根据偏移量offset进行定位
* 而Draggable的child是它被拖动前的样子
* feedback是它被拖动时的样子,这里在颜色上加了opacity进行了区分
* 而data是他在拖动到DragTarget将会传递的参数
* 在DragTarget中,可以通过onAccept获取这个data
*
* 这里在拖拽结束时会调用onDraggableCanceled,
* 并传入被拖拽后的偏移量offset
* 我们刷新这个offset就改变了Positioned的位置
*/
import \'package:flutter/material.dart\';

class DraggableWidget extends StatefulWidget {

final Offset offset;
final Color widgetColor;

const DraggableWidget({Key key, this.offset, this.widgetColor}) : super(key: key);

@override
_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(
width: 100.0,
height: 100.0,
color: widget.widgetColor.withOpacity(0.5),
),
onDraggableCanceled: (Velocity velocity, Offset offset){
setState(() {
this.offset = offset;
});
},
)
);
}
}

import \'package:flutter/material.dart\';

import \'draggable_widget.dart\';

class DraggableDemo extends StatefulWidget {
@override
_DraggableDemoState createState() => _DraggableDemoState();
}

class _DraggableDemoState extends State<DraggableDemo> {
Color _draggableColor = Colors.grey;

@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: <Widget>[
DraggableWidget(
offset: Offset(100.0, 100.0),
widgetColor: Colors.tealAccent,
),
DraggableWidget(
offset: Offset(200.0, 100.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,
);
}),
)
],
));
}
}

谢谢观看技术刚刚好的文章,技术刚刚好是个人维护,每天至少更新一篇Flutter技术文章,实时为大家播报Flutter最新消息。如果你刚好也在关注Flutter这门技术,那就跟我一起学习进步吧,你的赞,收藏,转发是对我个人最大的支持,维护不易,欢迎关注。

上一篇

林心如—年轻时原来这么美,宛如仙女下凡

下一篇

巨头加持,中国自动驾驶迎来新年的第一缕春风

评论已经被关闭。

插入图片
返回顶部