본문 바로가기
[IT] 이야기/[개발] 이야기

Flutter 3.47 업데이트 핵심 정리|Material·Cupertino 분리, 데스크톱 Impeller 기본 적용

by 헤이나우
반응형

Flutter 3.47은 UI 패키지 구조부터 데스크톱 렌더링, Apple 플랫폼 대응까지 꽤 큰 변화가 들어간 버전이다. 특히 Material·Cupertino 분리와 Impeller 기본 적용은 기존 프로젝트를 운영하는 개발자라면 확인할 필요가 있다. (Flutter)

Flutter 3.47에서 먼저 볼 변화

Flutter 3.47은 2026년 8월 12일 공개됐다. 이번 버전에서 눈에 띄는 변화는 다음과 같다. (Flutter)

항목Flutter 3.47 변화

Material·Cupertino 독립 패키지 material_ui, cupertino_ui 1.0 공개
데스크톱 렌더러 macOS·Windows·Linux에서 Impeller 기본 적용
Widget Preview Stable로 전환
Apple 플랫폼 iOS 최소 15, macOS 최소 12로 상향
Flutter Web Wasm 기본 적용을 위한 전환 작업 진행
Windows·Linux Flutter flavors 지원
GenUI genui 0.10.0 및 a2ui_core 추가
Android Java 17, AGP 9.1.0 등 검증된 의존성 조합 공개

이번 업데이트는 새 위젯 몇 개가 추가된 수준이라기보다, Flutter SDK와 디자인 시스템의 결합을 줄이고 각 플랫폼의 최신 환경에 맞춰 구조를 정리하는 변화에 가깝다. (Flutter)

Material과 Cupertino가 Flutter SDK에서 분리되기 시작했다

Flutter 3.47에서 가장 큰 변화 중 하나는 Material과 Cupertino UI가 각각 독립 패키지로 제공되기 시작했다는 점이다.

새 패키지는 다음과 같다.

  • material_ui
  • cupertino_ui

두 패키지는 pub.dev에서 1.0 버전으로 공개됐으며, Flutter 3.47에서는 아직 기존 SDK 내 Material·Cupertino 라이브러리도 함께 제공된다. 즉, 이번 버전에서 당장 기존 코드를 전부 변경해야 하는 것은 아니며 새 패키지 사용은 현재 opt-in 방식이다. (Flutter)

분리의 가장 큰 장점은 Flutter SDK 전체를 업데이트하지 않아도 Material이나 Cupertino 위젯 업데이트를 별도로 받을 수 있다는 점이다. Flutter 측은 새로운 독립 패키지의 업데이트를 주 단위로 배포하는 방향을 제시하고 있다. (Flutter)

마이그레이션은 다음 명령으로 진행할 수 있다.

dart fix --apply --code=migrate_design_widgets

이 명령은 기존 package:flutter/material.dart, package:flutter/cupertino.dart import를 새로운 독립 패키지 구조에 맞게 변경한다. pubspec.yaml 자동 변경 과정에서 문제가 발생할 경우 flutter pub add material_ui 등을 직접 실행한 뒤 다시 dart fix --apply를 실행하는 방법도 공식 안내에 포함돼 있다. (Flutter)

현재 Flutter 팀 계획상 기존 SDK 내부의 디자인 라이브러리는 2026년 11월 예정인 다음 Fall stable 릴리스에서 정식 deprecated 처리될 예정이다. 따라서 패키지를 배포하는 개발자라면 애플리케이션 개발자보다 조금 더 일찍 영향을 확인해 두는 편이 좋다. (Flutter)

flutter_localizations 구조도 함께 바뀐다

Material과 Cupertino가 분리되면서 localization 구조도 같이 변경된다.

기존에는 flutter_localizations에서 Material과 Cupertino 관련 delegate를 가져왔다면, 새 구조에서는 각각의 UI 패키지가 관련 번역 문자열과 delegate를 담당한다. (Flutter)

예를 들어 Material 쪽에서는 다음과 같은 방식으로 설정할 수 있다.

import 'package:material_ui/material_ui.dart';

// ...

localizationsDelegates: GlobalMaterialLocalizations.delegates,

GlobalMaterialLocalizations.delegates에는 Cupertino와 Widgets 관련 delegate도 포함돼 있어 기존보다 설정이 단순해진다. (Flutter)

macOS·Windows·Linux에서 Impeller가 기본 렌더러로

Flutter 3.47부터는 macOS, Windows, Linux에서 Impeller가 기본 렌더러가 된다. (Flutter)

