DEV Community

raman04-byte
raman04-byte

Posted on • Originally published at raman04.hashnode.dev

Exploring Flutter Layout Widgets: Expanded and Flexible

As a Flutter developer, you're probably well aware that creating responsive and dynamic layouts is a fundamental aspect of building successful apps. Flutter provides a rich set of widgets to help you achieve precisely that. In this blog post, we're going to dive deep into two essential layout widgets: Expanded and Flexible.

Understanding the Challenge
Imagine you're working on a Flutter app, and you have a row of widgets that need to adjust their sizes based on the available space. This scenario is quite common in app development, whether you're building a responsive UI for different devices or trying to accommodate variable content lengths.

This is where Expanded and Flexible come into play. They allow you to create flexible and dynamic layouts that adapt to different screen sizes and content.

The Expanded Widget
Expanding Horizontally
The Expanded widget is like a magic wand for your widgets. It takes up any available space along the main axis within a Row or Column. Here's how you can use it:

Row(
  children: [
    Container(width: 50, height: 50, color: Colors.blue),
    Expanded(
      child: Container(height: 50, color: Colors.green),
    ),
    Container(width: 50, height: 50, color: Colors.red),
  ],
)

Enter fullscreen mode Exit fullscreen mode

In this example, the middle Container wrapped with Expanded takes up all the available horizontal space between the blue and red containers.

Equal Distribution
You can also use Expanded to make widgets share available space equally:

Row(
  children: [
    Expanded(
      child: Container(height: 50, color: Colors.blue),
    ),
    Expanded(
      child: Container(height: 50, color: Colors.green),
    ),
    Expanded(
      child: Container(height: 50, color: Colors.red),
    ),
  ],
)

Enter fullscreen mode Exit fullscreen mode

Here, the blue, green, and red containers share the horizontal space equally, regardless of screen size.

The Flexible Widget
While Expanded is excellent for equally distributing space, the Flexible widget gives you finer control over how space is distributed among your widgets. You can specify flex factors to determine how much space each widget should occupy relative to the others.

Flex Factors

Row(
  children: [
    Flexible(
      flex: 2,
      child: Container(height: 50, color: Colors.blue),
    ),
    Flexible(
      flex: 1,
      child: Container(height: 50, color: Colors.green),
    ),
    Flexible(
      flex: 3,
      child: Container(height: 50, color: Colors.red),
    ),
  ],
)

Enter fullscreen mode Exit fullscreen mode

In this example, the Flexible widgets use flex factors: 2, 1, and 3. This means they'll occupy space in a 2:1:3 ratio. So, if there are 60 logical pixels available for distribution, the blue widget will get 20, the green 10, and the red 30.

Flex and Fit
Flexible also allows you to control how your widgets fit within the available space. For instance, if you want a widget to take up as much space as possible, you can set its fit property to FlexFit.tight.

Row(
  children: [
    Flexible(
      fit: FlexFit.tight,
      child: Container(height: 50, color: Colors.blue),
    ),
    Flexible(
      fit: FlexFit.loose,
      child: Container(height: 50, color: Colors.green),
    ),
  ],
)

Enter fullscreen mode Exit fullscreen mode

Here, the blue container will occupy all available space because it's set to FlexFit.tight. The green container, on the other hand, only takes up the space required by its content because it's set to FlexFit.loose.

When to Use Expanded vs. Flexible
Use Expanded when you want widgets to share available space equally or when you want a widget to take up all available space.
Use Flexible when you need finer control over how space is distributed among widgets, especially when working with flex factors and fit properties.
Conclusion
Mastering the Expanded and Flexible widgets in Flutter gives you the power to create versatile, responsive, and adaptive layouts for your apps. Whether you're building a simple UI or a complex design, these widgets are indispensable tools in your Flutter toolkit.

So go ahead, experiment, and make your Flutter apps shine with flexible and dynamic layouts!

Happy coding, fellow Flutteristas! πŸš€πŸ“±πŸ’»

Video: https://youtu.be/48lp6DTWq6k (in Hindi)

Top comments (2)

Collapse
 
efrenmarin profile image
Efren Marin

Great way to break down what's going on. I think it would also help if you added visual elements to show what the items would look like depending on their state.

Keep it up!

Collapse
 
hackerboi101 profile image
Asif Iqbal

Great read. Explained things thoroughly but concisely and it was easy to understand.