I want to be able to drag an widget to any place on the screen. The first time the widget is dragged and place in a section of the screen. There is no issue. On the second attempt to drag of the widget container, the coordinates to not match and the widget jumps to the top of the screen. I want to have multiple widgets that can be dragged.
Any suggestions welcomed.

```
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        // visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'HomePage'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  double ytop = 50.0;
  double xleft = 50.0;
  GlobalKey blueKey = GlobalKey();
  String position = '';

  @override
  void initState() {
    // _getPositions();
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) {
      _getPositions();
    });
  }

  @override
  Widget build(BuildContext context) {
    // _getPositions();
    print('$xleft <---> $ytop');
    return Scaffold(
      // appBar: AppBar(
      //   title: Text(widget.title),
      // ),
      body: Container(
        child: Stack(
          children: <Widget>[
            Positioned(
              top: 30,
              left: 10,
              child: Text(
                'Filler Text',
              ),
            ),
            Positioned(
              top: ytop,
              left: xleft,
              child: GestureDetector(
                dragStartBehavior: DragStartBehavior.down,
                onVerticalDragStart: _onVerticalDragStartHandler,
                onVerticalDragUpdate: _onDragUpdateHandler,
                onVerticalDragEnd: (details) => {print('On END $details')},
                onTap: () {
                  print('HELLO');
                  _getPositions();
                },
                child: Container(
                  key: blueKey,
                  width: 100,
                  height: 100,
                  decoration: myBlueBoxDecoration,
                ),
                // ),
              ),
            ),
          ],
        ),
      ),
      // This trailing comma makes auto-formatting nicer for build methods.
    );
  }

  /// Track starting point of a vertical gesture
  void _onVerticalDragStartHandler(DragStartDetails details) {
    setState(() {
      ytop = details.globalPosition.dy;
      xleft = details.globalPosition.dx;
      // final dd = details.globalPosition.dy;
      print('Vertical Start Local Vertical Left: $xleft  Top: $ytop');
    });
  }

  void _onDragUpdateHandler(DragUpdateDetails details) {
    setState(
      () {
        ytop = details.localPosition.dy;
        xleft = details.localPosition.dx;
        xleft = xleft < 0 ? 0 : xleft;
        ytop = ytop < 10 ? 10 : ytop;
        // xleft = xleft > 259 ? 259 : xleft;
        // ytop = ytop > 618 ? 618 : ytop;

        print('Drage Update:--> Left: $xleft  Top: $ytop\n');
        print('');
      },
    );
  }

  _getPositions() {
    final RenderBox renderBoxRed = blueKey.currentContext.findRenderObject();
    final positionRed = renderBoxRed.localToGlobal(Offset.zero);
    position = 'POSITION of Red: $positionRed';
    print(position);
  }
}

BoxDecoration myBlueBoxDecoration = BoxDecoration(
  color: const Color(0xff7c94b6),
  border: Border.all(color: Colors.green, width: 1),
  borderRadius: BorderRadius.circular(12),
);

```