Open4
【Flutter】FlutterKaigi2024
キャンセルします!処理を
- 呼び出す側は開始とキャンセルを要求し、呼ばれる側は開始と後始末を行い、相互に協調的に処理をすることが大切。
- Swift には Task.isCancelled と guard で対応できる。
Kotlin にも Job と CancellationException で対応できる。
Dart には ... ハッハッハ。 - Start -> Await -> Cancel の3つに分けて用意する
- Start で id を発行してもらう
- Await で id に対応をした Job を待つ
- 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種類が存在している。
- アニメーションは単に高速でコマを描画しているにすぎない。
- Ticker
- frame を制御している
- vsync
- 画面のリフレッシュレートに応じて描写する
- SingleTickerProviderStateMixin
- Widget tree が有効な場合に、その Ticker を更新してくれるやつ
- PerformanceView を用いて、どれだけ重たいかを計測する(ただし、Profile Mode で実行すること)。
- AnimatedController の個数を減らす(不要に分かれているなら、一括で管理する)。
metrics が高い部分があれば、 RepaintBoundary を用いて、再描写する範囲を抑える(ただし、AnimatedBuilder を使用したり、Component にしたりしても解決できない場合のみに留めておく)。