본문 바로가기
Flutter/GAME Programming

[플러터 게임] 플러터 기초: 환경 설정 및 기본 개념 /플러터의 기본 개념/ 레이아웃과 기본 위젯들 (Container, Row, Column 등)

by Maccrey Coding 2024. 9. 21.
728x90
반응형

 

레이아웃과 기본 위젯(Container, Row, Column) 쉽게 이해하기

1. Flutter에서 레이아웃이란?

Flutter에서 레이아웃은 화면에 UI 요소들을 배치하는 방식이에요.

게임이나 앱을 만들 때, 화면에 다양한 요소들을 어떤 식으로 배치할지 정하는 것이 매우 중요합니다.

Flutter는 이를 위해 여러 위젯을 제공하며, 그중 가장 기본적인 위젯들이 바로 Container, Row, Column입니다.

이 위젯들은 화면 요소를 쉽게 배치하고 조절할 수 있도록 도와줍니다.

2. Flutter의 기본 위젯들

1. Container

Container는 Flutter에서 가장 기본이 되는 위젯 중 하나로, 일종의 박스라고 생각하면 돼요. 이 박스 안에 다른 위젯을 넣고, 크기, 색상, 위치 등을 쉽게 조절할 수 있습니다.

 

Container의 주요 속성

  • width, height: 박스의 너비와 높이를 지정할 수 있어요.
  • color: 박스의 배경 색을 설정할 수 있습니다.
  • padding, margin: 박스 안쪽(padding)과 바깥쪽(margin)에 여백을 추가할 수 있어요.

Container 사용 예시

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("Container 위젯 예시")),
        body: Center(
          child: Container(
            width: 100,
            height: 100,
            color: Colors.blue,
            child: Center(
              child: Text("안녕하세요!", style: TextStyle(color: Colors.white)),
            ),
          ),
        ),
      ),
    );
  }
}

이 코드는 화면 중앙에 파란색 배경의 Container 안에 "안녕하세요!"라는 텍스트를 보여줍니다.

2. Row

Row는 여러 위젯을 가로로 나열할 때 사용하는 위젯이에요. 게임에서 버튼이나 아이콘 등을 가로로 배치하고 싶을 때 Row를 사용하면 됩니다.

 

Row의 주요 속성

  • mainAxisAlignment: 가로 방향으로 위젯들을 어떻게 배치할지 정할 수 있어요. 예를 들어, MainAxisAlignment.center는 모든 위젯을 중앙에 배치합니다.
  • children: Row 안에 배치할 여러 위젯들을 리스트로 전달합니다.

Row 사용 예시

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("Row 위젯 예시")),
        body: Center(
          child: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Icon(Icons.star, color: Colors.red),
              Icon(Icons.star, color: Colors.green),
              Icon(Icons.star, color: Colors.blue),
            ],
          ),
        ),
      ),
    );
  }
}

이 예시는 세 개의 별 아이콘을 가로로 나란히 중앙에 배치합니다. Row는 가로로 여러 요소를 쉽게 배치할 수 있게 해 줍니다.

3. Column

Column은 Row와 반대로, 여러 위젯을 세로로 나열할 때 사용하는 위젯이에요. 게임에서 메뉴 항목이나 여러 버튼을 세로로 배치할 때 Column을 사용하면 됩니다.

 

Column의 주요 속성

  • mainAxisAlignment: 세로 방향으로 위젯들을 어떻게 배치할지 정할 수 있어요.
  • children: Column 안에 여러 위젯들을 리스트로 전달합니다.

Column 사용 예시

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("Column 위젯 예시")),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text("첫 번째 텍스트", style: TextStyle(fontSize: 20)),
              Text("두 번째 텍스트", style: TextStyle(fontSize: 20)),
              Text("세 번째 텍스트", style: TextStyle(fontSize: 20)),
            ],
          ),
        ),
      ),
    );
  }
}

이 예시는 세 개의 텍스트를 세로로 나란히 중앙에 배치합니다. Column은 세로로 여러 요소를 배치할 때 매우 유용해요.

3. Row와 Column을 함께 사용하기

게임 개발을 할 때, 종종 RowColumn을 함께 사용해서 복잡한 레이아웃을 만들게 됩니다. 예를 들어, 아래는 Row와 Column을 함께 사용하여 버튼과 텍스트를 적절히 배치하는 예시입니다.

 

Row와 Column을 함께 사용한 예시

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("Row와 Column을 함께 사용")),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  ElevatedButton(onPressed: () {}, child: Text("버튼 1")),
                  SizedBox(width: 20),
                  ElevatedButton(onPressed: () {}, child: Text("버튼 2")),
                ],
              ),
              SizedBox(height: 20),
              Text("버튼을 눌러보세요!", style: TextStyle(fontSize: 20)),
            ],
          ),
        ),
      ),
    );
  }
}

여기서는 Row로 가로 방향으로 두 개의 버튼을 배치하고, 그 아래에 Column을 사용해 텍스트를 추가했습니다. 이를 통해 화면을 깔끔하게 구성할 수 있습니다.

4. Flutter로 게임 개발 시 레이아웃 활용

게임 개발에서도 레이아웃은 매우 중요해요. UI 요소들을 어떻게 배치할지에 따라 게임의 사용자 경험이 크게 달라질 수 있습니다.

예를 들어, 점수판, 플레이어 버튼, 아이템 등을 효과적으로 배치하려면 Row와 Column 같은 레이아웃 위젯을 잘 활용해야 합니다.

 

간단한 레이아웃을 사용한 게임 화면 예시

class MyGameUI extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("게임 UI 예시")),
        body: Column(
          children: [
            Container(
              padding: EdgeInsets.all(20),
              color: Colors.blue,
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  Text("점수: 0", style: TextStyle(color: Colors.white, fontSize: 20)),
                  Text("시간: 10", style: TextStyle(color: Colors.white, fontSize: 20)),
                ],
              ),
            ),
            Expanded(
              child: Center(
                child: Text("플레이어 영역", style: TextStyle(fontSize: 30)),
              ),
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                ElevatedButton(onPressed: () {}, child: Text("점프")),
                SizedBox(width: 20),
                ElevatedButton(onPressed: () {}, child: Text("공격")),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

이 코드는 간단한 게임 UI를 구성한 예시입니다.

화면 상단에 점수시간을 표시하고, 중앙에는 플레이어의 활동 영역을 배치했으며, 하단에는 점프공격 버튼을 가로로 나열했습니다.

5. 레이아웃 위젯을 활용한 게임 UI

Flutter의 Container, Row, Column 같은 기본 레이아웃 위젯을 잘 이해하면 게임 개발에서 매우 유용하게 활용할 수 있습니다.

간단한 UI부터 복잡한 게임 인터페이스까지, 위젯들을 활용해 다양한 레이아웃을 구현할 수 있어요.

레이아웃 위젯들을 적절히 사용해 깔끔하고 직관적인 게임 UI를 만들어보세요!

 

 

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

728x90
반응형