【发布时间】:2020-09-20 15:59:26
【问题描述】:
我有一个这样的 Draggable。大多数教程视频是全屏使用 Draggable,但我只想在屏幕上的小区域使用它。
class DragBox extends StatefulWidget {
final Offset initPos;
final AssetImage image;
DragBox(this.initPos, this.image);
@override
_DragBoxState createState() => _DragBoxState();
}
class _DragBoxState extends State<DragBox> {
Offset position = Offset.zero;
double top = 0;
double left = 0;
@override
void initState() {
super.initState();
position = widget.initPos;
}
Widget _dragChild() {
return CircleAvatar(
backgroundImage: widget.image,
backgroundColor: colorPlayerBackground,
);
}
@override
Widget build(BuildContext context) {
return Positioned(
left: position.dx,
top: position.dy,
child: Draggable(
data: [widget.image],
child: _dragChild(),
onDraggableCanceled: (velocity, offset) {
setState(() {
position = offset;
});
},
childWhenDragging: Opacity(
opacity: 0.5,
child: _dragChild(),
),
feedback: _dragChild(),
),
);
}
}
在带有 DragTarget 的卡片容器内。
Container(
width: double.infinity,
child: Card(
child: Stack(
children: <Widget>[
DragBox(Offset(0.0, 0.0), AssetImage(playerAnthonyMartial)),
DragBox(Offset(150.0, 0.0), AssetImage(playerBrunoFernandes)),
Positioned(
left: 75.0,
bottom: 0.0,
child: Container(
width: 120,
height: 120,
color: Colors.black,
child: DragTarget(
onWillAccept: (data) {
return true;
},
onAccept: (data) {
accept = true;
},
builder: (
BuildContext context,
List<dynamic> accepted,
rejected,
) {
return accept
? Image.asset('assets/images/AnthonyMartial.png')
: Container();
},
),
),
)
],
),
),
),
但这会发生 when i drop it 这是怎么发生的,如何解决?
我按照 youtube 上的指南进行操作,但是当我将 Draggable 拖动到目标上时,似乎什么也没发生,数据是如何传递的。我完全不明白它是如何工作的。请帮忙!!!
【问题讨论】: