Flutter Course: Using the Row Widget

In programming, the elements that compose the layout are as important as the business logic of the user interface (UI). In this post, we will delve into the use of the Row widget in the Flutter framework. The Row widget allows you to arrange elements horizontally, enabling a flexible design through various properties. This tutorial will detail how to use the Row widget and its advantages.

Basic Concepts of the Row Widget

The Row widget is one of the main layout widgets in Flutter, aligning multiple child widgets side by side horizontally. The Row widget can be used with Flexible and Expanded widgets to create more complex layouts. By default, the Row will automatically adjust its size based on the number of child widgets.

Structure of the Row Widget


Row(
  children: [
    Icon(Icons.star),
    Text('Star'),
    Icon(Icons.star),
  ],
)

The example above shows the basic structure of the Row widget. The Row contains various widgets, in this case, Icon and Text. You can easily extend it by adding the widgets needed for your interface design.

Main Properties of the Row Widget

The Row widget has several properties that you can use to adjust the UI. Among them, the most important properties are:

  • mainAxisAlignment: Aligns the child widgets along the main axis direction of the Row.
  • crossAxisAlignment: Aligns the child widgets along the cross axis direction of the Row.
  • mainAxisSize: Determines the width of the Row, adjusting the size along the main axis.
  • textDirection: Sets the text direction. It can be set from left to right or right to left.
  • verticalDirection: Determines the vertical alignment of the child widgets.

mainAxisAlignment Property

Let’s learn how to use the mainAxisAlignment property to align child widgets in the Row along the main axis direction. The following example shows various alignment options.


Row(
  mainAxisAlignment: MainAxisAlignment.spaceBetween,
  children: [
    Icon(Icons.star),
    Icon(Icons.star),
    Icon(Icons.star),
  ],
)

In the above example, MainAxisAlignment.spaceBetween adds equal spacing between all icons, positioning the icons at both ends of the Row.

crossAxisAlignment Property

The crossAxisAlignment property determines how the child elements within the Row will be aligned vertically. Let’s take a look at the following example.


Row(
  crossAxisAlignment: CrossAxisAlignment.start,
  children: [
    Icon(Icons.star),
    Text('Star', style: TextStyle(fontSize: 20)),
    Icon(Icons.star),
  ],
)

In this example, CrossAxisAlignment.start aligns the icon and text at the top, making all elements align to one side.

Use Cases for the Row Widget

The Row widget can be utilized in various ways. Here are some descriptions of different use cases.

1. Button Group

You can create a group of buttons by placing different buttons horizontally using Row. For example, create a button group like the one below.


Row(
  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
  children: [
    ElevatedButton(onPressed: () {}, child: Text('Button 1')),
    ElevatedButton(onPressed: () {}, child: Text('Button 2')),
    ElevatedButton(onPressed: () {}, child: Text('Button 3')),
  ],
)

2. Image and Text Combination

The Row is also useful for placing images and text together. You can use it as shown below for a beautiful UI.


Row(
  children: [
    Image.network('https://example.com/image.png', width: 50, height: 50),
    SizedBox(width: 10),
    Text('Image Description'),
  ],
)

3. Card Layout

The Row is also useful in card layouts. Below is a simple example of a card layout.


Row(
  children: [
    Card(
      child: Column(
        children: [
          Image.network('https://example.com/image1.png'),
          Text('Card 1'),
        ],
      ),
    ),
    SizedBox(width: 10),
    Card(
      child: Column(
        children: [
          Image.network('https://example.com/image2.png'),
          Text('Card 2'),
        ],
      ),
    ),
  ],
)

Combining Row Widget with Expanded Widget

Using the Row widget together with the Expanded widget is a great way to optimize space utilization. The Expanded widget allows the size of child widgets to stretch based on the available space.


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

In the above example, two Expanded widgets are placed together in the Row. Each Container widget will maximize its size to fit the allocated space. Note that if there are multiple Expanded widgets in the Row, each Expanded distributes its space in the same ratio.

Combining Row Widget with Column Widget

Combining the Row widget with the Column widget allows for easier construction of more complex layouts. Below is an example of using a Row widget within a Column.


Column(
  children: [
    Text('Top Text'),
    Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Icon(Icons.star),
        SizedBox(width: 10),
        Icon(Icons.star),
      ],
    ),
    Text('Bottom Text'),
  ],
)

Adjusting Size of the Row Widget

Adjusting the size of the Row widget is very important in UI design. Especially, when there’s no need to adjust the width, you can utilize the mainAxisSize property.

For example, to limit the size of the row to the size occupied by its child widgets, you can set it as follows.


Row(
  mainAxisSize: MainAxisSize.min,
  children: [
    Icon(Icons.star),
    Text('Star'),
    Icon(Icons.star),
  ],
)

Possibilities of the Row Widget

The Row widget can be used effectively, and with various configurations and combinations, a more diverse UI can be created. Experimenting with the Row widget directly is also a good learning method, so continue to modify the examples in your own way.

Conclusion

The Row widget is an essential tool for creating powerful and responsive UIs using Flutter. This tutorial covered a wide range of topics from the basic concepts to applications of the Row widget. It’s advisable to gain deeper experience by practically utilizing the Row widget in projects. Based on this foundation, you should be able to implement more complex layouts.

Stay tuned for more updates on Flutter tutorials!