From 071afefc54a9b260853f325b7df976cb6dbf0ecd Mon Sep 17 00:00:00 2001 From: joungmin Date: Mon, 15 Jun 2026 13:17:56 +0900 Subject: [PATCH] =?UTF-8?q?[06-Reviewer]=20#311=20fileMissing=20=ED=9A=8C?= =?UTF-8?q?=EB=B3=B5=20=EC=9E=90=EB=8F=99=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SettingsScreen pop 후 ChatScreen state 가 여전히 Failed(fileMissing) 인 회로 — 사용자가 다운로드를 끝내고 돌아와도 ChatScreen 전체를 pop & re-push 해야 회복되는 UX gap. Navigator.push().then((_) => retry()) 로 SettingsScreen 닫힐 때 자동 retry. quickCheck 다시 → ready 면 load → Ready 회복. 다운로드 안 했으면 다시 Failed 로 떨어져 같은 배너 노출 (일관). `context.mounted` 가드는 ChatScreen 이 dispose 된 race 대비. Refs #311 --- app/lib/ui/screens/chat_screen.dart | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/app/lib/ui/screens/chat_screen.dart b/app/lib/ui/screens/chat_screen.dart index a8e8727..085377f 100644 --- a/app/lib/ui/screens/chat_screen.dart +++ b/app/lib/ui/screens/chat_screen.dart @@ -209,9 +209,17 @@ class _WarmupErrorBanner extends ConsumerWidget { child: OutlinedButton( onPressed: () { if (isFileMissing) { - Navigator.of(context).push(MaterialPageRoute( - builder: (_) => const SettingsScreen(), - )); + // SettingsScreen pop 후 자동 retry — 사용자가 거기서 다시 + // 다운로드를 완료했다면 ChatScreen 으로 돌아오자마자 회복. + // 다운로드 안 했으면 다시 Failed 로 떨어져 같은 배너 노출. + Navigator.of(context) + .push(MaterialPageRoute( + builder: (_) => const SettingsScreen(), + )) + .then((_) { + if (!context.mounted) return; + ref.read(chatWarmupProvider.notifier).retry(); + }); } else { ref.read(chatWarmupProvider.notifier).retry(); }