Flutter 3.47, Material·Cupertino를 독립 패키지로 분리하고 데스크톱 Impeller 기본 적용
- Flutter 3.47은 Material UI와 Cupertino UI를 SDK 밖의 1.0 독립 패키지로 공개해, Flutter SDK 분기별 릴리스와 별개로 주 단위 수정과 컴포넌트 배포가 가능해짐
- 프로젝트는
dart fix --apply --code=migrate_design_widgets로 기존package:flutter/material.dart와cupertino.dartimport를 새 패키지로 바꿀 수 있으며, pubspec 갱신 오류 시flutter pub add material_ui를 먼저 실행해야 함 - SDK 내 기존 디자인 라이브러리는 11월 가을 안정판에서 정식 폐기 예정이며, 생태계 패키지를 옮길 경우 major release로 취급하라고 안내함
- MaterialUiCompatibilityBridge는 앱을 새
material_ui로 옮긴 뒤에도 의존 패키지가 기존 SDK import를 쓰는 과도기에 함께 동작하도록 지원함 flutter_localizations도 분리돼 Material·Cupertino 번역과 delegate가 각 패키지로 이동했으며,GlobalMaterialLocalizations.delegates가 Cupertino와 Widgets delegate까지 포함함
Hacker News opinions
Google 프로젝트 중 왜 Flutter/Dart만 계속 남는지 모르겠음. 지원은 약해 보이고 웹 생태계 안에서 어떤 방향인지도 불분명함.
구글 내부에서 Dart를 쓰고, AdWords 프런트엔드도 Dart로 다시 만들었다는 얘기가 있음. 유지할 만큼 투자하지만 언어를 적극 발전시키는지는 모르겠음.
구글 팀 몇 곳이 Flutter를 쓰니 iOS와 Android 전담 팀을 따로 둘 비용을 아낄 수 있음. Dart는 정적 타입, null safety, 패턴 매칭, 빠른 컴파일과 hot reload가 있고 FFI 오버헤드도 거의 없어서 Electron의 Node 프로세스 간 IPC보다 낫다고 봄.
Google Pay, NotebookLM, Family Link, Google One 같은 구글 앱이 Flutter로 만들어졌으니 내부 지지가 있는 듯함.
Flutter가 왜 '간신히 유지'라는 건지 모르겠음. 이미 전 플랫폼 렌더링 엔진을 교체했고 데스크톱 창 관리도 만들고 있으며, 안정된 플랫폼이라 추천할 만함.
구글 개발자 설문에서 Flutter 매각 가능성을 언급한 적은 있음.
Flutter는 웹 생태계 프로젝트가 아님. HTML을 다루지 않고 캔버스로 픽셀을 그리는 방식인데 그걸 웹이라고 보긴 어려움.
Material과 Cupertino를 분리하는 건 타당함. 분리가 끝났으니 그동안 멈췄던 업데이트도 다시 나왔으면 좋겠음.
Flutter UI 코드는 괄호 중첩이 너무 심해서 싫음.
중첩이 불편해질 정도면 보통 독립 위젯으로 뽑아낼 시점이라는 신호임. 큰 뷰보다 작고 재사용 가능한 컴포넌트로 나누게 됨.
Impeller가 웹에도 빨리 들어갔으면 함. GitHub 이슈를 보면 진행은 있는 듯하고, Svelte 아이디어도 일부 가져왔으면 좋겠음.
멀티윈도 지원을 기다렸음. 이제 만들고 싶던 간단한 데스크톱 사이드 프로젝트에 Flutter를 쓸 수 있을 듯함.
모바일에는 좋고 데스크톱도 괜찮지만 브라우저에서는 WASM 없이는 거의 못 쓸 수준임. 웹을 고치면 크로스플랫폼 GUI 선택지로 더 나아질 수 있음.
Flutter는 원래 전통적인 웹을 하려고 고르는 도구가 아님. 모바일과 다른 플랫폼 사이에서 컴포넌트를 공유하려는 크로스플랫폼 프레임워크임.
Dart가 JavaScript로 컴파일되는데 왜 WASM으로 옮기는지 의문임. Flutter는 2D 게임 엔진처럼 자체 렌더링해서 산술 연산이 많으니 WASM이 JS보다 효율적이라는 설명은 납득감.
Impeller 전환은 순탄하지 않았음. 6월에도 데스크톱 반투명 선 렌더링 회귀를 보고했고, Android에서는 드라이버 충돌로 빈 화면이 나와 아직 --no-enable-impeller로 빌드하는 앱이 있음.
Dart는 릴리스용 ARM 네이티브 AOT와 개발용 JIT를 한 코드베이스에서 지원해서 Flutter에 맞았음. TypeScript는 JS VM을 실어야 하고, Go는 JIT가 없어 상태 유지 hot reload에 맞지 않았음.
Dart와 Flutter를 오래 썼지만 Dart로 백엔드 API를 진지하게 만드는 사람은 한 번도 못 봤음. Serverpod 같은 도구는 있지만 팀 환경에서는 아주 틈새임.