Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

이수연의 티스토리

플러터 1장 다양한 위젯 사용! 본문

flutter

플러터 1장 다양한 위젯 사용!

suye0n6 2025. 2. 15. 03:19

오늘은 맥북에 플러터를 다시 셋팅함과 더불어 다시 위젯부터 공부해보려고 한다. 그렇기에 먼저 오늘 코드와 시뮬레이터에서 돌려본 간단한 앱을 함께 리뷰 해보고자 한다.

 

코드는 https://youtu.be/r5JZEjnySrU?si=KcuZOYsf3ZX_7kRl 님의 영상을 보고 참고하였다.

 

class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});

@override
State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
// 클릭 여부를 저장할 변수
bool isClicked = false;

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Test Title")),
drawer: Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: const <Widget>[
DrawerHeader(
decoration: BoxDecoration(color: Colors.blue),
child: Text("Drawer Header Part"),
),
ListTile(title: Text("Menu 1")),
],
),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// 클릭 여부에 따라 텍스트 변경
Text(isClicked ? "버튼이 클릭되었습니다!" : "Hello World"),
const SizedBox(height: 20),
FloatingActionButton(
onPressed: () {
setState(() {
isClicked = !isClicked; // 클릭 여부 토글
});
// ignore: avoid_print
print("clicked"); // 콘솔에 클릭 출력
},
child: const Icon(Icons.mouse),
),
],
),
),
);
}
}

전체 코드이다. 간단하게 hello world 출력과 메뉴 아이콘을 사용해 옆에 띄우기 까지가 오늘의 코드이다.

 

1. MaterialApp

  • 역할: Flutter 애플리케이션의 기본 설정을 담당합니다. 앱 전체의 스타일, 테마 등을 설정하는 위젯
  • 주요 속성:
    • title: 앱의 제목
    • theme: 앱의 전반적인 색상 및 스타일을 지정한다. ColorScheme.fromSeed를 사용하여 색상 테마를 설정하고 있다.
    • home: 앱이 시작될 때 보여지는 기본 화면을 설정한다. 여기서는 MyHomePage()가 기본 화면으로 설정되었다.

2. Scaffold

  • 역할: Material 디자인의 기본 구조를 제공, 주로 앱의 레이아웃을 관리하는 위젯
  • 주요 속성:
    • appBar: 상단에 위치하는 앱 바를 설정 AppBar 위젯을 사용하여 제목을 설정
    • drawer: 앱의 왼쪽 메뉴를 설정하는 Drawer 위젯을 사용 메뉴 항목들을 나열하는 역할을 한다.
    • body: 앱 화면의 본문을 정의하는 곳으로, 여기에 주 화면이 들어간다.
    • floatingActionButton: 화면 오른쪽 하단에 떠 있는 액션 버튼을 설정하는 위젯, 여기서는 클릭 시 텍스트가 바뀌는 기능을 수행

3. StatefulWidget과 State

  • 역할: StatefulWidget은 상태를 가질 수 있는 위젯 이 위젯은 화면이 업데이트될 때마다 상태를 변경하고 UI를 다시 그릴 수 있다.
  • 구성:
    • MyHomePage는 StatefulWidget이다. 앱의 화면에서 상태가 변할 수 있는 부분이 있기 때문에, State를 관리하기 위해 StatefulWidget을 사용한다.
    • _MyHomePageState 클래스는 State<MyHomePage>를 상속받아서 MyHomePage의 상태를 관리합니다.

4. setState

  • 역할: setState()는 상태를 변경하여 UI를 업데이트하는 메서드이다. onPressed에서 호출하여 isClicked 값을 변경하고, 화면을 새로 그리도록 한다. 이를 통해 텍스트가 "버튼이 클릭되었습니다!"로 바뀌는 것이다.

5. FloatingActionButton

  • 역할: 화면 오른쪽 하단에 떠 있는 버튼 이 버튼은 중요한 작업을 나타낼 때 사용된다.
  • 주요 속성:
    • onPressed: 버튼이 클릭되었을 때 실행되는 콜백 함수 여기서는 버튼이 클릭되면 setState가 호출되어 화면이 업데이트된다.
    • child: 버튼에 포함될 위젯을 정의 여기서는 Icon(Icons.mouse)로 마우스 아이콘을 설정했다.

6. Column

  • 역할: 자식 위젯들을 세로로 배치하는 위젯 여기서는 텍스트와 버튼을 세로로 정렬하기 위해 사용되었다.
  • 주요 속성:
    • mainAxisAlignment: 자식 위젯들이 세로 방향으로 어떻게 배치될지를 정의 MainAxisAlignment.center는 자식들이 가운데 정렬되도록 한다.

7. Text

  • 역할: 화면에 텍스트를 표시하는 위젯 여기서는 isClicked 값에 따라 다른 텍스트("Hello World" 또는 "버튼이 클릭되었습니다!")를 보여준다.

8. SizedBox

  • 역할: 자식 위젯 사이에 일정한 크기의 공간을 추가하는 위젯 여기서는 버튼과 텍스트 사이에 20픽셀의 공간을 주기 위해 사용되었다.