5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Flutter 2 リリース情報 ~web stable, null-safety stable など~

Last updated at Posted at 2021-03-07

はじめに

2021年3月3日、Flutter 2 がリリースされました。

この投稿では、以下の4つのリリース記事の内容を簡単にまとめていきます。
掲載している画像も全てこれらの記事からの引用です。

※ 今回は分量が多すぎるため、目立った情報のみ取り上げていきます。

目次

web 版が stableに

stable チャンネルで web 開発が行えるようになりました。

2つのレンダリングモード

web 版を stable に持っていくにあたり、最も開発に力が注がれていたのが、パフォーマンスの改善です。従来の DOM ベースのレンダリング方式に加え、WebAssembly を使った CanvasKit と呼ばれるレンダリング方式がサポートされるようになりました。

  • HTML renderer
    • HTML, CSS, Canvas, SVGなどでレンダリング
    • ダウンロードサイズが小さい
  • CanvasKit renderer
    • WebAssembly + WebGL (Skiaエンジン)
    • 高パフォーマンス
    • ダウンロードサイズは大きい (HTML rendererのサイズ より +2MB くらい)

デフォルトでは、レンダリングモードが auto に設定されており、モバイル版のブラウザでは HTML renderer が、PC 版のブラウザでは CanvasKit が使われるようになっています。この設定は、 --web-renderer html または --web-renderer canvaskit を付けて実行することで変更することが可能です。詳しくは以下のドキュメントを参照してください。

URL Strategy

Flutter では URL にハッシュ(#)を使用する方式と、ハッシュを使用しない方式の2種類をサポートしています。デフォルトでは、ハッシュを使う方式になっていますが、以下のドキュメントに従うことで、ハッシュ無しの方式に変更することが可能になっています。

Link ウィジェット

Flutter から外部の URL を開くには、url_launcher パッケージを使用するのが一般的です。今回、このパッケージに 新しく Link ウィジェットが追加されました。これを使うことで、従来の launch() メソッドを使った命令的な記述に替えて、以下のような__宣言的__な記述でリンクを記述することができるようになります。

Link(
  uri: Uri.parse('https://flutter.dev'),
  builder: (BuildContext context, FollowLink followLink) => ElevatedButton(
    onPressed: followLink,
    // ... other properties here ...
  )},
);

また、Link ウィジェットを使用した箇所は <a>タグでレンダリングされるようで、右クリックでのメニュー表示や、Ctrl+クリックで新規タブで開くといった、Web アプリとして自然な体験が得られます。

デスクトップ版が beta に

これに関しては stable になったと紹介されている記事も多いですが、扱いとしてはまだ beta というのが正しいのではと思います。

stable チャンネルでも実行可能に

early release フラグ付きという形で stable チャンネルでもデスクトップ版が実行できるようになりました。チャンネルを beta に切り替えなくてもお試しで実行できるぐらいの感覚で、Production Ready になったという意味ではないと思います。

なお、stable チャンネルでは最新の Bug Fix などがすぐに降ってこないため、デスクトップ版をがっつり開発する場合は、beta チャンネルへの切り替えが推奨されています。

Scrollbar 等がマウス操作に対応

マウス操作やキーボードショートカットといった、__PC 特有の操作__への対応が進められています。

例えば、ReorderableListView は元々、要素を移動させるのに一旦長押しが必要でしたが、今回新たに grab handles が追加され、より自然にマウス操作が行えるようになリました。

reorderable_list_view.gif

Scrollbar についても同様に、マウスでの操作が可能になった他、ScrollbarTheme が追加されて、より細かなカスタマイズができるようになりました。

scrollbar.gif

IME サポート

ime_support.gif

iOS 関連

新しい Cupertino ウィジェットの追加

flutter build ipa コマンド

flutter build ipa コマンドを使うことで、Xcode を開かずに ipa ファイルを生成することができるようになりました。詳しい使い方は以下を参照してください。

