Updated 27 April 2023
DragTarget Widget is a widget that receives data when a Draggable widget is dropped. When a draggable is dragged on top of a drag target, the drag target is asked whether it will accept the data the draggable is carrying. If the user does drop the draggable on top of the drag target, then the drag target is asked to accept the draggable’s data.
You may also check our Flutter app development page.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
class DragTargetWidget extends StatefulWidget { @override _DragTargetWidgetState createState() => _DragTargetWidgetState(); } class _DragTargetWidgetState extends State<DragTargetWidget> { Color caughtColor = Colors.red; @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(8.0), child: Scaffold( appBar: AppBar( title: const Text('DragTarget Widgets Demo'), centerTitle: true, backgroundColor: Colors.red, ), body: Stack( children: <Widget>[ DragBox( const Offset(0.0, 0.0), 'Drag This', Colors.pink, ), DragBox( const Offset(250.0, 0.0), 'Drag This', Colors.grey, ), Positioned( left: 100.0, bottom: 0.0, child: DragTarget( onAccept: (Color color) { caughtColor = color; }, builder: ( BuildContext context, List<dynamic> accepted, List<dynamic> rejected, ) { return Container( width: 150.0, height: 150.0, decoration: BoxDecoration( borderRadius: BorderRadius.circular(28.0), color: accepted.isEmpty ? caughtColor : Colors.grey.shade200, ), child: const Center( child: Text("You can drag here!"), ), ); }, ), ) ], ), )); } } class DragBox extends StatefulWidget { final Offset initPos; final String label; final Color itemColor; DragBox( this.initPos, this.label, this.itemColor, ); @override DragBoxState createState() => DragBoxState(); } class DragBoxState extends State<DragBox> { Offset position = const Offset(0.0, 0.0); @override void initState() { super.initState(); position = widget.initPos; } @override Widget build(BuildContext context) { return Positioned( left: position.dx, top: position.dy, child: Draggable( data: widget.itemColor, child: Container( width: 120.0, height: 120.0, color: widget.itemColor, child: Center( child: Text( widget.label, style: const TextStyle( color: Colors.white, fontSize: 20.0, ), ), ), ), onDraggableCanceled: (velocity, offset) { setState(() { position = offset; }); }, feedback: Container( width: 120.0, height: 120.0, color: widget.itemColor.withOpacity(0.5), child: Center( child: Text( widget.label, style: const TextStyle( color: Colors.white, decoration: TextDecoration.none, fontSize: 18.0, ), ), ), ), ), ); } } |
Output:
I hope you get the rough idea to how to use DragTarget Widget in flutter. For reference you can also check here. You can also read other Mobikul blog here.
If you have more details or questions, you can reply to the received confirmation email.
Back to Home
Be the first to comment.