feat: Refactor sign-in/sign-out handling and invalidate providers for state refresh

Changed files
+15 -7
lib
+15 -7
lib/main.dart
··· 6 6 import 'package:grain/app_logger.dart'; 7 7 import 'package:grain/app_theme.dart'; 8 8 import 'package:grain/auth.dart'; 9 + import 'package:grain/providers/notifications_provider.dart'; 10 + import 'package:grain/providers/profile_provider.dart'; 9 11 import 'package:grain/screens/home_page.dart'; 10 12 import 'package:grain/screens/login_page.dart'; 11 13 import 'package:grain/websocket_service.dart'; 12 14 13 - import 'providers/profile_provider.dart'; 14 15 import 'widgets/skeleton_timeline.dart'; 15 16 16 17 class AppConfig { ··· 125 126 } 126 127 } 127 128 128 - void handleSignIn() async { 129 + // Invalidate providers to refresh data after sign in/sign out 130 + void _invalidateProviders() { 131 + final container = ProviderScope.containerOf(context, listen: false); 132 + container.invalidate(profileNotifierProvider); 133 + container.invalidate(notificationsProvider); 134 + } 135 + 136 + void _handleSignIn() async { 129 137 setState(() { 130 138 isSignedIn = true; 131 139 }); 132 140 appLogger.i('Fetching current user after sign in'); 133 141 await apiService.fetchCurrentUser(); 142 + _invalidateProviders(); 134 143 _connectWebSocket(); 135 144 } 136 145 137 - void handleSignOut(BuildContext context) async { 138 - final container = ProviderScope.containerOf(context, listen: false); 146 + void _handleSignOut(BuildContext context) async { 147 + _invalidateProviders(); 139 148 await auth.clearSession(); 140 - container.invalidate(profileNotifierProvider); 141 149 setState(() { 142 150 isSignedIn = false; 143 151 }); ··· 160 168 ); 161 169 } else { 162 170 home = isSignedIn 163 - ? MyHomePage(title: 'Grain', onSignOut: () => handleSignOut(context)) 164 - : LoginPage(onSignIn: handleSignIn); 171 + ? MyHomePage(title: 'Grain', onSignOut: () => _handleSignOut(context)) 172 + : LoginPage(onSignIn: _handleSignIn); 165 173 } 166 174 return MaterialApp( 167 175 title: 'Grain',