GoogleのクロスプラットフォームUIツールキットのメジャーアップデートであるFlutter 2では、Webサポートが安定化し、新しいプラットフォームが追加された。例えば、折り畳み式、埋め込み、デスクトップなどがある。それに加えて、新しいDart 2.12では、nullセーフティとDart外部関数インターフェイス(FFI)が提供される。
Flutterは、発表以来、iOSとAndroidのモバイルプラットフォームをサポートしてきた。Flutter 1.5でテクニカルプレビュー版として導入されたが、Webアプリとデスクトップアプリのサポートはそのステージを超えていなかった。現在、バージョン2では、FlutterはChrome、Firefox、Safari、EdgeをターゲットとするWebアプリを公式にサポートし、Windows、macOS、Linux用のネイティブアプリを作成するためのサポートを追加している。
Webプラットフォームは、豊富なプラットフォームAPIを包含するように進化してきました。そのため、ハードウェアアクセラレーションによる2Dおよび3Dグラフィックスと柔軟なレイアウトおよびペイントAPIを使って高度に洗練されたアプリを実現できます。Flutterのウェブサポートはこれらのイノベーションに基づいて構築されています。そして、最新のウェブが提供すべきすべての機能を最大限に活用するアプリ中心のフレームワークを提供します。
比較的長いテクニカルプレビューフェーズで、Googleは広範囲にわたって取り組んできた。それは、WebAssemblyを使用して新しいCanvasKitを利用したレンダリングエンジンを構築することでWebに対するFlutterのパフォーマンスを改善するためである。また、同時に、Web用に構築されたエクスペリエンスをデスクトップデバイスとモバイルデバイスでシームレスに実行できることを保証するためである。当初、Flutterは、プログレッシブWebアプリ(PWA)とシングルページアプリ(SPA)を含む2つのWebシナリオにフォーカスしていた。
Flutter 2では、折り畳み式デバイスのサポートも導入されている。これは、Microsoft Surfaceチームによって別に発表されている。折り畳み式デバイスをサポートするための重要なアイデアは、「ディスプレイ機能」、つまり、カットアウト、ヒンジ、折り畳みなど、機能しないディスプレイの領域である。ディスプレイ機能を回避するために、開発者は、「セーフエリア」と呼ばれるディスプレイ内にFlutter UIオブジェクトを配置できる。それは、システムによって自動的に処理される。
Microsoftのエンジニアによると、多くの場合、アプリにデュアルスクリーンのサポートを追加するのは、TwoPaneウィジェットを使用するのと同じくらい簡単である。TwoPaneはデザインをスケールアップするシンプルな方法を提供するものである。これにより、使用可能なスペースに応じて1つまたは2つのウィジェットを簡単に表示できるため、その名前が付けられている。Flutterの折り畳み式のサポートはまだ実験段階であり、公式のFlutterリポジトリにはまだマージされていない。
GoogleはFlutter 2とともに、Dart 2.12をリリースした。これは、Flutterアプリの作成に使用される言語の新しいバージョンである。言語レベルでは、Dart 2.12に最も関連する機能はnullの安全性である。これを有効にすると、?サフィックスを型につけない限り、すべての変数宣言をデフォルトでnull不可にすることができる。
var i = 42; // non-nullable int
int? n = null; // nullable int
if (n == null) {
return 0;
}
if (n > 0) { // here n has been promoted to a non-null int
}
Dart 2.12のもう1つの重要な機能は、Dart FFIである。これにより、DartコードからCライブラリを呼び出すことができる。Dart FFIは安定しており、本番環境で使用できる状態にあると見なされている。一方で、int、long、size_t、構造体のインライン配列、パックされた構造体などのABI固有のデータ型のサポートなど、まだ機能している多くの細かい機能がある。
Flutter 2には、iOSとAndroidの両方で、多くの新しいウィジェットや改良されたウィジェットも含まれている。たとえば、AutoCompleteCoreを使うと、アプリでのオートコンプリート動作の実装を簡素化にできる。新しいAdd-To-App機能は、既存のアプリの一部でのみFlutterを使用できるようにすることを特に目的としている。これにより、モバイルアプリが100%Flutterでなくても、Flutterコードベースを再利用できる。
後方互換性のない変更が既存のコードベースに与える影響を減らすために、Flutter 2はFlutter Fixをリリースしている。これにより、修正を適用できる、または適用する必要があるコードの任意の部分にフラグを立てることができる。そのため、開発者はAPIの変更、つまり非推奨のAPIの置き換えでコードベースを最新の状態にすることが容易にできる。
最後に、Flutterの採用は増え続けている。Googleによると、Flutterを使用して作成され、Playストアから入手できるアプリが15万を超えている。Googleエンジニア自身が、多くの既存のGoogleアプリをFlutterに移植することに熱心に取り組んできた。例えば、Stadia、Google Pay、Google One、Google Nest Hubである。さらに、Flutterエコシステムには15,000以上のパッケージがある。例えば、Google AdMobとFirebase向けの新しいSDKや、Amazon、Microsoft、Square向けのものなど含まれる。