拖拽控件


接收器代碼:

import 'package:flutter/material.dart';

import 'draggable_widget.dart';

class DraggableDemo extends StatefulWidget {
DraggableDemo({Key key}) : super(key: key);

@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(80, 80),
widgetColor: Colors.orange,
),
DraggableWidget(
offset: Offset(200, 80),
widgetColor: Colors.red,
),
Center(//拖拽接收器
child: DragTarget(
onAccept: (Color color){//接收條件
_draggableColor = color;
}, builder: (context,candidateData,rejectedData){//固定寫法
return Container(//接收控件
width: 200,
height: 200,
color: _draggableColor,
);
},
),

)
],
),
);
}
}
 
發送器(拖拽器)代碼:
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;//取傳進來的offset
}
@override
Widget build(BuildContext context) {
return Positioned(
left: offset.dx,
top: offset.dy,

child: Draggable(//可拖動的組件
data: widget.widgetColor,//傳遞xxx給接收器 xxx此處為顏色 此處要和接收器的onAccept 相對應
child: Container(
width: 100.0,
height: 100.0,
color: widget.widgetColor,//傳遞過來的顏色
),
feedback: Container(
width: 120,
height: 120,
color: widget.widgetColor.withOpacity(0.5),//半透明
),//當拖動的時候的樣式

onDraggableCanceled: (Velocity velocity,Offset offset){
setState(() {
this.offset = offset;//拖動結束
});

},//拖拽完成
),
);
}
}
總結:
 

//拖拽控件

Draggable

data:xxx  //傳遞的數據 和 DragTarget 中的onAccept 相呼應

 

feedback:() 拖拽時的樣式

onDraggableCanceled :()拖拽結束的樣式

 

 

 

DragTarget(

onAccept:(xxx){//拖拽接受條件

 

 

},builder:(context,candidateData,rejectedData){

xxx //接受控件

}

)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM