import 'package:flutter/material.dart';
class ExpandedFlexibleDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Expanded and Flexible Demo')),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Row(
children: [
Expanded(
flex: 2,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
height: 100,
color: Colors.red,
alignment: Alignment.center,
child: Text('Red', style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)),
),
),
),
Expanded(
flex: 1,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
height: 100,
color: Colors.green,
alignment: Alignment.center,
child: Text('Green', style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)),
),
),
),
Flexible(
flex: 1,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
height: 100,
color: Colors.blue,
alignment: Alignment.center,
child: Text('Blue', style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)),
),
),
),
],
),
),
);
}
}
We use a Row to place three colored boxes side by side. The Expanded widget tells Flutter to fill available horizontal space. The red box uses flex: 2, so it takes twice as much space as the green box with flex: 1. The blue box uses Flexible with flex: 1, which means it can shrink if needed but tries to take equal space as the green box. Padding adds space around each box, and the text labels help identify each color. This layout shows how Expanded and Flexible control space distribution in a row.