その他の iOS 関連のアップデート

  • State Restoration to iOS (#23495)
    • Android のみ対応していた機能が iOS でも使えるようになった
  • CocoaPods の推奨バージョンが 1.9 に変更 (#69809)

Android 関連

折りたたみスマホ対応

Microsoft によって、折りたたみスマホへの対応が進められています。詳しくは以下を参照してください。

新しい Widget の追加

Autocomplete

Autocomplete ウィジェットが追加されました。事前に補完候補を用意しておいて、文字入力に合わせてそれらを表示するといったことができるようです。

auto_complete.gif

ScaffoldMessenger

これまでは、ScaffoldSnackBar の管理を行なっていたため、表示中に画面遷移すると、前の画面に SnackBar が残ったままになるなど、様々な問題が発生していました。Flutter 2 からは、ScaffoldMessengerSnackBar の管理を任せることで、これらの問題を解決することができるようになっています。これまでの、

Scaffold.of(context).showSnackBar(...)

という書き方は非推奨になり、今後は以下の方法で SnackBar を呼び出すことが推奨されます。

ScaffoldMessenger.of(context).showSnackBar(...)

詳しくは以下のドキュメントを参照してください。

scaffold_messenger.gif

Dart 2.12

Null safety が stable に

Flutter 2 に同梱されている Dart 2.12 から、 Null safety が stable になりました。

ただし、デフォルトでは有効化されておらず、以下のように pubspec.yaml で SDK のバージョンを 2.12.0 以上に指定することで有効化できます。

pubspec.yaml
environment:
  sdk: ">=2.12.0 <3.0.0"

dart migrate コマンド

dart migrate コマンドを使うことで、プロジェクトを自動で Null safety に移行することができます。詳しくは以下のマイグレーションガイドを参照してください。

FFI が stable に

Dart から C などの他言語を呼び出す機能である FFI が stable になりました。詳しくは Announcing Dart 2.12 を参照してください。

DevTools 関連

エラー発生時に DevTools を開く機能

エラー発生時に該当箇所を DevTools で開くためのポップアップが表示されるようになりました。今のところ表示されるのはレイアウトのオーバーフローエラーのみで、今後他のエラーについても対応予定です。
open_dev_tools_on_error.png

Layout Explorer

Layout Explorer で flex 系以外のウィジェット (Text など)も表示できるようになりました。

dev_tools_fixed_layout.png

画像サイズが大きすぎる時に教えてくれる機能

実際に表示されているサイズに対して、使っている画像サイズが大きすぎる場合に、上下反転するなどして教えてくれる機能が追加されました。
invert_oversized_image.png
DevTools を開いて、Invert Oversized Images という項目を ON にすることで有効化できます。
dev_tools_invert_oversized_images.png

その他の DevTools 関連のアップデート

  • 赤色のエラーラベル、エラーバッジの表示
  • Flutter frames chart で平均 fps の表示
  • 新しい memory view のチャート
  • Logging タブでの検索機能
  • DevTools を開く前のログも表示できるように
  • Performance ビューが CPU Profiler に名称変更
  • Timeline ビュー を Performance に名称変更
  • CPU Profilertiming grid を追加
  • など

詳しくは以下のリリースノートを参照してください。

IntelliJ 関連

  • UI の刷新
  • Linux 版で SDK のパスの指定が簡単になる(?)

などが紹介されていました。詳しくは以下のリリースノートを参照してください。

IntelliJ Plugin M51
IntelliJ Plugin M52
IntelliJ Plugin M53
IntelliJ Plugin M54

VSCode 関連

テスト失敗時に再度実行する機能

re-run_on_test_fail.png

LSP (Language Server Protocol)

デフォルトで Dart の LSP (Language Server Protocol) が使用されるようになりました。
dart_lsp.gif
pubspec.yamlanalysis_options.yaml での補完にも対応しています
dart_lsp_yaml.gif

その他の VSCode 関連のアップデート

以下のリリースノートを参照してください。

DartPad 関連

  • Flutter 2 に対応済み
  • Null safety の On / Off 機能

外部パッケージ関連

Google Mobile Ads

google_mobile_ads という、広告表示のための新しいパッケージが公開されました。従来の firebase_admob パッケージには無かった、ネイティブ広告などがサポートされており、広告を Widget として画面に組み込んで、スクロールに追従させるなどが可能になっています。

Sentry

エラー監視ツールである Sentry の Flutter 用 SDK が公開されています。

pub.green

pub.green というサイトでは、Flutter のバージョンと外部パッケージのバージョンの互換性を調べることができます。なお、開発元は Flutter 用の CI/CD サービスで有名な Codemagic です。

1000個以上のパッケージが Null safety に対応

pub.dev で人気トップ100 パッケージの内 98% が、トップ250 の内では 78% が Null safety に対応済みとのことです。また、Firebase 系 パッケージや、Flutter Community Plus パッケージも Null safety に対応している他、今回の Flutter 2 の発表に合わせて stable 化されているものも多いです。

Flutter Favorites にパッケージ追加

新しく6つのパッケージが追加されました。

Flutter Fix

最近の Flutter では、Null safety や Web 版、デスクトップ版への対応のため、Breaking Changes が増えてきています。これを受けて、開発者の負担をなるべく軽減するため、 Flutter Fix という仕組みが導入されました。

IntelliJ や VSCode などの IDE では、お馴染みの電球マークから、deprecated になった API を簡単に修正することができるようになっています。

flutter_fix_ide.png

また、 dart fix コマンドを使うことでプロジェクト内の deprecated になった API を一括で修正することも可能です。

# 修正可能なリストを表示
$ dart fix --dry-run

# 修正を適用
$ dart fix --apply

Add-to-App

ネイティブアプリに Flutter を組み込む機能である Add-to-App で、複数の Flutter インスタンスを起動する場合のコストが大幅に削減されました。詳しくは以下を参照してください。

その他

Folio

Folio という、スクラップブックアプリのソースコードが公開されています。モバイル、デスクトップ、Web 全てに対応しており、画面サイズの違いや、__タッチやマウスといった操作方法の違い__にどう対応するかの参考にしてほしいという意図のようです。

Ubuntu が Flutter を採用

Ubuntu の開発元である Canonical が、今後アプリケーションを開発する上で Flutter がデフォルトの選択肢となることを発表しました。既に Ubuntu インストーラーが Flutter で開発中とのことです。

ubuntu_flutter.png

Toyota が Flutter を採用

モバイルやデスクトップだけでなく、組み込み機器への採用も広がっています。今後はトヨタと協力して、この分野での開発が進められていく模様です。

toyota_flutter.png

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?