Open4

【Flutter】FlutterKaigi2024

ちっぴーちっぴー

キャンセルします!処理を

  • 呼び出す側は開始とキャンセルを要求し、呼ばれる側は開始と後始末を行い、相互に協調的に処理をすることが大切。
  • Swift には Task.isCancelled と guard で対応できる。
    Kotlin にも Job と CancellationException で対応できる。
    Dart には ... ハッハッハ。
  • Start -> Await -> Cancel の3つに分けて用意する
    1. Start で id を発行してもらう
    2. Await で id に対応をした Job を待つ
    3. Cancel で id に対応した Job をキャンセルする
  • キャンセルで発生する Exception は Error Tracking や Metics で監視に投げて、色々と分析に繋げよう
ちっぴーちっぴー

Flutterアプリで可用性を向上させたFeatureFlagの運用戦略とその方法

  • トランクベース開発で進めていく際に FeatureFlag によって、中途半端な機能を閉じてリリースを進めていける。
  • WINTICKET の Feature 層は、ConnectedScreen を用意して、ホイスティングでやってるみたい。
  • Feature Toggles という記事が参考になる。WINTICKET では RemoteConfig と SharedPreferences で用途に応じて、2種類を使用している。
  • Widget 自体を切り分けたい場合は FlagBuilder ( onBuilder / offBuilder ) を用意して、それで分岐させていて、ルーティングを分ける場合、auto_route の guard で対応している。
  • 既存の実装やデータフローを残しながら、Flag で切り分けるようにできるとバグが生まれにくい。
  • actions を用いて、PR 時に flag が使われている場合に warning を出す仕組みなどを入れているが、custom-lint で気付けるようにしたいとのこと。
ちっぴーちっぴー

実践的パッケージ戦略

  • override を集めてくれるパッケージ override_pod_generator
  • Domain 層に Network 層の インターフェースを持たせてた
  • 各パッケージをクリーンアーキテクチャの図で示すとこうなる
ちっぴーちっぴー

アニメーションを最深まで理解してパフォーマンスを向上させる

  • Implicit / Explicit Animation の2種類が存在している。
  • アニメーションは単に高速でコマを描画しているにすぎない。
  1. Ticker
    • frame を制御している
  2. vsync
    • 画面のリフレッシュレートに応じて描写する
  3. SingleTickerProviderStateMixin
    • Widget tree が有効な場合に、その Ticker を更新してくれるやつ
  • PerformanceView を用いて、どれだけ重たいかを計測する(ただし、Profile Mode で実行すること)。
  • AnimatedController の個数を減らす(不要に分かれているなら、一括で管理する)。
    metrics が高い部分があれば、 RepaintBoundary を用いて、再描写する範囲を抑える(ただし、AnimatedBuilder を使用したり、Component にしたりしても解決できない場合のみに留めておく)。