Flutter 2.10 変化点の要約

本日、Flutter 2.10のアップデートが来ました。

今回は以下の記事を要約し、2.10での変化点を紹介します。

https://medium.com/flutter/whats-new-in-flutter-2-10-5aafb0314b12

皆様の開発の参考になれば幸いです。

##主要な変化点##

主要な変化点は以下です。

- Windows　アプリに対する大きなアップデート
- パフォーマンスの向上
- フレームワークでのiconや色に対する新たなサポート
- ツールの向上
- dev　channelの廃止
- 古いバージョンのiOSのサポートの縮小
- 少数の破壊的変更

## Windowsアプリに対する大きなアップデート ##

Flutter 2.10にて、Windows サポートのstable リリースが行われました。

今回のアップデートで以下が向上しました。

- テキストの操作性
- キーボードの入力性
- キーボードショートカット

また、以下のサポートが統合されました。

- コマンドラインの引数
- テキスト入力の国際化
- アクセシビリティ

詳細は以下の記事にて記載されています。

https://medium.com/flutter/announcing-flutter-for-windows-6979d0d01fed

:::note
ざっくり内容を解説すると、以下が記載されています。 
・　多くのプラグイン、パッケージがWindowsサポート済
・　fluent_uiやfluttter_acrylicパッケージでWindowsのUIを再現できる
・　msix fileも作成でき、Microsoft Storeに公開できる
・　音声読み上げ等アクセシビリティにも対応
・　FlutterFlowなどもWindows対応
詳しい内容は上記記事をご確認ください。
:::

##パフォーマンスの向上##

ダーティ　リージョン　管理に対する初期サポートが今回のアップデートで含まれます。
iOS/Metal の単一のダーティ リージョンに対し、部分的に再描画することを可能にしました。
この変化により、いくつかのベンチマークで90番目と99番目のパーセンタイルのラスタライズ回数を桁違いに減少させ、
GPUの使用率が90%から10％以下に減少しました。

他のプラットフォームに対しても将来のリリースにて部分的な再描画を取り入れる予定です。

2.8で着手した、独自の内部画像記録フォーマットの最適化を行いました。
より多くの事象に対し、画像記録フォーマット開発によって最適化を図っていきます。

型データフロー解析の高速化しました。
これにより、Flutterアプリのビルド時間が約１０%減少しました。

### iOSのアップデート ###
iOSに対し、キーボード表示アニメーションをよりスムーズにしました。
アップデートするだけで自動的に提供されます。

いくつかのエッジケースのクラッシュを治すことで、カメラプラグインの安定性を向上させました。

64-bitのiOSのアーキテクチャに対しても、メモリ使用量を減少させる新たな機能、compressed pointersをを実装しました。

### Android のアップデート###

新しいアプリを作成した際、Androidの最新バージョン(version 12 (API level 31))のサポートがデフォルトになりました。
またmulidexのサポートが自動化されました。
もし、Androidのサポートバージョンが21より下の場合、64Kメソッドの限界を超え、 multidexをサポートするようになります。

Gradleエラーのような共通の問題に対し、Flutterのコンソール画面にて解決策を示唆するようになりました。

### Webのアップデート ###
TextFieldの端から端までのスクロールを導入しました。デスクトップアプリでも利用可能です。
(元記事にgif画像あり)

オーバーヘッドを取り除く、Webに対してのnon-painting platform view　を作成しました。
そしてLink Widgetにてこの最適化を利用しました。
今まではFlutter　アプリにネイティブのHTMLのウィジェットを導入したい場合、
Webのプラットフォームビューサポートとしてオーバーレイが必要でした。
これらのオーバレイの一つ一つがカスタムペインティングを可能にしましたが、多くのオーバーヘッドが必要となります。
linkのようなHTMLウィジェットが多くなると、オーバーヘッドも多くなります。
今回の変更で、オーバヘッドはもはや現れません。

## フレームワークでのiconや色に対する新たなサポート　##

###Material 3###
単一のシードカラーから全体のカラースキームを生成できる、Material 3への移行を始めました。
どんなカラーからでも、新たな``ColorScheme``型のインスタンスを生成できます。
また、新たなパラメータ、``colorSchemeSeed``を持つ``ThemeData``のfactoryコンストラクタが追加され、
テーマのカラースキームを生成できるようになりました。
(元記事にサンプルコードが記載されています。)

Material3のコンポーネントを切り替えることができる、``ThemeData.useMaterial3``のフラグが実装されました。

1,028もの新しいMaterial iconが追加されました。

##インテグレーションテストの向上##
integration_testパッケージはflutter_driverパッケージにリプレースされていましたが、
より良いインテグレーションテストのストーリーの向上のため、integration_testパッケージをFlutter SDKに含めることにしました。

flutter_driverからのmigrationは以下のページを確認してください。
ドキュメントやサンプル等が含まれています。

https://docs.flutter.dev/testing/integration-tests/migration

##ツールの向上##

###DevToolの向上###

コマンドラインからDevToolsを使用する場合の使いやすい機能を追加しました。
最新バージョンをダウンロード、実行するために``pub global activate``を使用する代わりに、
``dart devtools``を使うことでFlutterの最新バージョンに対応したバージョンを取得可能です。

デバッガーの変数表示での大きなリストとマップの検査のサポートの改善を含む、たくさんの使いやすさの向上を行いました。
(元記事にgif画像あり)

###VSCodeの向上###
Flutterに対するVisual Studio Codeの拡張機能にもいくつかの機能強化が行われました。
例えばより多くの場所でのカラープレビューや、コードを更新する機能のついたcolor pickerなどです。
(元記事にgif画像あり)

また、VSCodeのDartやFlutterの拡張機能のプレリリースのバージョンを使用したい場合、設定から切り替えられるようになりました。

詳細は以下をご覧ください。

https://groups.google.com/g/flutter-announce/c/lR-yn1s9HKk

https://groups.google.com/g/flutter-announce/c/lDSpaiWvUdI

##dev　channelの廃止##

今回のリリースでdev channelが完全に廃止されました。

##古いバージョンのiOSのサポートの縮小##

iOS 9.3.6に対するサポートを、"Supported"から、"Best Effort"に変更しました。
これは、iOS 9.3.6に対するサポートと、32-bitのiOSデバイスに対するサポートは、
コーディングプラクティス、およびアドホックテストとコミュニティテストによってのみ維持されます。

2022年のQ3のstable リリースにて、32-bit iOSデバイスと、9と10のバージョンのiOSに対するサポートをドロップします。
これにより、サポートする最小のiOSバージョンは、iOS 11となります。

##少数の破壊的変更##

- Kotlin versionの要求値の変更
- v2.5以降非推奨となったAPIの削除
- Web上の生画像が正しい原点と色を使用するように変更
- Scribble Text Clientにメソッド追加(手書き入力)

（元記事にmigration ガイドがリンクされています。）

##まとめ##

本記事では、Flutter 2.10での変化点について解説しました。

個人的にエラーに対して解決策のサジェスト機能がついたのはめっちゃ良い変化点だと思いました。
あと、Kotlinのバージョン要求値の変更は、アップデートした際に必ず対応が必要となりそうです。

（参考記事）

https://blog.dalt.me/3208

本記事があなたの開発の助けになれば幸いです。

##宣伝##

普段、以下のアカウントにてFlutterの情報を呟いてます。
また今年中に100記事の作成をめざし、日々記事の更新情報等を呟いています。
よろしければフォローをお願いいたします。

https://twitter.com/iNw17r8YHWThqgC

お仕事についてのご連絡はDMまでお願いいたします。