오늘 구글 I/O 행사에서 flutter 쪽도 거의 breaking change급 버전업이 발표되었습니다.
여러분이 만들어둔 앱을 뜯어 고쳐야 하나 생각이 드실테지만 그런건 아니고요. 워낙 매력적인 내용들이 많아서 refactoring을 하고 싶거나
단순히 빌드만 새로 해서 성능 향상을 볼 수도 있기 때문입니다. 즉, 이미 만들어 놓으신 서비스엔 영향 없습니다. ^^
상세한 내용은
1) google Flutter director, Tim Sneath's post : flutter, dart release note
https://medium.com/flutter/racing-forward-at-i-o-2023-with-flutter-and-dart-df2a8fa841ab
2) Kevin Chisholm's post : material3 부분이 자세히 설명되어 있습니다.
https://medium.com/flutter/whats-new-in-flutter-3-10-b21db2c38c73
3) 그리고 I/O행사 직후 공개한 개발자 비디오 영상
https://www.youtube.com/watch?v=yRlwOdCK7Ho&t=428s&ab_channel=Flutter
제가 살펴보니 1) -> 3) -> 2) 순으로 보시면 될 것 같습니다.
그리고 모두 영문이라 요약해 보도록 하겠습니다.
일단 flutter는 3.10, dart는 3.0으로 stable버전의 업그레이드입니다.
WASM(WebAssembly)은 모든 브라우저에서 실행될 수 있는 바이너리 포맷 표준입니다. 멀티플랫폼을 지향하는 대부분의 플랫폼들은 거의 필수적으로 지원할 부분이기도 합니다. 그런데 flutter가 제대로 성능을 보이기 위해서는 dart의 GC가 제대로 동작해야 하는데 wasm 표준에서 GC 지원이 최근 채택되어 이제 활용가능하게 되었다고 합니다.(Chromium기반 브라우저들과 Firefox는 거의 안정화 단계인데 safari는 언급이 없네요)
참고로 dart의 GC는 flutter 같이 인스턴스(위젯)들의 생성/삭제가 빈번한 환경을 지원하기 위해 나름 효과적인 구조를 갖추고 있는데요. 다음 글을 읽어보시길 권해드립니다.
https://medium.com/flutter/flutter-dont-fear-the-garbage-collector-d69b3ff1ca30
ThemeData()의 colorSchemeSeed 또는 colorSeed를 통해 이용할 수 있습니다.
MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
useMaterial3: true,
// colorSchemeSeed: <-- 특정 Color를 기반으로 각 widget들에 어울리는 컬러들이 자동으로 결정
// colorSeed:<-- ColorScheme.fromImageProvider(...)로 정한 이미지를 바탕으로 각 widget들에 어울리는 컬러들이 자동으로 결정
),
home: const HomeView(),
);
위 내용외 devtools과 플랫폼별 지원은 다음을 참고해주세요.
https://medium.com/flutter/whats-new-in-flutter-3-10-b21db2c38c73
대부분이 flutter 3.7 릴리즈와 3월에 있었던 forward행사에서 발표된 내용으로 이번에 stable버전으로 릴리즈되었습니다.
사실 이번 업그레이드는 flutter보다는 dart가 더 영향이 크다고 생각됩니다. 특히, record, pattern 지원은 거의 breaking change 수준입니다. 아마도 기존 코드들에 대한 refactoring을 강하게 느끼실 것 같습니다.
간단히 얘기하자면, "null 또는 null 가능성이 있는 값이나 변수를 non-nullable 변수에 초기화하거나 할당되지 못하게 코딩단계에서 막자"는 것입니다. 지원 로드맵이 꽤 오래전부터 조심스럽게 진행되었기 때문에 혼란은 거의 없는것 같습니다. 이번 발표는 이를 공식화 하고 flutter 플랫폼이나 pub.dev 공식 패키지들에 있는 관련된 deprecated codes들을 모두 제거한다는 뜻이기도 합니다.
이들 사용으로 함수/메소드 호출과 리턴 주위가 엄청 깔끔해지고요, switch 조건문의 pattern 매칭으로 switch block이 깔끔해집니다. 특히, Widget constructor에서 parameter들을 선별적으로 사용해야 할 때 코드를 매우 직관적으로 작성할 수 있습니다.
List를 채울때, [ if ... ]이나 [ for() ... ]를 사용해서 list를 동적으로 만들기 편했던 것처럼 객체나 위젯 생성시 parameter들을 동적으로 넣을때 코드가 깔끔해집니다.
다음 동영상에서 자세한 설명과 사례를 보실 수 있습니다.
https://www.youtube.com/watch?v=KhYTFglbF2k&ab_channel=Flutter
클래스를 만들때 그 용도를 명확해서 사용시 구분해서 사용할 수 있도록 하였습니다. 설명에는 서비스 규모가 커질수록 클래스 용도를 명확히 하면 혼란을 덜 겪는다고 합니다.
.끝.
좋은 내용 공유 감사합니다~
앱 첫 실행시 버벅임이 매번 걸리적 거렸는데 이번 업데이트로 기대해볼 수 있겠네요.