AI integration
Google Ai Dart SDK가 출시 되었습니다. Google에서 새로 개발한 생성형 AI인 Gemini를 이제 Flutter와 Dart에서 사용 할 수 있습니다.
Framework
Scrolling improvement
플러터는 두 손가락으로 드래그하면 스크롤 속도가 두 배 빨라지곤 했습니다. 이제 MultiTouchDragStrategy.latestPointer로 기본 ScrollBehavior을 구성하여 손가락 수에 구애받지 않는 스크롤 동작을 얻을 수 있습니다. 이 변경 사항에 대한 자세한 내용은 마이그레이션 가이드를 참조하세요.
SingleChildScrollView와 ReorderableList의 버그를 완벽히 수정하였습니다.
2차원 스크롤에서 문제를 해결하여 이제 어느 방향으로든 스크롤이 진행 중인 상태에서 드래그하거나 탭하면 스크롤 활동이 예상대로 중지됩니다.
지난 3.16 안정 릴리스 이후 two_dimensional_scrollables 패키지의 TableView 위젯도 업데이트되어 더욱 세련되고 병합된 셀에 대한 지원이 추가되었으며 2D 기초의 새로운 기능을 더 많이 채택했습니다.
AnimationStyle
Flutter에는 MaterialApp, ExpansionTile, PopupMenuButton과 같은 위젯의 기본 애니메이션 동작을 재정의할 수 있는 새로운 애니메이션 스타일 위젯이 추가되어 개발자가 애니메이션 커브와 지속 시간을 재정의할 수 있습니다.
SegmentedButton.styleForm
Flutter 커뮤니티 회원인 @AcarFurkan이 다른 버튼 유형에서 제공하는 것과 같은 스타일로부터 정적 유틸리티 메서드를 추가했습니다. 이 메서드를 사용하면 다른 세그먼트 버튼과 공유하거나 앱의 세그먼트 버튼 테마를 구성하는 데 사용할 수 있는 세그먼트 버튼의 버튼 스타일을 빠르게 생성할 수 있습니다.
Adaptive Switch
이 적응형 컴포넌트는 macOS와 iOS에서 네이티브 모양과 느낌을 주며 다른 곳에서는 머티리얼 디자인 모양과 느낌을 갖습니다. 쿠퍼티노 라이브러리에 의존하지 않으므로 API는 모든 플랫폼에서 완전히 동일합니다.
SemanticsProperties accessibility identifier
SemanticsProperties의 새로운 접근성 식별자는 기본 접근성 계층 구조에서 시맨틱 노드에 대한 식별자를 제공합니다. Android에서는 접근성 계층 구조에 resource-id로 표시됩니다. iOS에서는 UIAccessibilityElement.accessibilityIdentifier를 설정합니다. 엔진과 프레임워크에 걸친 이 변경에 대해 커뮤니티 회원 @bartekpacia에게 감사의 말씀을 전합니다.
Increased access to text widget state
MaterialStateController을 수신할 수 있도록 TextField와 TextFormField에 MaterialState에 대한 지원을 추가했습니다.
간단히 말해서, 사용자가 텍스트 필드에 입력하거나, 위젯에 포커스를 맞추거나, 마우스를 가져다대는 등의 다양한 상태 변화에 따라, 우리는 이제 그 변화들을 감지하고 그에 맞는 디자인이나 기능적 반응을 더 잘 조절할 수 있게 되었어요. 예를 들어, 사용자가 필드에 입력을 시작하면, 배경색을 변경하거나, 라벨 스타일을 바꾸는 등의 세심한 UI 변화를 줄 수 있겠죠.
UndoHistory Stack
일본어 키보드에서 실행 취소/다시 실행 기록이 사라지던 문제를 수정했습니다. 이제 UndoHistory 스택으로 푸시되기 전에 항목을 수정할 수 있습니다.
Engine
Impeller progress
Android OpenGL preview
3.16 stable release에서 사용자들에게 Vulkan을 지원하는 Android 기기에서 Impeller를 사용해 보도록 초대하여, 현장의 안드로이드 기기 77%를 커버했습니다.
지난 몇 달 동안 Impeller의 OpenGL 백엔드는 MSAA에 대한 지원을 추가하는 등 Vulkan 백엔드와 동등한 기능을 갖추도록 개선했습니다.
즉, 커스텀 셰이더 및 외부 텍스처에 대한 완전한 지원 등 곧 출시될 소수의 기능을 제외하고 거의 모든 Android 기기에서 Flutter 앱이 올바르게 렌더링될 것으로 예상됩니다.
Flutter 개발자는 최신 안정 버전으로 업그레이드하고 임펠러를 활성화했을 때 관찰되는 단점에 대해 문제를 제기해 주시기 바랍니다. 이 단계에서의 피드백은 임펠러가 Android에서 성공적으로 작동하고 올해 말 릴리스에서 기본 렌더러로 자신 있게 사용할 수 있도록 하는 데 매우 중요합니다. Android 하드웨어 생태계는 iOS 생태계보다 훨씬 더 다양합니다. 따라서 임펠러에 대한 가장 유용한 피드백에는 문제가 발생한 특정 디바이스와 Android 버전에 대한 자세한 정보가 포함되어야 합니다.
또한, 다시 한 번 말씀드리지만 Impeller의 Vulkan 백엔드는 디버그 빌드에서 Skia에서 사용되는 것 이상의 추가 디버깅 기능을 지원하며 이러한 기능은 런타임 오버헤드가 추가로 발생합니다. 따라서 프로필 또는 릴리스 빌드에서 Impeller의 성능에 대한 피드백을 제공하는 것이 중요합니다. 버그 리포트에는 개발자 도구의 타임라인과 동일한 기기에서 Skia 백엔드와의 비교가 포함되어야 합니다. 마지막으로, 항상 그렇듯이 문제를 입증하는 재현 가능한 소규모 테스트 사례를 포함한 피드백을 보내주시면 매우 감사하겠습니다.
Roadmap
rendering fidelity에 이어 Impeller의 Android 프리뷰 기간 동안 가장 중점을 둔 부분은 성능입니다. 점진적인 개선이 계속되고 있지만 몇 가지 큰 개선 작업도 진행 중입니다. Vulkan subpasses 활용하여 Advanced blend modes의 성능을 크게 개선하는 작업이 진행 중입니다. 또한 렌더링 전략을 항상 CPU의 모든 경로를 tessellating하는 방식에서 Stencil-then-cover으로 변경하면 Android와 iOS 모두에서 임펠러의 CPU 사용률을 크게 줄일 수 있을 것으로 예상합니다. 마지막으로, Gaussian blurring의 새로운 구현이 Skia 구현의 처리량과 일치하고 iOS에서 블러링의 관용적 사용이 개선될 것으로 예상합니다.