Skip to content

ttpho/Split-Screen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Split Screen

divide screen into two parts in flutter, use draggable flutter to change position Widget and split two views

Video demo

video demo

AI Solution

Widget: X <-> Y <-> Z , X (top/left), Y is dragging widget and Z (bottom/right)

Dragging widget Y left and right to achieve dynamic width for widgets X and Z

import 'package:flutter/material.dart'; class DynamicWidthRow extends StatefulWidget { @override _DynamicWidthRowState createState() => _DynamicWidthRowState(); } class _DynamicWidthRowState extends State<DynamicWidthRow> { // Initial flex factors for X and Z double _flexX = 1.0; double _flexZ = 1.0; // This will store the initial drag position relative to the start of Y. // Not strictly needed for this basic example, but good for more complex // drag behaviors. double _initialDragDx = 0.0; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Dynamic Width Row'), ), body: Row( children: <Widget>[ // Widget X Expanded( flex: (_flexX * 100).toInt(), // Multiply by 100 to work with int flex child: Container( color: Colors.red, child: Center( child: Text('X', style: TextStyle(color: Colors.white)), ), ), ), // Widget Y (Draggable handle) GestureDetector( onHorizontalDragStart: (details) { _initialDragDx = details.localPosition.dx; }, onHorizontalDragUpdate: (details) { // Calculate the change in horizontal position double deltaX = details.delta.dx; // Adjust flex factors based on drag. // You'll need to fine-tune the sensitivity. // Ensure flex factors don't go below a certain minimum (e.g., 0.1) // to prevent the widgets from disappearing or having zero width. setState(() { _flexX = (_flexX + (deltaX / 300)).clamp(0.1, 5.0); // Adjust sensitivity and limits _flexZ = (_flexZ - (deltaX / 300)).clamp(0.1, 5.0); // Adjust sensitivity and limits }); }, child: Container( width: 20.0, // Width of the draggable handle color: Colors.blue, child: Icon(Icons.drag_handle, color: Colors.white), ), ), // Widget Z Expanded( flex: (_flexZ * 100).toInt(), // Multiply by 100 to work with int flex child: Container( color: Colors.green, child: Center( child: Text('Z', style: TextStyle(color: Colors.white)), ), ), ), ], ), ); } } void main() { runApp(MaterialApp( home: DynamicWidthRow(), )); }

Dragging widget Y up and down changes the dynamic heights of widgets X and Z

import 'package:flutter/material.dart'; class DynamicHeightColumn extends StatefulWidget { @override _DynamicHeightColumnState createState() => _DynamicHeightColumnState(); } class _DynamicHeightColumnState extends State<DynamicHeightColumn> { // Initial flex factors for X and Z for vertical distribution double _flexX = 1.0; double _flexZ = 1.0; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Dynamic Height Column'), ), body: Column( // Use Column for vertical arrangement children: <Widget>[ // Widget X Expanded( flex: (_flexX * 100).toInt(), // Multiply by 100 for finer control with int flex child: Container( color: Colors.purple, // Different color for distinction child: Center( child: Text('X', style: TextStyle(color: Colors.white, fontSize: 24)), ), ), ), // Widget Y (Draggable handle) GestureDetector( onVerticalDragUpdate: (details) { // Use onVerticalDragUpdate for vertical drag // Calculate the change in vertical position double deltaY = details.delta.dy; // Adjust flex factors based on drag. // When dragging down (positive deltaY), _flexX increases, _flexZ decreases. // When dragging up (negative deltaY), _flexX decreases, _flexZ increases. // You'll need to fine-tune the sensitivity. // Ensure flex factors don't go below a certain minimum (e.g., 0.1) // to prevent the widgets from disappearing or having zero height. setState(() { _flexX = (_flexX + (deltaY / 300)).clamp(0.1, 5.0); // Adjust sensitivity and limits _flexZ = (_flexZ - (deltaY / 300)).clamp(0.1, 5.0); // Adjust sensitivity and limits }); }, child: Container( height: 20.0, // Height of the draggable handle color: Colors.orange, // Different color child: Center( child: Icon(Icons.drag_handle, color: Colors.white), // Drag handle icon ), ), ), // Widget Z Expanded( flex: (_flexZ * 100).toInt(), // Multiply by 100 for finer control with int flex child: Container( color: Colors.teal, // Different color child: Center( child: Text('Z', style: TextStyle(color: Colors.white, fontSize: 24)), ), ), ), ], ), ); } } void main() { runApp(MaterialApp( home: DynamicHeightColumn(), )); } 

About

divide screen into two parts in flutter, use draggable flutter to change position Widget and split two views

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors