Flutter 3.10のアップデートを簡単にまとめ

by dicekest,

Flutter 3.10に関するアップデート情報を簡単にまとめていきます。 変更点については下記の本家の情報をもとにして気になるところを一部抜粋しています。 https://medium.com/flutter/whats-new-in-flutter-3-10-b21db2c38c73

全体的にはImpellerをはじめとしたパフォーマンス関連のアップデートが大きい点は気になります。 特に画像表示に関してパフォーマンスが向上しているようで、画像はアプリ内でも表示することが多い要素だと思うので楽しみです。 また、Wireless debuggingによる今後の開発体験がどのようになるのかは早く利用してみたいですね。

Framework

Material 3

マテリアルのコンポーネントが最新のマテリアルデザインに準拠するようになりました。新しいコンポーネントやテーマが含まれるようになります。次回の安定版からは useMaterial3 オプションがデオフォルトで有効になるようです。 3.10.0 では ThemeData.useMaterial3 はnullableになっており、設定がない場合にはfalseとなっています。

ColorScheme.fromImageProvider()

マテリアル3のコンポーネントは ColorScheme からデフォルトの色を取得します。デフォルトの色合いは紫っぽいものになっているのでカスタム色もしくは画像でシードを与えることで色合いを独自に設定することができます。

  • ColorScheme.fromImageProvider()
  • NavigationBar
  • NavigationDrawer
  • SearchBar, SearchAnchor
  • Secondary Tab Bar
  • DatePicker
  • TimePicker
  • BottomSheet
  • ListTile
  • Drawer

TextField, CupertinoTextField

マテリアル3では TextField がネイティブのジェスチャーに対応します。ダブルタップ、トリプルタップ時にネイティブと同様に動作します。TextField, CupertinoTextField がデフォルトでこの挙動に対応します。

ダブルタップしてからドラッグ: 単語を選択状態になった後に移動した範囲に選択状態が拡大される

トリプルタップ

  • タップした範囲の段落を選択状態にする
  • 1行のテキストは全文選択状態にする

Flutter supports SLSA level 1

Flutter フレームワークはSLSAレベル1でコンパイルされるようになりました。これにより多くのセキュリティ機能が実装されます。

  • ビルドされたアプリの改ざんを防止する機能
  • 複数のエンジニアが承認することでリリースが可能となり、監査ログを作成する
  • ベータ版と安定版は正しいソースコードで出力されたことを保証し、SDKの出所を確認できる

-> これはFlutter SDK自体がより高いセキュリティレベルで開発がされていきますということのようですね

Engine

Impeller

Impellerは3.10.0でデフォルトのレンダリングエンジンになります。Impellerが有効になるとより安定したパフォーマンスを発揮し少ないジャンクで動作することができます。3.7のプレビュー版と比較してメモリの使用量が改善され,iPadでもパフォーマンスが大幅に向上します。

また、ImpellerによってFlutterチームはより要望のある機能を迅速に対応ができるようになりました。iOS上でP3色域へのサポートが可能になりました。

パフォーマンス関連

Eliminating Jank

最近の iOS 120Hz対応の端末でフレームレートが低下する問題が解消しました。いくつかのケースにおいてはフレームレートが3倍になることもあります。このhotfixは3.7系のバージョンにもバックポートされています。 また、複数画像の同時読み込みの時間が半減しました。

Reducing iOS startup latency

バンドル識別子の検索方法を改善し起動時間を100ms から30~50%改善しました。

内部APIの改善

APNG Decoder

APNGのでコードに対応しました、これによってFlutterの画像読み込みAPIを利用してAPNGが利用できます。

-> 以前からAPNGは表示できていたと思うがstableということではなかった?

画像読み込みの改善

instantiateImageCodecWithSize が追加され以下のユースケースで利用できます。

  • ロード時にアスペクト比が不明
  • bounding box constraint
  • 元のアスペクト比の制約

モバイル

iOS Wireless debugging

有線接続していなくてもiOSデバイスでrun, hot reloadができるようになりました。

広色域画像のサポート

Impellerを有効にしている場合に広色域画像の正確なレンダリングがサポートされるようになりました。

スペルチェックのサポート

SpellCheckConfiguration Widgetを使ってAppleのスペルチェックサービスをサポートできるようになりました。

Cupertino animations, transitions and colors

  • CupertinoPageRoute のアップデート
  • CupertinoSliverNavigationBar のタイトルを拡大するアニメーション
  • CupertinoColors に新しいカラーの追加

非推奨API

3.7以降にDeprecatedになったAPIの変更が含まれています。 詳細はこちらを確認してください。