Impeller는 Flutter가 기존 Skia 중심 구조에서 벗어나기 위해 개발한 렌더링 엔진이다. macOS에서는 Metal, Windows와 Linux에서는 Vulkan 같은 최신 그래픽 API를 활용하며, 셰이더를 실행 중 동적으로 컴파일하는 대신 미리 준비하는 방식으로 초기 애니메이션에서 발생할 수 있는 shader compilation jank를 줄이는 데 초점이 맞춰져 있다. (Flutter)

문제가 발생하면 플랫폼별 설정을 통해 일시적으로 Impeller를 비활성화하고 Skia로 되돌릴 수 있지만, Flutter 측은 이 fallback 기능도 향후 제거할 예정이라고 안내했다. (Flutter)

macOS에서는 Wide Gamut Color 역시 기본 활성화됐다. (Flutter)

데스크톱 Flutter 기능도 계속 확대된다

Flutter 3.47에서는 데스크톱 지원이 꽤 많이 강화됐다.

Windows와 Linux에서 실험적인 popup window 지원이 추가돼 네이티브 스타일의 컨텍스트 메뉴나 도구 팔레트 같은 UI를 만들 수 있게 됐다. 플랫폼별 컨트롤러에서 windowHandle을 가져오는 기능도 제공돼 Windows의 HWND, macOS의 NSWindow, Linux의 GtkWindow 등 네이티브 창 객체와 연결하기 쉬워졌다. (Flutter)

또 Windows와 Linux에서도 Flutter flavors를 사용할 수 있다.

flutter build windows --flavor flavor_a
flutter build linux --flavor flavor_a

모바일에서 개발·운영·스테이징 빌드를 분리하듯 데스크톱 앱에서도 flavor별 asset이나 설정을 구분하기 쉬워진 셈이다. (Flutter)

Impeller 기반 데스크톱에서는 SDF(Signed Distance Function) 렌더링도 적용돼 텍스트와 벡터 곡선 표현을 개선했다. (Flutter)

Widget Preview가 Stable로 전환

Flutter Widget Preview는 Flutter 3.47에서 Stable 단계로 올라왔다.

앱 전체를 빌드하거나 실행하지 않고 개별 위젯을 바로 렌더링하면서 UI를 확인할 수 있는 기능이다. (Flutter)

Stable 버전에서는 .widget_preview/ 폴더를 활용한 로컬 캐싱으로 시작 시간을 줄였고, PreviewThemeData API를 이용한 다양한 테마 테스트도 지원한다. Web 위젯을 미리 볼 때 프로젝트의 web/ asset도 자동 동기화된다. (Flutter)

UI를 반복해서 수정하는 작업이 많은 프로젝트라면 체감하기 쉬운 개발 경험 개선이다.

iOS 최소 15, macOS 최소 12로 변경

Apple 플랫폼을 대상으로 개발한다면 지원 버전 변경을 확인해야 한다.

Flutter 3.47 이상 기준 최소 지원 버전은 다음과 같다. (Flutter)

플랫폼기존Flutter 3.47 이상

iOS 13 15
macOS 10.15 12

Flutter는 향후 Xcode 27, iOS 27, macOS 27 대응을 준비하면서 최소 OS 버전을 함께 상향했다. (Flutter)

특히 iOS 27 SDK에서는 UIKit 기반 앱에 UIScene lifecycle 사용이 필수가 된다. Xcode 27로 빌드하면서 UIScene을 적용하지 않은 앱은 시작 단계에서 실행되지 않을 수 있다. 일반적인 Flutter 앱은 CLI가 마이그레이션을 처리하지만, AppDelegate에 네이티브 코드를 직접 추가했거나 오래된 lifecycle에 의존하는 플러그인이 있다면 수동 점검이 필요하다. (Flutter)

Intel Mac 지원도 단계적으로 줄어든다

Flutter는 Apple Silicon 전환에 맞춰 Intel Mac 지원을 단계적으로 축소하고 있다.

Flutter 3.47에서는 Intel 하드웨어의 자동 테스트가 중단됐고, Intel Mac에서 빌드하거나 Intel과 ARM을 함께 대상으로 빌드할 경우 Flutter CLI에 경고가 표시된다. 현재는 경고지만 향후 릴리스에서는 오류로 변경될 예정이다. (Flutter)

ARM64 전용 macOS 앱으로 미리 전환하려면 다음 설정을 사용할 수 있다.

flutter config --enable-macos-arm64-only

(Flutter)

Flutter Web은 Wasm 기본 적용을 준비 중

Flutter 3.47에서 WebAssembly가 바로 기본값이 된 것은 아니다.

