Skip to content

ホームに戻ると稀に真っ白になる不具合を修正 - #67

Merged
Atsumi3 merged 1 commit into
mainfrom
fix/blank-home-screen
Aug 24, 2026
Merged

ホームに戻ると稀に真っ白になる不具合を修正#67
Atsumi3 merged 1 commit into
mainfrom
fix/blank-home-screen

Conversation

@Atsumi3

@Atsumi3 Atsumi3 commented Aug 24, 2026

Copy link
Copy Markdown
Member

背景

練習モードから本番モードに切り替えてホームに戻ると、たまに画面が真っ白になるという報告を受けて調査した。再現条件が「たまに」であることから、タイミング依存の欠陥を洗い出した。

原因と修正

1. 戻る操作の二重実行でバックスタックが空になる(真っ白の主因)

AppNavHost の戻るコールバックに多重呼び出しのガードが無く、遷移アニメーション中にもう一度戻る矢印を押せてしまう。二度目の popBackStack が設定画面に続けてホームまでポップし、バックスタックが空になると NavHost は何も描画しないため画面が真っ白になる。

  • NavBackStackEntry のライフサイクルが RESUMED の間だけ遷移を受け付けるガードを入れた
  • 戻る操作を popBackStack に設定画面を明示した inclusive 指定へ変え、意図しないホームのポップを防いだ
  • 設定画面へ進む側にも同じガードを入れ、設定画面が二重に積まれないようにした

2. Activity 再生成時にスプラッシュ保持で白い背景が露出する

MainActivity は onCreate のたびに 2 秒間の描画停止を掛けていた。構成変更やプロセス復帰による再生成ではシステムのスプラッシュが描かれないため、白い window background がそのまま見えていた。初回作成時だけ保持するようにした。

3. モード切り替えが保存されないことがある

設定の永続化を viewModelScope で行っていたため、書き込み直後に画面を離れると ViewModel が破棄されてスコープが取り消され、モード変更が黙って失われていた。アプリケーションスコープでの書き込みに変更した。ホームの店舗選択とスタッフ設定も同じ理由で移した。

4. 保存値が壊れていると購読側が例外で落ちる

SettingsRepository は保存済み JSON のデコード失敗や DataStore の読み取り失敗をそのまま流していた。購読しているホームの collect には try/catch が無く、そのままアプリが落ちる経路になっていた。リポジトリ側で既定値へフォールバックするようにした。

5. ドロワーの設定項目が閉じるアニメーションを中断する

閉じる処理の完了を待たずに遷移していたため、rememberCoroutineScope が取り消されて閉じるアニメーションが中断し、開いた状態が復元され得た。閉じ切ってから遷移するようにした。

テスト

  • AppNavHostTest を新規追加。初期表示、往復遷移、遷移中の連打で真っ白にならないこと、設定画面が二重に積まれないことを検証する
  • MainScreenTest にドロワーの設定項目がドロワーを閉じ切ってから遷移することの検証を追加
  • SettingsRepositoryTest に壊れた保存値、未知のモード文字列、読み取り失敗のフォールバックを追加
  • SettingsViewModelTest と MainViewModelTest に、画面を離れた直後でも設定が保存されることの検証を追加

Generated by Claude Code

- 遷移アニメーション中の二重タップでバックスタックが空になり何も描画されなくなる問題を、RESUMED 中のみ遷移を受け付けるガードで防ぐ
- 戻る操作を popBackStack(settings, inclusive) にして意図しない main のポップを防ぐ
- Activity 再生成時にスプラッシュ保持で白い背景が露出する問題を初回作成時のみの保持に変更
- 設定の永続化を viewModelScope からアプリケーションスコープへ移し、書き込み直後に画面を離れてもモード変更が失われないようにする
- 設定の読み取り失敗や壊れた値で購読側が落ちないよう既定値へフォールバックする
- ドロワーの設定項目は閉じ切ってから遷移するようにする
- 上記の回帰テストを追加
github-actions Bot added a commit that referenced this pull request Aug 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

UI差分

基準画像との差分はありません。

全画面スクリーンショット

main_screen

main_screen

main_screen_account_result

main_screen_account_result

main_screen_calculator

main_screen_calculator

main_screen_calculator_shortage

main_screen_calculator_shortage

main_screen_drawer

main_screen_drawer

main_screen_empty

main_screen_empty

main_screen_error

main_screen_error

main_screen_item_selection

main_screen_item_selection

main_screen_item_selection_failed

main_screen_item_selection_failed

main_screen_item_selection_loading

main_screen_item_selection_loading

main_screen_store_selection

main_screen_store_selection

main_screen_store_selection_failed

main_screen_store_selection_failed

main_screen_store_selection_loading

main_screen_store_selection_loading

settings_screen

settings_screen

settings_screen_danger_zone_locked

settings_screen_danger_zone_locked

settings_screen_install_not_permitted

settings_screen_install_not_permitted

settings_screen_up_to_date

settings_screen_up_to_date

settings_screen_update_available

settings_screen_update_available

settings_screen_update_check_failed

settings_screen_update_check_failed

@Atsumi3
Atsumi3 merged commit edca8d4 into main Aug 24, 2026
2 checks passed
@Atsumi3
Atsumi3 deleted the fix/blank-home-screen branch August 24, 2026 19:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant