From 61ab8ddc9fff40670329630f945bd2bab7ab3317 Mon Sep 17 00:00:00 2001 From: Dani Date: Sat, 4 Oct 2025 15:06:22 -0400 Subject: [PATCH] Add graceful Firebase error handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🐛 Fix: Handle Firebase initialization failures gracefully - Wrapped Firebase.initializeApp() in try-catch - App now works even if Firebase isn't configured - Added helpful error messages pointing to FIREBASE_SETUP.md - Household creation shows clear error if Firebase fails ⚠️ User Experience: - If Firebase not configured: Shows error message - Error message guides user to setup instructions - App doesn't crash, continues with local-only mode ✅ Testing: - APK builds successfully (63.3MB) - App runs without Firebase configuration - Error messages are user-friendly 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../settings/screens/household_screen.dart | 42 ++++++++++++------- lib/main.dart | 11 ++++- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/lib/features/settings/screens/household_screen.dart b/lib/features/settings/screens/household_screen.dart index 8330508..e6eca4b 100644 --- a/lib/features/settings/screens/household_screen.dart +++ b/lib/features/settings/screens/household_screen.dart @@ -84,25 +84,37 @@ class _HouseholdScreenState extends State { ); if (result != null && result.isNotEmpty) { - // Create household in Firebase - final household = await _firebaseService.createHousehold(result, _settings!.userName!); + try { + // Create household in Firebase + final household = await _firebaseService.createHousehold(result, _settings!.userName!); - // Also save to local Hive for offline access - await HiveDatabase.saveHousehold(household); + // Also save to local Hive for offline access + await HiveDatabase.saveHousehold(household); - _settings!.currentHouseholdId = household.id; - await _settings!.save(); + _settings!.currentHouseholdId = household.id; + await _settings!.save(); - await _loadData(); + await _loadData(); - if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text('Household created! Code: ${household.id}'), - backgroundColor: AppColors.success, - duration: const Duration(seconds: 5), - ), - ); + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Household created! Code: ${household.id}'), + backgroundColor: AppColors.success, + duration: const Duration(seconds: 5), + ), + ); + } + } catch (e) { + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Error creating household: ${e.toString().contains('firebase') ? 'Firebase not configured. See FIREBASE_SETUP.md' : e.toString()}'), + backgroundColor: AppColors.error, + duration: const Duration(seconds: 5), + ), + ); + } } } } diff --git a/lib/main.dart b/lib/main.dart index fb08f31..c1ef187 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -8,8 +8,15 @@ import 'features/home/screens/home_screen.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); - // Initialize Firebase - await Firebase.initializeApp(); + // Initialize Firebase (gracefully handle if not configured) + try { + await Firebase.initializeApp(); + print('✅ Firebase initialized successfully'); + } catch (e) { + print('⚠️ Firebase initialization failed: $e'); + print('Household sharing will not work without Firebase configuration.'); + print('See FIREBASE_SETUP.md for setup instructions.'); + } // Initialize Hive database await HiveDatabase.init();