Flutter가 또 한 번의 의미 있는 업데이트, 3.32 버전을 선보였습니다! 이번 릴리스는 개발 속도를 높이고 앱의 완성도를 한층 끌어올릴 수 있는 강력한 기능들로 가득합니다. 특히, 많은 개발자들이 기다려온 웹 핫 리로드(실험적) 지원, iOS 네이티브의 느낌을 그대로 살린 Cupertino 스쿼클(Squircle), 그리고 Firebase와의 더욱 강력해진 AI 통합 기능이 주목할 만합니다.
총 156명의 기여자가 참여하여 1024개의 커밋을 통해 완성된 Flutter 3.32의 주요 업데이트 내용을 자세히 살펴보겠습니다.
✨ Flutter 3.32 주요 하이라이트
- 웹 (Web):
- 웹 핫 리로드 (실험적): 드디어 웹에서도 핫 리로드를 사용할 수 있게 되었습니다! --web-experimental-hot-reload 플래그를 통해 활성화할 수 있으며, VS Code 및 DartPad에서도 지원됩니다. Flutter 개발자들의 오랜 요청사항 중 하나였던 만큼, 많은 기대를 모으고 있습니다. (버그 발견 시 적극적인 제보 부탁드립니다!)
- 프레임워크 (Framework):
- Material 라이브러리의 로직을 위젯 라이브러리로 이전하는 작업이 지속됩니다.
- 새로운 Expansible 위젯 (Material의 ExpansionTile 기반)과 커뮤니티 기여자의 RawMenuAnchor 위젯 (Material의 MenuAnchor 기반)이 추가되어, 다양한 디자인 언어를 일관성 있게 지원하고 코드 공유를 개선합니다.
- Cupertino (iOS 스타일):
- 스쿼클 (Squircles) 지원: iOS 디자인의 핵심인 '스쿼클(Squircle)' 형태를 지원하여 더욱 부드럽고 자연스러운 곡선 UI 표현이 가능해졌습니다. RoundedSuperellipseBorder, ClipRSuperellipse 등의 API를 통해 사용할 수 있으며, CupertinoAlertDialog 와 CupertinoActionSheet에 이미 적용되었습니다. (현재 iOS/Android에서만 지원, 지속적인 최적화 진행 중)
- 시트 (Sheet) 개선: Android에서 시트가 열릴 때 시스템 UI 테마 설정 오류 수정, 네비게이션 바 높이 조정으로 인한 콘텐츠 잘림 문제 해결 등 다양한 이슈가 개선되었습니다. CupertinoSheetRoute에 enableDrag 인수가 추가되어 시트의 드래그 앤 드롭 해제 동작을 비활성화할 수 있습니다.
- 네비게이션 바 (Navigation bars) 개선: CupertinoSliverNavigationBar.search의 검색 뷰 열기/닫기 애니메이션 및 아이콘 정렬이 개선되었고, CupertinoNavigationBar 또는 CupertinoSliverNavigationBar를 사용하는 경로 간 전환이 최신 iOS 전환과 일치하도록 업데이트되었습니다.
- Material (Android 스타일):
- CarouselController에 animateToIndex 메서드가 추가되어 인덱스 기반의 부드러운 캐러셀 탐색이 가능해졌습니다.
- TabBar에 onHover 및 onFocusChange 콜백이 추가되어 다양한 상태에 따른 위젯 모양 제어가 용이해졌습니다.
- SearchAnchor 및 SearchAnchor.bar에 각각 viewOnOpen 및 onOpen 콜백이 포함되어 열기/닫기 이벤트를 더 잘 관찰하고 처리할 수 있습니다.
- CalendarDatePicker가 calendarDelegate를 수락하여 그레고리력 이외의 사용자 정의 달력 로직 통합을 지원합니다.
- 그 외 showDialog 등에 animationStyle 추가, Divider에 borderRadius 추가 등의 소소한 개선 사항이 있습니다.
- DropdownMenu 너비 관련 문제, RangeSlider 호버 시 오버레이 문제, Slider 썸네일이 트랙 끝에 도달하지 못하는 문제 등 여러 버그가 수정되었습니다.
- 접근성 (Accessibility):
- 시맨틱 트리 컴파일 시간이 약 80% 단축되어 웹에서는 프레임 시간이 30% 개선되었습니다.
- 새로운 SemanticsRole API를 통해 UI 요소의 접근성 역할을 더욱 세밀하게 제어할 수 있습니다 (현재 웹에서 사용 가능).
- 스크린 리더 경험 향상, 웹 포커스 탐색 부드러움 개선, Android TalkBack의 링크 인식 개선, Windows 고대비 모드 지원, iOS Voice Control 경험 개선 등 다양한 접근성 향상이 이루어졌습니다.
- 텍스트 입력 (Text Input):
- iOS 시스템 텍스트 선택 컨텍스트 메뉴가 도입되었습니다.
- Autocomplete 위젯의 옵션 레이아웃이 OverlayPortal로 이전되어 성능이 향상되고 레이아웃 버그가 수정되었습니다.
- 텍스트 필드에서 onTapUpOutside 동작을 사용자 정의할 수 있게 되었습니다.
- FormField의 오류 메시지로 텍스트뿐만 아니라 모든 위젯을 생성할 수 있습니다.
- 웹에서 선택 가능한 텍스트의 버그가 줄고 성능이 향상되었습니다.
- 데스크톱 (Desktop):
- 다중 창 지원 진행 (Canonical 기여): 접근성, 앱 생명주기 알림, 포커스, 키보드 이벤트, 텍스트 입력, 마우스 이벤트 등 다중 창 환경에서의 여러 기능 오류가 수정되었습니다. Dart FFI가 Flutter 엔진과 직접 통신할 수 있는 기능이 추가되어 향후 Flutter의 윈도잉 API 기반을 마련했습니다. Linux에서는 래스터 스레드가 도입되어 여러 창이 있더라도 부드러운 프레임 처리량을 보장합니다.
- 데스크톱 스레드 병합 (Canonical 기여): Windows 및 macOS에서 UI 스레드와 플랫폼 스레드를 병합할 수 있게 되어, Dart FFI를 사용하여 플랫폼 스레드에서 호출해야 하는 네이티브 API와 상호 운용할 수 있습니다 (예: Windows에서 win32 API로 앱 창 크기 조절). 향후 Windows 및 macOS에서 기본으로 활성화될 예정입니다.
- iOS:
- 사용자 정의 액션이 없는 기본 텍스트 필드의 경우, 다른 앱에서 콘텐츠를 붙여넣을 때 더 이상 확인 대화상자가 표시되지 않아 사용자 경험이 향상되었습니다 (기본 활성화).
- Android:
- Gradle 툴링 Kotlin으로 재작성: Flutter의 Gradle 플러그인이 Groovy에서 Kotlin으로 전환되어 코드베이스 기여 용이성, 단위 테스트 도입, 빌드 프로세스 안정성이 향상될 것으로 기대됩니다.
- Scribe / 스타일러스 지원: Android 14 이상에서 스타일러스 펜을 사용하여 텍스트 필드에 직접 필기 입력이 가능해졌습니다 (TextField.stylusHandwritingEnabled 또는 CupertinoTextField.stylusHandwritingEnabled 매개변수로 제어).
- 엔진 (Engine - Impeller):
- Android Impeller 업데이트: Android API 레벨 28 (Android 9) 이하 기기에서는 안정성을 위해 레거시 Skia 렌더러를 사용하며, API 레벨 29 (Android 10) 이상 기기에서는 Impeller가 계속 기본 렌더러입니다. 에뮬레이터, 일부 MediaTek 기기 등 특정 환경에서는 Vulkan 대신 OpenGLES 백엔드를 사용하도록 조정되었습니다. Impeller 비활성화 옵션은 향후 안정 버전에서 제거될 예정입니다.
- 기타 Impeller 업데이트: 텍스트 애니메이션이 더 부드러워지고 지터가 감소했으며 (고해상도 글리프, 부동 소수점 계산 오류 수정), 원뿔 곡선 직접 테셀레이션, 부분 재그리기 최적화, 블러 속도 개선, 180도 회전된 텍스트 방향 수정 등 다양한 충실도 및 성능 개선이 이루어졌습니다.
- 개발 도구 및 IDE (DevTools and IDEs):
- [신규] Flutter Property Editor: VS Code 사이드바 패널 또는 Android Studio/IntelliJ 도구 창에서 위젯 속성을 쉽게 편집하고 문서를 읽을 수 있는 새로운 도구입니다.
- DevTools 개선: 네트워크 화면 오프라인 지원, 검토 기록 관련 버그 수정, CPU 프로파일러 및 메모리 화면 데이터 개선 등 다양한 기능 향상이 있었습니다. DevTools 자체의 성능 및 메모리 사용량도 개선되었습니다.
- Analyzer 개선: "doc imports" (실제 import 없이 문서 주석에서 외부 요소 참조) 기능 추가, 빠른 수정, 어시스트, 이름 변경 기능 등이 향상되었습니다.
- Android Studio의 Gemini, Dart/Flutter 완벽 지원: 이제 Android Studio 내에서 Gemini의 강력한 AI 기능을 활용하여 Dart 및 Flutter 앱 개발을 더 빠르고 쉽게 할 수 있습니다.
- MCP (Model Context Protocol) 지원 예정: Dart 및 Flutter의 MCP 지원이 진행 중이며, 이를 통해 더욱 정확하고 관련성 높은 코드 생성 및 복잡한 작업 처리가 가능해질 것으로 기대됩니다.
- AI와 함께 빌드하기 (Build with AI):
- Firebase AI Logic 소개: 기존 Vertex AI in Firebase가 발전하여 firebase_ai 패키지 하나로 Gemini API 제공자(Vertex AI 및 Gemini Developer API 무료 티어 포함) 모두에 접근할 수 있게 되었습니다. 서버 측 SDK 없이 Flutter 앱에서 직접 Gemini 및 Imagen 모델 사용이 가능합니다.
- AI Monitoring 대시보드: Firebase 콘솔에 새로 추가된 AI Monitoring 대시보드를 통해 Gemini API 사용량에 대한 상세하고 실행 가능한 인사이트(소비 패턴, 성능 지표, 잠재적 문제 등)를 얻고 디버깅에 활용할 수 있습니다.
⚠️ 주요 변경 사항 및 지원 중단 (Breaking Changes and Deprecations)
- Android 접근성 알림: API 36부터 시맨틱 알림 이벤트가 폐기될 예정입니다. SemanticProperties.liveRegion을 구성하여 "polite" 암시적 알림을 사용하는 것이 권장됩니다. (자세한 내용은 공식 문서 참조)
- 6개 패키지 지원 중단: flutter_markdown, ios_platform_images, css_colors, palette_generator, flutter_image, flutter_adaptive_scaffold 패키지 지원이 중단됩니다. 각 이슈에서 대안을 확인하세요.
- iOS 및 macOS 최소 버전 변경 예정: 다음 안정 릴리스부터 iOS 12 및 macOS 10.14 (Mojave) 지원이 중단되고, 최소 iOS 13 및 macOS 10.15 (Catalina)를 대상으로 합니다.
- 기타 변경 사항: ExpansionTileController가 Widgets 레이어의 새로운 ExpansibleController로 대체, SelectionChangedCause.scribble이 SelectionChangedCause.stylusHandwriting으로 이름 변경, ThemeData.indicatorColor가 TabBarThemeData.indicatorColor로 변경, 일부 테마 타입 마이그레이션 필요, SpringDescription 공식 수정 등. 자세한 내용은 공식 브레이킹 체인지 페이지를 참고하고, dart fix 명령으로 일부 변경 사항을 자동 마이그레이션할 수 있습니다.
'Flutter-플러터 > 플러터 공부' 카테고리의 다른 글
ReorderList를 사용시에 고려해야 할 것, 가계부앱 (0) | 2025.04.06 |
---|---|
flutter 3.27 버전 local notification 앱 종료 오류 (1) | 2025.02.15 |
코딩 독학 2년 개발자가 적어보는 앱 개발하기 전에 꼭 고민해야 할 것 (6) | 2024.11.17 |
코드 리팩토링 중 (1) (2) | 2024.10.06 |
Fltutter - flutter local notification not working in release (0) | 2024.08.08 |