Flutter 2.8での変化の概要

Flutter 2.8, Dart 2.15のアナウンスが12/9の朝、行われました。

本記事は以下の記事を要約し、
バージョンアップによる変化の概要を紹介します。

参考にした記事はこちら。

https://medium.com/flutter/whats-new-in-flutter-2-8-d085b763d181

:::note warn
なるべく原文の意味が通るようにまとめてはいますが、
あくまで要約です。
気になる部分、引用したい部分については必ず原文を確認するようお願い致します。
:::

##Flutter2.8の概要##

- エンジンとFlutter Dev'Tool両者のパフォーマンスの改善
- Flutter のGoogle Mobile Ads SDK のStableリリース
- WebView 3.0
- Firebaseのたくさんの新しい機能や改善
- Flutter の主要なパッケージの新たなバッチ
- Desktopの安定版リリースに向けて、多数の更新
- より多くのパッケージのサポートを受けられるようになた、DartPadの新バージョン

これらが今回のアップデートで追加されたそうです。
2,424のプルリクエストがマージされ、2,976のissueがCloseされたとのことでした。

###パフォーマンス###

**アプリケーションの起動待ち時間の改善**が行われました。
とても大きいアプリのGoogle Payに対して改善をテストしたところ、起動の遅延時間が
ローエンドのAndroid デバイスで50%、ハイエンドのデバイスで10%の改善されたそうです。
他に、DartVMのガベージコレクションポリシーに対してFlutterの関わり方の改善などが行われました。

Flutter2.8のリリースでAndroidに対し、Dart VMのservice isolateは個別にロードできるバンドルに分割されるようになり、
service isolateが必要になるまでに、最大40MBのメモリを節約できるようになりました。
(この部分理解が甘いです。メモリの使い方を工夫してより節約できるよ、ってことらしいです。)

また、Flutter 2.8 stable リリースによって、
"Android systrace レコーダー"が起動時に有効になっている場合、リリースモードであったとしてもイベントをトレースできるようになりました。

###Flutter DevTools###
パフォーマンスの問題をデバッグするために、UIジャンクを診断する"Enhance Tracing"機能が追加されました。
また、起動時のパフォーマンスをプロファイリングする新しいサポートが追加されました。

###Web platform views###
Flutter Web でPlatform viewのパフォーマンスの向上が行われました。
パフォーマンスを落とすことなく、``HtmlElementView``を複数使うことが可能です。
(Flutter Webに明るくないので理解が甘いです。詳細は原文をご覧ください。)

###パッケージやプラグインのリリース###

**Google Mobile Ads SDK for Flutter**が11月にリリースされました。

**WebView 3.0**がリリースされました。
Androidに対してBreaking Changeがあるため、バージョンを上げたそうです。
Hybrid Composition モードがデフォルトになりました。
また、新たなプラットフォームとして、Webのサポートを開始しました。
（ただし、現在の実装ではいくつかの制限があるそうです。詳細は以下）
https://pub.dev/packages/webview_flutter_web

###Flutter Favorite###
Flutter Favoriteに新たなパッケージが追加されました。

- router パッケージの``beamer``,``routemaster``,``go_router``
- SQLite用パッケージの``drift`` (旧``moor``)
- ``freezed``
- ``dart_code_metrics``
- GUIパッケージの``flex_color_scheme``,``flutter_svg``,``feedback``,``toggle_switch``,``auto_size_text``

###プラットフォーム特化のパッケージ###
パッケージを作成する際、100%DartでPlatformに特化した機能を実装することができるようになりました。
(この部分も理解が曖昧です。詳細は原文をご覧ください。)

###Firebase###
FlutterとFirebaseを使ってアプリを作成するのがより簡単になりました。
項目は以下です。

- 全てのFlutterFire プラグインがStableに
- いくつかのFirebase サービスがDartPadをサポート
- 認証とLive Firestore Queriesに対してUI構成をより簡単にする新たなライブラリ
- Alpha版として、新たなFireStoreのObject/Documentのマッピングが利用可能に

詳細、一部抜粋して記載します。

- **DartだけでFirebaseの初期化が可能に**なりました。

- ``flutterfire``CLIツールで**それぞれのプラットフォームの初期化オプションデータ構造を集められるように**なりました。
このツールで新しいFirebaseプロジェクトを作成することが可能です。
また、このツールを使えばAndroidの``json``ファイルや、iOSの``plist``ファイルをダウンロードして追加する作業が不要となります。

- CloudFireStoreなどで、**DartPadをドキュメントに埋め込めることが可能に**なりました。

- flutterfire_uiパッケージを使うことで、少量のコードで基本的な認証を作成できるようになりました。
``SigninScreen``widgetでEmailやGoogle認証を設定できます。
イメージや、テキストの追加も可能です。
デスクトップにも対応しています。
(コードや画像付きで紹介されていました。詳細は原文をご覧ください。)
``FirestoreListView``という、FireStoreからデータを取得するリストビューも追加されています。
``FirestoreDataTable``という、FireStoreの値をテーブル表示し、修正も可能にするWidgetが追加されています。
詳細は以下から

https://firebase.flutter.dev/docs/ui/overview/
 
- Firestore Object/Document MappingのAlpha版がリリースされました。
型安全で構造化されたオブジェクトとメソッドを通して、よりシンプルなFirestoreの利用で、
より生産性を高くすることを狙っています。
コード生成を使うことで型安全な方法でデータをモデル化することを可能にすることで
ドキュメントやコレクションを操作するための構文をFirestore Object/Document Mappingは改善します。
詳細は以下をご覧ください。

- 

https://firebase.flutter.dev/docs/firestore-odm/overview/

###Desktop###
Windows,macOS,LinuxのStableリリースに向けて大きな一歩を踏み出した、とのことです。
国際化とローカライゼーションのサポートとして、中国語IMEサポート、韓国語IMEサポート、漢字IMEサポートが追加されました。
Windowsのアクセシビリティに対するサポートも構築されています。
Firebaseプラグインについても実装を検討しています。

###DartPad###
23ものパッケージがimport可能になりました。
今後も新しいパッケージを追加予定です。
また、DartPadがStable Channelだけでなく、最新のbeta channelも利用可能になりました。
古いStable channelも同様に利用可能です。

###Dev channelの削除###
dev channelの利用者がかなり少なく、更新も止まっているため、正式に廃止するプロセスを開始しました。
今後数ヶ月以内にdev channelを廃止します。

###重大な変更###
期限切れになった非推奨のAPIの削除を除いて、重大な変更はありません。

##まとめ##

かなり多くの紹介でしたが、いかがでしたでしょうか。
個人的にはFirebaseのサポートが熱いな、と思いました。

早速使ってみようと思います。

本記事が参考になれば幸いです。