플러터 강좌: 7.7 Row 위젯 사용하기

프로그래밍에서 레이아웃을 구성하는 요소는 사용자 인터페이스(UI)의 비즈니스 로직과 마찬가지로 매우 중요합니다. 이 포스팅에서는 플러터(Flutter) 프레임워크에서의 Row 위젯 사용법에 대해 깊이 있게 다루어 보겠습니다. Row 위젯은 수평 방향으로 요소들을 배치할 수 있게 해주며, 다양한 속성을 통해 유연한 디자인을 구현할 수 있습니다. 이 강좌를 통해 Row 위젯을 사용하는 방법과 그 이점을 상세히 설명하겠습니다.

Row 위젯의 기본 개념

Row 위젯은 플러터의 주요 레이아웃 위젯 중 하나로, 수평으로 여러 자식 위젯을 나란히 배치합니다. Row 위젯은 Flexible 위젯, Expanded 위젯 등과 함께 사용해 더 복잡한 레이아웃을 만들 수 있습니다. 기본적으로 Row는 자식 위젯의 개수에 따라 크기를 자동으로 조정하게 됩니다.

Row 위젯의 구조


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

위의 예시는 Row 위젯의 기본 구조를 보여줍니다. Row 안에는 다양한 위젯, 이 경우에는 Icon과 Text가 포함되어 있습니다. 귀하의 인터페이스 구성에 필요한 위젯을 추가하여 쉽게 확장할 수 있습니다.

Row 위젯의 주요 속성

Row 위젯에는 UI를 조정할 수 있는 여러 속성이 있습니다. 그 중 가장 중요한 속성은 다음과 같습니다:

  • mainAxisAlignment: Row의 주 축 방향으로 자식 위젯을 정렬합니다.
  • crossAxisAlignment: Row의 교차 축 방향으로 자식 위젯을 정렬합니다.
  • mainAxisSize: Row의 넓이를 결정합니다, 주 축 방향의 크기를 조정합니다.
  • textDirection: 텍스트 방향을 설정합니다. 왼쪽에서 오른쪽 또는 오른쪽에서 왼쪽 방향으로 설정할 수 있습니다.
  • verticalDirection: 자식 위젯의 세로 방향 정렬을 결정합니다.

mainAxisAlignment 속성

mainAxisAlignment 속성을 사용하여 Row 안의 자식 위젯을 주 축 방향으로 정렬하는 방법을 알아보겠습니다. 다음 예시는 다양한 정렬 옵션을 보여줍니다.


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

위 예제에서 MainAxisAlignment.spaceBetween는 모든 아이콘 사이에 동일한 간격을 추가하여, Row의 양 끝에 아이콘이 위치하도록 합니다.

crossAxisAlignment 속성

crossAxisAlignment 속성은 Row 안의 자식 요소들이 얼마나 높이의 축으로 정렬될지를 결정합니다. 다음 예시를 살펴보겠습니다.


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

이 예에서 CrossAxisAlignment.start는 아이콘과 텍스트를 위쪽으로 정렬하여, 모든 요소가 한쪽으로 정렬되게 합니다.

Row 위젯 활용 사례

Row 위젯은 다양한 방법으로 활용될 수 있습니다. 아래는 몇 가지 사용 사례에 대한 설명입니다.

1. 버튼 그룹

다양한 버튼을 Row를 통해 수평적으로 배치하여 버튼 그룹을 만들 수 있습니다. 예를 들어, 아래와 같은 버튼 그룹을 만들어보세요.


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

2. 이미지와 텍스트 조합

Row는 이미지와 텍스트를 함께 배치하는 데 또한 유용합니다. 아름다운 UI를 위해 아래와 같이 활용할 수 있습니다.


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

3. 카드 레이아웃

Row는 카드 레이아웃에서도 유용하게 사용됩니다. 아래는 간단한 카드 레이아웃의 예시입니다.


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'),
        ],
      ),
    ),
  ],
)

Row 위젯과 Expanded 위젯 결합하기

Row 위젯과 Expanded 위젯을 함께 사용하는 것은 공간 활용을 최적화하는 훌륭한 방법입니다. Expanded 위젯은 사용 가능한 공간에 자식 위젯의 크기를 확장할 수 있습니다.


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

위 예에서는 두 개의 Expanded 위젯이 Row에 함께 배치되어 있습니다. 각 Container 위젯은 할당된 공간에 맞추어 최대화됩니다. 주의할 점은 Row 내에 여러 개의 Expanded 위젯이 있을 경우, 각 Expanded가 가진 공간을 같은 비율로 분배한다는 것입니다.

Row 위젯과 Column 위젯 조합하기

Row 위젯과 Column 위젯을 조합하면 더욱 복잡한 레이아웃을 손쉽게 구성할 수 있습니다. 아래는 Column 안에 Row 위젯을 사용하는 예시입니다.


Column(
  children: [
    Text('위쪽 텍스트'),
    Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Icon(Icons.star),
        SizedBox(width: 10),
        Icon(Icons.star),
      ],
    ),
    Text('아래쪽 텍스트'),
  ],
)

row 위젯과 사이즈 조절

Row 위젯의 크기를 조정하는 것은 UI에서 매우 중요합니다. 특히, 가로 길이를 조정할 필요가 없는 경우, mainAxisSize 속성을 활용할 수 있습니다.

예를 들어, Row의 크기를 자식 위젯들이 차지하는 크기로 제한하려면, 다음과 같이 설정합니다.


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

Row 위젯의 경우의 수

Row 위젯은 유용하게 사용될 수 있으며, 이 외에도 다양한 구성과 조합으로 더 다채로운 UI를 만들 수 있습니다. Row 위젯을 직접 실험해보는 것도 좋은 학습 방법이니, 예제를 지속적으로 자신의 방식으로 변형해보길 바랍니다.

마무리

Row 위젯은 플러터를 사용하여 강력하고 반응성이 뛰어난 UI를 만드는 데 필수적인 도구입니다. 본 강좌에서는 Row 위젯의 기본 개념부터 응용법까지 폭넓게 다뤄보았습니다. 실제로 Row 위젯을 프로젝트에서 활용해보며 더 깊이 있는 경험을 쌓는 것이 좋습니다. 이 기초를 바탕으로 더 복잡한 레이아웃을 구현해보실 수 있기를 바랍니다.

앞으로 더 많은 플러터 강좌에 대한 업데이트를 기대해주세요!