日本時間の3/4の未明に行われたFlutter EngageでFlutter2.0が発表されました。
変更点をまとめていきます。
Web/Windows/MacOS/LinuxのサポートがStableに
元々モバイル向けのクロスプラットフォームであったFlutterは、ベータ機能としてWeb、 Windows、 MacOS、Linuxをサポートしていましたが、 Flutter2.0でこれらのサポートがStableになりました。
従来の「モバイルフレームワーク」から、「ポータブルフレームワーク」へ変わるぞ!と発表されています。
Flutter for WebではWebassemblyとSkiaを使って直接CanvasにUIを描画するCanvasKitが紹介されました。 これは従来のdomを直接操作する方法と比べてパフォーマンスに優れ、モバイル版との差異も少ないレンダリング方法ですが、 Skiaをダウンロードしないといけないため、ダウンロードサイズが2mb増加します。
どちらのレンダリング方法を選択するかは開発者が選択でき、デフォルトではモバイルの場合は従来の手法を使い、デスクトップの場合にはCanvasKitを使うように設定されています。
そのほかにもPWA Manifest、URLの書き換えをサポートすることでPWAやSPAでも動作することを目指しているそうです。
Linuxでは、UbuntuがデフォルトのGUIフレームワークとしてFlutterを採用したり
※ ↓の記事にあるように、正確には「Ubuntuを運営するCanonicalが」Flutterをデフォルトの選択肢としただけで、 Ubuntu上で動く全てのアプリがFlutter製になるわけではありません。
Flutter is the default choice for future Ubuntu apps.@kenvandine, Engineering Manager, is here to tell you about some of Canonical's contributions to Flutter at #FlutterEngage.
— Ubuntu (@ubuntu) March 3, 2021
Watch 👉 https://t.co/kc1tFBlMJh pic.twitter.com/6IXlJ8qObL
WindowsやSurfaceDuoのようなフォルダブルサポートのためにMicrosoftと協力していたり
✨Foldable, dual-screen devices are ready for your Flutter app!
— Flutter (@FlutterDev) March 3, 2021
The Surface Duo is a combo of the best of Android with the @SurfaceDuoDev team’s hardware engineering expertise. @gmerin is here from @msdev to share more!
Watch 📺 → https://t.co/T9025C5NCV #FlutterEngage pic.twitter.com/t7Wj6TEORJ
Toyotaが自動車のUIにFlutter採用を予定していたりなど
🚙 The future of @Toyota's infotainment systems will be powered by Flutter.@ToyotaConnected is building Flutter right into the heart of their vehicles. Catch @danielthall at #FlutterEngage as he talks more about their plans with us!
— Flutter (@FlutterDev) March 3, 2021
On now 👉 https://t.co/T9025C5NCV pic.twitter.com/pSn299QF9P
有名企業の採用例が紹介されました。
Google以外のビッグカンパニーがFlutterを採用したりFlutterの開発に積極的に参加していたりすることはコミュニティーの活性化を意味するのでとてもいいことですね。
AutoCompleteCoreとScaffoldMessangerの追加
AutoCompleteCore
が追加されたことでFlutterでも公式にAutoCompleteができるようになりました。
また、 ScaffoldMessanger
が追加されたことで、これまお世辞にも使いやすいとは言えなかった SnackBar
の仕様が改善され、画面遷移を跨ぐような使い方もできるようになりました。
iOSもちゃんとやってるよ
Cupertino
系のFormWidgetがいくつか追加されました。iOSのパフォーマンス改善も引き続きやっていくそうです。
Google Mobile Ads SDK
Flutterは15000以上のパッケージを抱えていますが、今回そこにGoogle Mobile Ads SDKが追加されました。
こういったネイティブのAPIを使うようなパッケージはFlutterが苦手とするところでしたが、コミュニティの発展に伴ってサポートされている機能が随分充実してきました。
スクロールバーが操作可能に
Flutterのスクロールバーはこれまで単にスクロール位置を表示するためだけのものでしたが、ドラッグやクリックができるようになりました。
主にWebやDesktopでの使いやすさのためのアップデートみたいです。
Sounds Null Safety
Flutter2と同時にDartの2.12が発表され、待望のNull Safetyがリリースされました。
移行は依存しているパッケージのNull Safety対応が完了してからすることが推奨されているのでもう少し時間が必要かもしれませんが、 Firebaseなどの有名パッケージを含む1000以上のパッケージがすでに対応済みのようなので、今年中くらいには完全移行できるかもしれません。
Dart FFIがStableに
Null Safetyと同時にDart2.12からFFIがStableになりました。FFIはForeign function interfaceの略で、別言語(主にC言語)で書かれた機能にDartから直接アクセスすることを可能にします。
これまで同様のことをFlutterでしようとした場合、
Dart → Message Channel → 各プラットフォームのFFI → C言語の機能
のように一度JavaやObjective-Cを経由しないといけなかったため面倒でしたが、これからはDart FFI経由で直接アクセスできるようになります。
Add-to-appを同一アプリ内で複数使ったときのパフォーマンスが改善
既存のアプリに一部だけFlutterを導入するAdd-to-appは、Flutterの恩恵を部分的に受けることができる機能でしたが、 同一アプリ内で複数のインスタンスを利用した場合、インスタンスごとにFlutterのコアが起動されてしまい非常にメモリ効率が悪くなってしまいました。
Flutter2からはこれが改善され、同時起動時の2つめ以降のインスタンスにかかるメモリコストが最大99%削減され、180kbほどで立ち上げることができるようになりました。
それによって、Widget単位でFlutterを導入したりなどのこれまでできなかった使い方ができるようになります。
dart fix
コマンドの追加
Deprecatedになったコードの一覧表示、自動修正をしてくれる dart fix
コマンドが追加されました。
コマンドラインからだけでなく、InttelijやVSCodeからの修正にも対応しています。
Flutter DevToolsが新しくなった
これまでは単に Dev Tools
と呼ばれていましたが、わかりやすくするために Flutter DevTools
に改名されたそうです。
以下の機能が追加されています。
-
Flutter DevToolsを起動前に、エラーが起こったタイミングでIntellijやVSCodeコードがFlutter DevToolsの利用を提案してくれるようになった
-
Flutter DevToolsのタブにエラーのバッジがつくようになった
-
Invert Oversized Image機能が追加され、有効化すると画面解像度に対して大きすぎる画像を上下反転してくれるようになった
-
FlexレイアウトのWidgetだけでなく、
Text
などのFixedレイアウトのWidgetに関してもサイズやPaddingなどの詳細がみられるようになった -
失敗したネットワーク経由のリクエストが赤く強調されるようになった
-
FPSの平均値を出してくれるなど、Flutter frames chartが使いやすくなった
-
メモリの監視UIが改善された
-
Logが検索、絞り込みできるようになった
-
DevTools起動前のログも確認できるようになった
-
Performance
View がCPU Profiler
に改名された -
Timeline
ViewがPerformance
に改名された -
…etc
まとめ
Null Safetyがリリースされたり、よりマルチプラットフォームになっていたり着実に進化していってるなと思います。 大企業も積極的に開発に参加していて、これからの進展に期待ができそうです。
参考
https://developers.googleblog.com/2021/03/announcing-flutter-2.html
https://medium.com/flutter/flutter-web-support-hits-the-stable-milestone-d6b84e83b425
https://medium.com/dartlang/announcing-dart-2-12-499a6e689c87