Flutter + Dart/Flutter + Dart 공부
기본 위젯 학습 및 사용자 입력 처리 기초
GREEN나무
2025. 5. 13. 15:58
728x90
학습 목표
- 기본 위젯 학습 및 사용자 입력 처리 기초
- 간단한 UI 앱 개발 실습 (텍스트 출력, 버튼 클릭 이벤트 처리, 입력 값 활용 등)
학습 내용
1. Text: 텍스트 표시 및 스타일링
설명:
Text 위젯은 화면에 글자를 표시할 때 사용합니다. 글자의 폰트 크기, 두께, 색상 등을 설정할 수 있어 앱의 분위기에 맞게 스타일을 적용할 수 있습니다.
예시 코드:
Text(
'안녕하세요, Flutter!',
style: TextStyle(
fontSize: 24, // 글자 크기
fontWeight: FontWeight.bold, // 굵기 조절
color: Colors.blue, // 글자 색상
),
)
2. Image: 이미지 표시 (assets, network)
설명:
Image 위젯은 앱 내에 이미지를 표시할 때 사용합니다. 로컬 에셋 파일 또는 네트워크 상의 이미지를 불러올 수 있습니다.
예시 코드:
// 로컬 에셋 이미지 사용 (pubspec.yaml에 assets 등록 필요)
Image.asset('assets/images/flutter_logo.png'),
// 네트워크 이미지 사용
Image.network('https://flutter.dev/images/flutter-logo-sharing.png'),
3. Icon: 아이콘 표시
설명:
Icon 위젯은 Flutter에서 제공하는 여러 아이콘을 화면에 표시할 때 사용합니다. 크기나 색상을 조절하여 다양한 UI 요소와 조화를 이루게 할 수 있습니다.
예시 코드:
Icon(
Icons.favorite, // Flutter 내장 아이콘 사용
color: Colors.red,
size: 50, // 아이콘 크기
)
4. TextField: 사용자로부터 텍스트 입력 받기
설명:
TextField 위젯은 사용자가 텍스트를 입력할 수 있는 필드입니다. 입력 값의 변화 감지에는 onChanged 콜백을, 입력 값을 관리하고 싶을 때는 TextEditingController를 사용합니다.
예시 코드:
// 먼저 State 클래스 내에 컨트롤러를 선언합니다.
final TextEditingController _textController = TextEditingController();
// 페이지 내에서 TextField 사용
TextField(
controller: _textController,
decoration: InputDecoration(
labelText: '제목을 입력하세요',
border: OutlineInputBorder(),
),
onChanged: (text) {
print('입력 중인 텍스트: $text');
},
),
5. ElevatedButton: 클릭 가능한 버튼
설명:
ElevatedButton 위젯은 사용자가 클릭할 수 있는 버튼을 제공합니다. 버튼을 클릭하면 onPressed 콜백 내에 정의된 로직이 실행됩니다.
예시 코드:
ElevatedButton(
onPressed: () {
print('버튼이 클릭되었습니다.');
},
child: Text('저장'),
),
간단한 UI 구현 실습
목표:
- 제목과 본문을 입력할 수 있는 두 개의 TextField 배치
- 저장 버튼을 눌렀을 때 입력된 값이 콘솔에 출력되도록 구현 (실제 저장 로직은 차후 구현)
예시 코드:
import 'package:flutter/material.dart';
// 앱 실행 시 TodoApp 위젯을 루트로 사용
void main() => runApp(TodoApp());
// TodoApp은 전체 앱의 뼈대를 구성하는 StatelessWidget
class TodoApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '할 일 목록 앱', // 앱의 이름
home: TodoScreen(), // 첫 화면으로 TodoScreen 설정
);
}
}
// 상태를 가질 수 있는 Todo 화면 위젯
class TodoScreen extends StatefulWidget {
@override
_TodoScreenState createState() => _TodoScreenState();
}
// TodoScreen의 상태 클래스
class _TodoScreenState extends State<TodoScreen> {
// 사용자가 입력한 텍스트를 가져오기 위한 컨트롤러
final TextEditingController todoController = TextEditingController();
// "추가하기" 버튼 클릭 시 실행되는 함수
void _addTodo() {
// 입력한 텍스트를 콘솔에 출력
print('할 일: ${todoController.text}');
// 실제 구현에서는 이곳에 할 일을 목록에 추가하는 로직이 들어갈 수 있음
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('할 일 목록')), // 앱 상단의 제목 바
body: Padding(
padding: const EdgeInsets.all(16.0), // 전체 패딩
child: Column(
children: [
// 텍스트 입력 필드
TextField(
controller: todoController, // 입력값을 추적하는 컨트롤러
decoration: InputDecoration(
labelText: '할 일을 입력하세요', // 입력 필드 라벨
border: OutlineInputBorder(), // 테두리 스타일
),
),
SizedBox(height: 16), // 위젯 간 간격
// 할 일을 추가하는 버튼
ElevatedButton(
onPressed: _addTodo, // 버튼 클릭 시 _addTodo 함수 실행
child: Text('추가하기'),
),
],
),
),
);
}
}
1. 일기 작성 화면
2. 일정 추가/수정 화면
3. 할 일 목록 화면