Open4

Flutterのメモ帳

たなたつたなたつ

Flutter EngageのKeynoteを見た


(https://developers.googleblog.com/2021/03/announcing-flutter-2.html)

Flutter

  • Flutter 2になった (既存コードに変更は不要)
  • Web対応がstableに (irobotのサイトでも採用: https://code.irobot.com/#/)
  • デスクトップ対応の強化: Ubuntu対応
  • Microsoftによる折りたたみAndroid対応
  • Toyotaの組み込みデバイスにFlutterが採用
  • Google Mobile AdsのFlutter対応
    • https://pub.dev/packages/google_mobile_ads
    • 普通のWidgetとしてinlineでバナーを表示したりネイティブAdを表示できる!(サードパーティのプラグインは不要になりそう)
    • nullsafetyにはまだ対応してなかった...
  • iOS/Android/Web/Windows/Ubuntu/macOSで動くデモ
  • FlutterのWebのパフォーマンスがわかるデモ
  • UbuntuのOSインストーラがFlutter化予定 (凄すぎ)
  • flutter fixツールで APIの破壊的変更に自動で対応
  • Layout Explorerでレイアウトエラー箇所が視覚的にわかり、GUIで値を変更して動作を確認できる
    • (実際にコードに適用するのは手動)
  • Dev Toolでアプリのサイズの中身の内訳が詳細に見れる

Dart

  • Dartのnull安全がstableに
  • sound null safetyに対応すると生成される機械語の命令が減る (最適化)
  • アプリのサイズが減った (Google Payでは 14%減: flutter-sizeopt)
  • UTF8のデコードが高速化
  • ffiのstable化 (C言語のAPIと接続する仕組み)
    • 同期的にネイティブコードと連携できる
  • kotlinのdataクラスのようなものの採用を検討中 (静的なメタプログラミングによる実装を検討)

参考資料

たなたつたなたつ

Add-to-app (既存のiOSアプリやAndroidアプリにFlutterを組み込む技術) の進化に期待

今まではFlutterの画面を表示するために必要なFlutterEngineは1インスタンスごとに、Androidでは19MB, iOSでは13MBかかっていたため、現実的には1つしか作れないことが多かった。
そのため、ネイティブの画面とFlutterの画面が入り混じっているようなものを作ってしまうと、これらの制約のためアプリのUX設計に影響が出てしまうことがあった。

しかし、Flutter 1.26からFlutterEngineGroupという複数のエンジン生成をサポートする機能が入り、2つ目以降のエンジンの生成は 180kb ほどになった。
つまり、画面の一部分だけFlutterにしたり、Flutter→ネイティブ→Flutter→ネイティブといった複雑な画面遷移などがあっても、ワークアラウンドや無理な実装無しで実装することができるようになる。

素敵

参考資料

https://flutter.dev/docs/development/add-to-app/multiple-flutters

たなたつたなたつ

FlutterEngineGroupを使って、SwiftUI x Flutterを雑にやってみた (Flutter 2.0.0)

  • Flutter側をAdd-to-appでframeworkとしてiOSアプリに組み込んでいる。
  • FlutterViewControllerをSwiftUIでラップして表示している。
  • 各WidgetはFlutter 1.26.0で使えるようになったFlutterEngineGroupを使って生成した別のFlutterEngineで動かすアグレッシブな実装。(これができればかなり柔軟な組み込みが可能になる)

メモリのコストは安くなっても流石にEngineの起動速度は爆速というわけではなかった。

https://github.com/tattn/MultiFlutterEngineApp

追記: Flutter 2.0.0で試しているのになぜかメモリを爆食いしてる...実装が悪いのか、まだFlutter側が安定してないのか、M1 Macだからなのか 🤔

https://github.com/flutter/flutter/issues/72009

追記2: ちょっと不安定っぽい

たなたつたなたつ

Google Mobile AdsのFlutter版の注意点 (2021/03/05)

https://pub.dev/packages/google_mobile_ads

  • nullsafetyに対応してない
  • Adaptive Bannerに対応してない
  • iOS 14.5で出すべきIDFA許諾ダイアログの機能はない
  • iOSでの検証がまだ甘いかも
  • まだ基礎的なところの不具合多いので、issueやPRを見て人柱になる覚悟で臨みましょう

https://github.com/googleads/googleads-mobile-flutter/pull/39
https://github.com/googleads/googleads-mobile-flutter/pull/38