import 'package:flutter/material.dart'; void main() => runApp(MaterialApp( debugShowCheckedModeBanner: false, home: Scaffold( body: Page() ) )); class Page extends StatefulWidget { @override PageState createState() => PageState(); } class PageState extends State { double left = 0; double leftStart; final double startW = 100; double initW = 100; double containerWidth = 100; @override Widget build(BuildContext context) { return Stack( children: [ Positioned( left: left, child: GestureDetector( onHorizontalDragStart: (details) { setState(() { leftStart = details.globalPosition.dx; }); }, onHorizontalDragUpdate: (details) { var offsetWidth = details.globalPosition.dx - leftStart; var updatedWidth = (offsetWidth + initW).roundToDouble(); var screenWidth = MediaQuery.of(context).size.width; setState(() { if (updatedWidth < startW) { containerWidth = startW; return; } if (updatedWidth > screenWidth) { containerWidth = screenWidth; return; } containerWidth = updatedWidth; }); }, onHorizontalDragEnd: (details) { setState(() { initW = containerWidth.roundToDouble(); }); }, child: Container( width: containerWidth, height: MediaQuery.of(context).size.height, color: Colors.purple, child: Text(containerWidth.toString()) ) ) ) ] ); } }