4장 :: Dart 3.0 신규 문법
Dart 3.0의 버전이 발표되면서 문법이 새로 추가됨. Flutter 3.0 이상은 Dart 3.0을 기준으로 활용하므로 반드시 학습 필요.
1. 레코드 (Record)
1.1 포지셔널 파라미터
void main() {
(String, int) minji = ('민지', 20);
print(minji); // ('민지', 20)
print(minji.$1); // 민지
print(minji.$2); // 20
}
1.2 네임드 파라미터
void main() {
({String name, int age}) minji = (name: '민지', age: 20);
print(minji); // (name: 민지, age: 20)
print(minji.name); // 민지
print(minji.age); // 20
}
2. 구조 분해 (Destructuring)
2.1 리스트 구조 분해
void main() {
final [minji, haerin] = ['민지', '해린'];
print(minji); // 민지
print(haerin); // 해린
}
2.2 스프레드 연산자
void main() {
final numbers = [1, 2, 3, 4, 5, 6, 7, 8];
final [x, y, ..., z] = numbers;
print(x); // 1
print(y); // 2
print(z); // 8
}
2.3 맵 구조 분해
void main() {
final minjiMap = {'name': '민지', 'age': 19};
final {'name': name, 'age': age} = minjiMap;
print('name: $name');
print('age: $age');
}
2.4 클래스 구조 분해
class Idol {
final String name;
final int age;
Idol({required this.name, required this.age});
}
void main() {
final minji = Idol(name: '민지', age: 19);
final Idol(name: name, age: age) = minji;
print(name); // 민지
print(age); // 19
}
3. switch 문법 개정
3.1 표현식으로 사용
void main() {
String dayKor = '월요일';
String dayEnglish = switch (dayKor) {
'월요일' => 'Monday',
'화요일' => 'Tuesday',
'수요일' => 'Wednesday',
'목요일' => 'Thursday',
'금요일' => 'Friday',
'토요일' => 'Saturday',
'일요일' => 'Sunday',
_ => 'Not Found',
};
print(dayEnglish); // Monday
}
3.2 패턴 매칭
void switcher(dynamic anything) {
switch (anything) {
case 'aaa':
print('match: aaa');
break;
case [1, 2]:
print('match: [1, 2]');
break;
case [_, _, _]:
print('match: [_, _, _]');
break;
case [int a, int b]:
print('match: [int $a, int $b]');
break;
case (String a, int b):
print('match: (String: $a, int: $b)');
break;
default:
print('no match');
}
}
3.3 Exhaustiveness checking
void main() {
bool? val;
switch (val) {
case true:
print('true');
break;
case false:
print('false');
break;
case null:
print('null');
break;
}
}
3.4 when 절
void main() {
(int a, int b) val = (1, -1);
switch (val) {
case (1, _) when val.$2 > 0:
print('(1, 양수)');
break;
default:
print('default');
}
}
4. 클래스 제한자
// base class
base class Parent {}
// final class
final class FinalParent {}
// interface class
interface class InterfaceParent {}
// sealed class
sealed class SealedParent {}
// mixin class
mixin class MixinExample {}
2.1 :: 플러터 입문하기
Hello Flutter 만들기
- 용량 부족으로 안 쓰는 폰을 에뮬로 대신 사용해볼까 고민 중... (2년 전엔 됐었음!)
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: Text(
'Hello Code Factory',
),
),
),
),
);
}
Text와 Center 위젯을 사용하여 UI 출력
- Text 위젯으로 텍스트를 출력하고, Center 위젯으로 가운데 정렬할 수 있다.
Android/iOS 실기기 또는 에뮬레이터 실행
- Android: USB 또는 무선 연결, AVD 설정 필요
- iOS: MacOS 필요, Xcode 설정 및 개발자 모드 필요
'EDOC > Flutter 스터디 (2025-1)' 카테고리의 다른 글
| [3.4 ~ 3.6] 디지털 주사위 ~ 영상 통화 (1) | 2025.05.21 |
|---|---|
| [3.1 ~ 3.3] 블로그 웹 앱 콜백 함수, 웹뷰, 네이티브 설정 ~ 만난 지 며칠 U&I 상태 관리, CupertinoDatePicker, Dialog, DateTime (0) | 2025.05.20 |
| [2.6 ~ 2.7] 기본 위젯 알아보기 ~ 앱을 만들려면 알아야 하는 그 밖의 지식 (0) | 2025.04.12 |
| [1.3] 다트 비동기 프로그래밍 (0) | 2025.03.29 |
| [1.1 ~ 1.2] 다트 입문하기 / 다트 객체지향 프로그래밍 (0) | 2025.03.22 |