오늘도 공부
Flutter 3.32 업데이트 내용 본문
https://medium.com/flutter/whats-new-in-flutter-3-32-40c1086bab6e
What’s new in Flutter 3.32
Hot reload on web, native fidelity, and deeper integrations
medium.com
📋 목차 미리보기
- Flutter 3.32란?
- 웹(Web)
- 웹에서 핫 리로드 실험 기능
- VS Code와 터미널에서 사용하는 법
- DartPad에서 핫 리로드 적용
- 플랫폼별 주요 업데이트
- Framework: Expansible, RawMenuAnchor
- Cupertino: Apple 스타일 “squircle (곡면 스퀴클)”
- Material: CarouselController, TabBar, SearchAnchor 등
- 접근성과 텍스트 입력 개선
- 멀티 윈도우 & 데스크탑 스레드 병합
- iOS & Android 플랫폼별 변화
- iOS 붙여넣기 개선
- Android Kotlin 기반 Gradle 리팩토링
- 스타일러스 필기(안드로이드)
- 엔진(Impeller) 향상
- DevTools 및 IDE 개선
- Flutter Property Editor
- DevTools 전반 성능 향상
- Dart Analyzer 개선
- AI 연계 기능
- Firebase AI Logic 출시
- Firebase AI Monitoring 대시보드
- 파괴적 변경점 및 비권장 기능
- 마무리 및 업그레이드 방법
1. Flutter 3.32란? ✨
2025년 5월 20일, Flutter 3.32 버전이 정식 릴리즈되었습니다.
이번 업데이트는 웹 핫 리로드, Apple iOS 고유 UI 스타일 구현, 그리고 Firebase를 통한 AI 연계 기능 등 개발자 생산성과 앱 경험을 높이는 핵심 기능들이 대거 추가됐습니다. 개발자 커뮤니티의 활발한 기여로 무려 1024개의 커밋이 포함되었고, 첫 기여자 39명도 참여했답니다 (Medium).
2. 웹(Web)
🔁 웹 핫 리로드 (실험 기능)
드디어 웹에서도 핫 리로드를 사용할 수 있게 되었어요! Flutter 트래커에서 두 번째로 많은 투표를 받은 기능이기도 한데요.
현재 실험 단계이지만, 여러분의 프로젝트에서 직접 사용해보시고 피드백 남겨 주세요. 문제는 GitHub Dart 리포에서 이슈를 제보할 수 있습니다 (Medium).
✅ 사용 방법
VS Code에서 실행하기
launch.json에 아래 설정을 추가하세요:
{
"name": "Flutter for web (hot reloadable)",
"type": "dart",
"request": "launch",
"program": "lib/main.dart",
"args": ["-d", "chrome", "--web-experimental-hot-reload"]
}
또한 VS Code 설정에서 "Dart: Flutter Hot Reload On Save"를 활성화하면 저장 시 자동 리로드도 가능해요 (Medium).
터미널에서 실행하기
아래처럼 실행할 수 있습니다:
flutter run -d chrome --web-experimental-hot-reload
실행 중 “r”을 누르면 핫 리로드, “R”을 누르면 핫 리스타트가 가능합니다 (Medium).
DartPad에서 사용하기
Flutter가 감지되는 애플리케이션에서 Reload 버튼이 활성화됩니다. 기본 카운터 앱 샘플로도 테스트할 수 있어요 (Medium).
3. 플랫폼별 주요 업데이트
🧱 Framework: Expansible, RawMenuAnchor 추가
- Expansible 위젯: 확장/수축 애니메이션을 간편하게 구현할 수 있는 기반 위젯으로, 기존 ExpansionTile과 비슷하나 더 유연하답니다.
- RawMenuAnchor: 메뉴의 외형을 직접 제어할 수 있는 비스타일 위젯으로, Material 스타일 MenuAnchor의 기반 역할도 합니다 (Medium, Medium).
이러한 구조 리팩토링은 Cupertino와 Material 간 UI 통합과 코드 재사용성을 높여주죠.
🍎 Cupertino: 고품질 iOS 스타일 “Squircle” 도입
iOS 디자인 특징인 **rounded superellipse (squircle)**가 드디어 Flutter에 적용되었어요!
CupertinoAlertDialog와 CupertinoActionSheet가 이 곡면 스퀴클 모양으로 업데이트되었고, 아래 API들이 제공됩니다:
- RoundedSuperellipseBorder
- ClipRSuperellipse
- 저수준 API: Canvas.drawRSuperellipse, Canvas.clipRSuperellipse, Path.addRSuperellipse (Medium).
현재는 iOS·Android에서만 지원되며, 향후 최적화도 계속될 예정입니다.
또한 Cupertino 시트 관련 버그가 해결되고, enableDrag 인자를 통해 바텀 시트 드래그-다운 해제도 제어 가능해졌어요 (Medium).
🛎 Material: 다양한 편의 기능 업그레이드
- CarouselController: animateToIndex 메서드로 인덱스 기반 매끄러운 내비게이션 가능
- TabBar: onHover, onFocusChange 콜백 추가
- SearchAnchor: viewOnOpen, onOpen 콜백 적용
- CalendarDatePicker: calendarDelegate로 음력, 대체 달력 시스템 등 자유로운 날짜 로직 삽입 가능
- showDialog, DialogRoute에 animationStyle 추가
- Divider의 borderRadius 설정 가능
- 버그 수정: DropdownMenu의 폭 관련, RangeSlider 호버 오버레이 개선 등 (Medium).
4. 접근성 & 텍스트 입력 개선
🌐 접근성 (Accessibility)
- 시맨틱 트리 컴파일 성능 향상: 최대 80% 개선, 웹에서는 프레임 타임 30% 감소 (Medium).
- 세밀한 SemanticsRole API: 위젯 트리 전체에 역할 부여 가능 (현재 웹 플랫폼 지원) (Medium).
- 기타: 스크린리더, 슬라이더, 드롭다운 등 폼 요소의 접근성 향상, Android TalkBack의 링크 인식 개선, Windows 웹 강제 색상 모드 대응 등 (Medium).
⌨ 텍스트 입력
- iOS에서는 붙여넣기 시 확인 다이얼로그 생략
- Autocomplete 위젯에 OverlayPortal 적용으로 성능 및 레이아웃 안정화
- onTapUpOutside 커스터마이징 가능
- FormField에서 에러 메시지를 커스텀 위젯으로 지정할 수 있게 변화
- 웹 및 텍스트 선택 기능 안정화 및 성능 향상 (Medium).
5. 멀티 윈도우 & 데스크탑 스레드 병합
- Canonical 기여로 Linux 데스크탑에서 멀티 윈도우 지원 크게 진전
- Windows/macOS: UI와 플랫폼 스레드를 병합해 FFI로 윈도우 크기 조정 등 API 호출 가능
- Windows: wWinMain에 UIThreadPolicy::RunOnPlatformThread 추가
- macOS: Info.plist에 <key>FLTEnableMergedPlatformUIThread</key><true/> 삽입
- 향후 기본 활성화 예정 (Medium).
6. iOS & Android 플랫폼별 변화
🍏 iOS
별도 커스텀 메뉴 없는 기본 텍스트 필드에서는 붙여넣기 시 확인 다이얼로그 없이 바로 붙여넣기 가능해졌어요 (커스텀 메뉴 사용하는 경우는 아직 미지원) (Medium).
🤖 Android
- Gradle 플러그인 Kotlin으로 리팩토링
- Groovy 기반에서 Kotlin으로 전환하면서 코드의 내성 및 유지보수성·안정성 향상
- 기능적인 변화는 없으며, 문제가 있다면 이슈 제보 가능 (Medium).
- 스타일러스 필기 입력 지원 (Scribe/Stylus)
- Android 14 이상에서 스타일러스로 텍스트필드에 필기 입력 가능
- 일부 제스처는 아직 개발 중이며, 필요시 TextField.stylusHandwritingEnabled로 비활성화 가능 (Medium).
7. 엔진 개선 (Impeller)
- Android 9(API 28) 이하 기기는 안정성을 위해 여전히 Skia 렌더러 사용
- Android 10(API 29) 이상은 Impeller 기본 지원
- 특정 기기(Vulkan 미지원 기기 등)는 GLES로 폴백 (Medium).
- 텍스트 렌더링 품질 향상: Glyph atlas 해상도 업그레이드, 부드러운 애니메이션 구현
- 렌더링 최적화 작업: Conic 곡선 직접 테셀레이션, 페인트 메모리 할당 최소화, Blur 속도 개선, 180도 회전 텍스트 방향 문제 해결 등 (Medium).
8. DevTools 및 IDE 개선
- Flutter Property Editor 도구 추가: VS Code와 IntelliJ/Android Studio에서 위젯 속성 쉽게 조정 및 문서 확인 가능 (Medium).
- DevTools 전반 개선:
- 네트워크 탭 오프라인 지원
- Deep Links 툴, CPU·메모리 Profiler, Inspector 등 여러 버그 수정
- 더 빠르고 안정적인 성능 제공 (Medium).
- Dart Analyzer 개선:
- doc imports 도입으로 문서 주석에서 외부 요소 참조 가능
- 퀵 픽스, 리네이밍, Assist 기능 전반 성능 향상 (Medium).
- Android Studio 내 Gemini 지원 강화
- Flutter와 Dart 개발에 Gemini AI 기능이 통합되어 IDE 내에서 AI 기반 개발 보조 가능 (Medium).
- Model Context Protocol (MCP) 지원 준비 중:
- Dart MCP SDK와 MCP 서버 도구 개발 중
- 코드 생성, 의존성 관리, 런타임 오류 해결 등 AI 기반 자동화가 가능해집니다 (Medium).
9. AI 연계 기능 추가 🚀
🔍 Firebase AI Logic
- 기존 firebase_vertexai 패키지를 확장한 firebase_ai 패키지로 변경
- Gemini API뿐 아니라 Vertex AI 모델까지 하나의 SDK로 사용할 수 있습니다
- 서버 없이 모바일 앱에서 바로 AI 기능 (텍스트 생성, 이미지 생성 등)을 호출 가능 (Medium).
📊 AI Monitoring Dashboard
- Firebase 콘솔에 AI API 사용 현황을 시각화해서 보여주는 AI Monitoring 대시보드 추가
- 소비 패턴, 성능 지표, 오류 탐지 등을 통해 운영과 최적화에 활용할 수 있답니다 (Medium).
10. 파괴적 변경점 및 비권장 기능
- Android 접근성 announcement 비권장: Android API 36부터 SemanticProperties.liveRegion 사용 권장 (Medium).
- 다음 6개 패키지 지원 종료: flutter_markdown, ios_platform_images, css_colors, palette_generator, flutter_image, flutter_adaptive_scaffold (Medium).
- iOS 12, macOS 10.14 지원 종료 예정: Flutter 차기 버전에서 최소 iOS 13 / macOS Catalina 이상 필요.
- 기타: ExpansionTileController → ExpansibleController 교체, API 이름 일부 변경, Material Theme API 구조 변경, SpringDescription 물리 공식 수정 등 (Medium, Flutter 문서).
자세한 마이그레이션 가이드는 Flutter 공식 브레이킹 변경점 페이지와 dart fix 사용을 추천합니다 (Flutter 문서).
11. 마무리 & 업그레이드 방법
Flutter 3.32는 웹 핫 리로드, 플랫폼 UI 정교화, 멀티 윈도우 지원, AI 통합 도구 등 개발생산성과 사용자 경험을 극대화하는 주요 기능들을 담고 있습니다.
업그레이드 방법은 간단해요:
flutter upgrade
또는 Flutter 2.x 사용자라면 채널 전환 이후 업그레이드 후 시작하시면 됩니다.
'스터디 > Flutter' 카테고리의 다른 글
Flutter 면접 인터뷰 예상 질문 115개 (3) | 2025.04.07 |
---|---|
Flutter cached_network_image 만료 기간 설정 (0) | 2025.03.18 |
Flutter의 IntrinsicWidth 위젯 이해 및 사용법 (0) | 2025.03.17 |
Figma Mcp server + Cursor를 이용해서 Flutter 페이지 클론하기 (0) | 2025.03.10 |
Flutter MVVM 아키텍쳐 추천(Riverpod과 Freezed) (0) | 2025.02.17 |