Flutter 3.19のアップデートを簡単にまとめ
Flutter 3.19のアップデートは、AI統合、フレームワーク改善、パフォーマンス最適化といった内容で、開発効率とユーザ体験を向上させてくれます。
以下では、公式の情報を基にして、まとめを簡単に書きたいと思います。
AI 統合
Flutterにおける生成AI機能をGeminiを通じて利用可能になりました。ただし、βです。
アプリ内でのコンテンツ生成やデータ処理が強化され、ユーザーエクスペリエンスが向上する可能性があります。β版であるため、安定性や予期せぬバグが出る可能性があり、製品版への導入は要検討ですが、フィードバックを通じて改善が進むことでしょう。
Framework
スクロール改善
「MultiTouchDragStrategy.latestPointer」と標準の「ScrollBehavior」を使うことで、指の数に関わらず一貫したスクロールが可能に。詳細はこちら。
そうなった場合、従来の2本指スクロールの挙動はこの変更で影響を受けるため、FlutterかWebViewかの判定は別の手段を使うことになりそうです。ボタン押し込み時のRipple効果の有無を見るなど。
二次元スクロール
スクロール中にタップまたはドラッグを行うと、スクロールが停止するようになりました。
一貫したスクロール体験により、ユーザーの操作性が向上し、アプリの使い勝手が良くなると思います。
AnimationStyleウィジェット
MaterialApp、ExpansionTile、PopupMenuButtonなどのデフォルトアニメーションをカスタマイズ可能に。
デザイナーの繊細な要求に合わせた動きを表現しやすくなります。
SegmentedButton.styleFrom
他のボタンスタイルと同様、SegmentedButtonをスタイルから生成するためのメソッドが新たに追加されました。
Switch.adaptive
iOS/macOSではネイティブUI、その他のプラットフォームではマテリアルデザインUIを採用した外観、挙動にできます。デモはこちら。
簡潔な実装とユーザ体験を両立できることは嬉しいですね。
その他
セマンティックプロパティのアクセシビリティ識別子の追加。TextFieldとTextFormFieldがMaterialStatesControllerをサポートし、MaterialStateの変更を監視できるようになりました。また、日本語キーボード使用時のundo/redo履歴の消失問題が修正されました。
エンジン
Impellerの進捗
AndroidのOpenGLプレビューがVulkanバックエンドと機能的に同等になりました。
特にグラフィックス集約的なアプリケーションでの体験が改善されるでしょう。
APIの改善
グリフ情報
文字の寸法を定義する新しい型「GlyphInfo」が導入され、特定のオフセットに最も近いグリフ情報を取得するgetClosestGlyphInfoForOffsetやgetGlyphInfoAt関数から返されるようになりました。
多言語サポート時のレイアウトの際に便利な場面が出てくるかもしれません。
GPUトレーシング
各フレームのGPU処理時間を確認できる機能が追加されました。
開発者がフレームごとのパフォーマンスを詳細に分析できるようになるため、パフォーマンスの最適化が進むことが予想されます。
パフォーマンスの最適化
特殊化定数
Flutterエンジンの非圧縮バイナリサイズが約350KB縮小されました。
わずかではありますが、アプリのダウンロード時間とストレージ使用量が減少するのはユーザにとって嬉しいことですね。
バックドロップフィルターの高速化
背景にぼかしや色変更などのグラフィック効果を加えるバックドロップフィルターのパフォーマンスが向上しました。
Android
ディープリンクWebバリデータ
assetlinks.jsonファイルの設定を検証する新機能が追加されました。
一定の検証作業が簡単になるだけでなく、シフトレフト効果によって工数が削減できることを期待。
Share.invokeのサポート
AndroidのテキストフィールドやビューにデフォルトのShareボタンが統合されました。
アプリのコンテンツを簡単に共有できるようになります。
ネイティブアセット機能
FFI(Foreign Function Interface)を使用して、AndroidのFlutterアプリ内で他言語のライブラリ関数を呼び出すことが可能に。
外部ライブラリの利用が容易になることで、アプリ開発の柔軟性が高まります。
Dart以外で提供されている特殊なライブラリを使えることで事実上可能になる技術採用があるかもしれません。
Texture Layer Hybrid Composition (TLHC) モード
Androidでのプラットフォームビュー表示を最適化するTLHCモードにおいて、Google Mapsやテキスト入力拡大鏡のパフォーマンスが向上しました。
システム全体のカスタムテキスト選択ツールバーボタン
Androidアプリが全てのテキスト選択メニューにカスタム項目を追加できるようになり、FlutterのTextField選択メニューにもこれらの項目が追加されました。
iOS
Flutter iOS nativeフォント
幅がコンパクトになります。
nativeフォントを利用している場合、レイアウトへの影響がありそうです。golden testへの影響は必至です。
DevTools
DevToolsのアップデート
- Androidのディープリンク設定を検証するための新しい画面がDevToolsに追加されました。
- プラットフォームチャネルアクティビティを追跡するための「Enhance Tracing」オプションが追加されました。
- アプリが接続されていなくても、DevToolsで保存されたパフォーマンスデータやCPUプロファイルを表示できるようになりました。
- VS CodeのFlutterサイドバーに新しいプラットフォームを有効化する機能が追加され、DevToolsを外部ブラウザウィンドウで開くオプションがサイドバーに追加されました。
エコシステム
プライバシーマニフェストの要件
Flutter自体のframeworkにプライバシーマニフェストが組み込まれるようになりました。
廃止予定および破壊的変更
Impellerディザリングフラグの削除
Paint.enableDitheringというグローバルフラグが削除されました。
iOS 11のサポート終了
Flutter 3.16.6以降にビルドされたアプリがiOS 11デバイス上で動作しなくなります。
Flutter 3.19以降ではないのか?と公式テキストを二度見しましたが、3.16.6と書いてあります。
Webのレンダリングモードのautoの非推奨化
Flutter Web の変更ですが、 Flutter 2で導入されたレンダリングモード autoが非推奨になりました。
mobileの場合はhtml renderer、PCの場合はcanvaskit rendererに切り替えるモードでした。
その他
公式のBreaking changes and migration guidesをご覧ください。
Discussion