Flutter 팀은 Flutter Web에서 Wasm을 기본으로 활성화하는 방향으로 작업하고 있으며, 현재는 다음과 같이 직접 opt-in 해야 한다. (Flutter)

flutter build web --release --wasm

Wasm 전환을 준비하려면 기존 dart:html 사용 코드를 확인해야 한다. dart:html은 Wasm 환경에서 지원되지 않기 때문에 새로운 JS interop 방식과 package:web으로 옮겨야 한다. (Flutter)

대형 Web 앱을 위한 Wasm deferred loading도 실험적으로 추가됐다.

flutter build web --release --wasm --enable-wasm-deferred-loading

다만 이 기능은 현재 main channel에서 플래그를 사용해야 하는 실험 기능이므로 Stable 기능처럼 전제하고 적용하면 안 된다. (Flutter)

GenUI 0.10.0과 A2UI 관련 기능 추가

Flutter의 생성형 UI 관련 생태계도 업데이트됐다.

공식 발표 기준 genui 패키지는 0.10.0으로 업데이트됐으며, A2UI 프로토콜과 관련된 클래스들을 모아두는 새로운 a2ui_core 패키지가 추가됐다. 클라이언트 측 함수를 agent가 호출할 수 있는 기능도 지원해 검증이나 계산처럼 서버 왕복이 필요하지 않은 작업을 클라이언트에서 처리할 수 있도록 했다. (Flutter)

Android 개발 환경에서 확인할 버전

Flutter 3.47이 검증한 Android 의존성 조합도 공식 발표에 포함됐다.

항목Flutter 3.47 기준

Java 17 이상
Kotlin Gradle Plugin 2.4.0
Android Gradle Plugin 9.1.0
Gradle 9.3.1
compileSdk API 36
targetSdk API 36
minSdk API 24

Flutter 측은 향후 호환성을 위해 프로젝트에 API 버전을 직접 고정하기보다 flutter.compileSdkVersion, flutter.targetSdkVersion, flutter.minSdkVersion 같은 Flutter SDK 제공 변수를 사용하는 방식을 권장하고 있다. (Flutter)

자잘하지만 체감되는 개선도 많다

Flutter 3.47에는 플랫폼별 버그 수정도 포함됐다.

Android에서는 가상 키보드에서 Shift 같은 modifier key가 눌린 상태로 남는 문제가 수정됐다. Windows에서는 한국어 입력 시 caret 위치 문제도 해결됐다. (Flutter)

접근성 측면에서는 Android의 고대비 모드와 색상 반전 설정을 MediaQueryData.highContrast, MediaQueryData.invertColors에서 자동으로 감지할 수 있게 됐다. 텍스트 선택 핸들, selection menu 위치, SelectableRegion 관련 크래시 등 텍스트 선택 경험도 여러 부분 수정됐다. (Flutter)

ImageIcon에는 원래 이미지 색상을 보존하는 useOriginalColors: true 옵션이 추가됐으며, AnimatedCrossFade의 clipping 동작 지정과 ImageStreamListener의 이미지 오류 추적 기능도 개선됐다. (Flutter)

업데이트 전에 확인할 부분

Flutter 3.47은 단순 업데이트보다 기존 프로젝트 호환성을 먼저 보는 편이 좋다.

특히 다음에 해당한다면 바로 프로덕션 프로젝트부터 올리기보다 테스트가 필요하다.

  • iOS 13·14 지원이 필요한 앱
  • macOS 10.15·11 지원이 필요한 앱
  • Material·Cupertino import를 직접 많이 사용하는 패키지
  • AppDelegate에 iOS 네이티브 코드를 추가한 프로젝트
  • Intel Mac을 계속 지원해야 하는 macOS 앱
  • 데스크톱에서 Skia 의존 문제가 있는 프로젝트
  • dart:html을 많이 사용하는 Flutter Web 프로젝트

Flutter 3.47 자체 업데이트는 다음 명령으로 진행할 수 있다. (Flutter)

flutter upgrade

짧은 마무리

Flutter 3.47의 핵심은 UI 디자인 시스템의 SDK 분리 시작과 데스크톱 Impeller 기본 적용이다. 여기에 Apple 최소 지원 버전 변경, Widget Preview Stable, 데스크톱 flavor, Wasm 전환 준비까지 겹치면서 앞으로 Flutter의 구조가 어디로 가는지 꽤 분명하게 보여주는 릴리스가 됐다. (Flutter)

기존 앱을 운영 중이라면 특히 Material·Cupertino 마이그레이션과 iOS·macOS 최소 버전부터 확인한 뒤 3.47 적용 여부를 결정하는 편이 좋다.

반응형

댓글