diff --git a/lib/screens/sake_detail_screen.dart b/lib/screens/sake_detail_screen.dart index 7928f04..97ee64f 100644 --- a/lib/screens/sake_detail_screen.dart +++ b/lib/screens/sake_detail_screen.dart @@ -301,7 +301,11 @@ class _SakeDetailScreenState extends ConsumerState { Future _reanalyze(BuildContext context) async { // 1. Check Locks if (_isAnalyzing) return; - + + // async gap 前に context 依存オブジェクトをキャプチャ + final nav = Navigator.of(context); + final messenger = ScaffoldMessenger.of(context); + // 2. Check Quota Lockout final quotaLockout = ref.read(quotaLockoutProvider); if (quotaLockout != null) { @@ -309,7 +313,7 @@ class _SakeDetailScreenState extends ConsumerState { if (remaining.isNegative) { ref.read(quotaLockoutProvider.notifier).set(null); } else { - ScaffoldMessenger.of(context).showSnackBar( + messenger.showSnackBar( SnackBar(content: Text('AI利用制限中です。あと${remaining.inSeconds}秒お待ちください。')), ); return; @@ -326,8 +330,6 @@ class _SakeDetailScreenState extends ConsumerState { } } if (!mounted) return; - final nav = Navigator.of(context); - final messenger = ScaffoldMessenger.of(context); if (existingPaths.isEmpty) { messenger.showSnackBar( @@ -339,13 +341,8 @@ class _SakeDetailScreenState extends ConsumerState { setState(() => _isAnalyzing = true); try { - // ignore: use_build_context_synchronously - // mounted チェック済み(334行目)かつ await なしで呼び出すため安全 - showDialog( - context: context, - barrierDismissible: false, - builder: (context) => const AnalyzingDialog(), - ); + // ignore: use_build_context_synchronously + showDialog(context: context, barrierDismissible: false, builder: (context) => const AnalyzingDialog()); final geminiService = ref.read(geminiServiceProvider); final result = await geminiService.analyzeSakeLabel(existingPaths, forceRefresh: true);