Flutter DragDrop Examples

Learn Drag Drop in flutter using the following simple examples.

Example 1: Drag Drop widget

This example will comprise the following files:

  • ExampleDragDrop.dart

Step 1: Create Project.

  1. Open your favorite Flutter IDE.
  2. Go to File-->New-->Project to create a new project.

Step 2: Add Dependencies.

No external dependencies are needed for this project.

Step 4: Write Dart Code

Write your code as follows:

*(a). ExampleDragDrop.dart

Create a file Dart named ExampleDragDrop.dart

Here is the full code

import 'package:flutter/material.dart';
class DragAndDropExample extends StatefulWidget {
  final String title;
  const DragAndDropExample({Key? key, required this.title}) : super(key: key);
  DragAndDropAppState createState() => DragAndDropAppState();
class DragAndDropAppState extends State<DragAndDropExample> {
  int position = 1;
  void moveRect(int pos) {
    setState(() {
      position = pos;
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title: Text(widget.title)),
        body: Column(children: <Widget>[
              child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceAround,
            children: <Widget>[
              MovableRect(1, position, moveRect),
              MovableRect(2, position, moveRect),
              MovableRect(3, position, moveRect),
class Dot extends StatefulWidget {
  const Dot({Key? key, this.color, this.size, this.child}) : super(key: key);
  final Color? color;
  final double? size;
  final Widget? child;
  DotState createState() => DotState();
class DotState extends State<Dot> {
  Widget build(BuildContext context) {
    return Container(
        width: widget.size,
        height: widget.size,
            BoxDecoration(color: widget.color, border: Border.all(width: 0.0)),
        child: widget.child);
class OutlineRectPainter extends CustomPainter {
  const OutlineRectPainter();
  void paint(Canvas canvas, Size size) {
    final Paint paint = Paint()
      ..color = const Color(0xFF000000)
      ..style = PaintingStyle.stroke;
    final Path path = Path();
    final Rect box = Offset.zero & size;
    canvas.drawPath(path, paint);
  bool shouldRepaint(OutlineRectPainter oldDelegate) => false;
class MovableRect extends StatelessWidget {
  const MovableRect(this.position, this.rectPosition, this.callback);
  final int position;
  final int rectPosition;
  final ValueChanged<int> callback;
  static final GlobalKey kRectKey = GlobalKey();
  static const double kRectSize = 50.0;
  Widget build(BuildContext context) {
    final Widget rect = Dot(
      key: kRectKey,
      color: Colors.blue.shade700,
      size: kRectSize,
    const Widget outlineRect = SizedBox(
        width: kRectSize,
        height: kRectSize,
        child: CustomPaint(painter: OutlineRectPainter()));
    if (position == rectPosition) {
      return Draggable<bool>(
        data: true,
        childWhenDragging: outlineRect,
        feedback: rect,
        maxSimultaneousDrags: 2,
        child: rect,
    } else {
      return DragTarget<bool>(onAccept: (bool data) {
      }, builder:
          (BuildContext context, List<bool?> accepted, List<dynamic> rejected) {
        return outlineRect;


Simply copy the source code into your Flutter Project, Build and Run.


Download code here.
Follow code author here.