diff --git a/lib/core/providers/app_providers.dart b/lib/core/providers/app_providers.dart index ab6ac4c..a104916 100644 --- a/lib/core/providers/app_providers.dart +++ b/lib/core/providers/app_providers.dart @@ -233,7 +233,7 @@ final currentUserProvider = FutureProvider((ref) async { // Helper provider to force refresh auth state - now using unified system final refreshAuthStateProvider = Provider((ref) { // This provider can be invalidated to force refresh the unified auth system - ref.read(refreshAuthProvider); + ref.read(refreshAuthProvider)(); return; }); diff --git a/lib/features/auth/providers/unified_auth_providers.dart b/lib/features/auth/providers/unified_auth_providers.dart index afe9224..db27048 100644 --- a/lib/features/auth/providers/unified_auth_providers.dart +++ b/lib/features/auth/providers/unified_auth_providers.dart @@ -5,34 +5,34 @@ import '../../../core/providers/app_providers.dart'; /// Unified auth providers using the new auth state manager /// These replace the old auth providers for better efficiency -/// Login action provider -final loginActionProvider = Provider.family, Map>(( - ref, - credentials, -) async { +/// Login action provider (schedules side-effect outside provider build) +final loginActionProvider = Provider.family, Map>( + (ref, credentials) async { + final authManager = ref.read(authStateManagerProvider.notifier); + + final username = credentials['username']!; + final password = credentials['password']!; + final rememberCredentials = credentials['remember'] == 'true'; + + // Defer the mutation to avoid changing other providers during build + return Future(() => authManager.login( + username, + password, + rememberCredentials: rememberCredentials, + )); + }, +); + +/// Silent login action provider - returns a callback to run later +final silentLoginActionProvider = Provider Function()>((ref) { final authManager = ref.read(authStateManagerProvider.notifier); - - final username = credentials['username']!; - final password = credentials['password']!; - final rememberCredentials = credentials['remember'] == 'true'; - - return await authManager.login( - username, - password, - rememberCredentials: rememberCredentials, - ); + return () => authManager.silentLogin(); }); -/// Silent login action provider -final silentLoginActionProvider = Provider>((ref) async { +/// Logout action provider - returns a callback to run later +final logoutActionProvider = Provider Function()>((ref) { final authManager = ref.read(authStateManagerProvider.notifier); - return await authManager.silentLogin(); -}); - -/// Logout action provider -final logoutActionProvider = Provider>((ref) async { - final authManager = ref.read(authStateManagerProvider.notifier); - await authManager.logout(); + return () => authManager.logout(); }); /// Check if saved credentials exist @@ -70,10 +70,10 @@ final authStatusProvider = Provider((ref) { return ref.watch(authStateManagerProvider.select((state) => state.status)); }); -/// Helper provider to trigger auth refresh -final refreshAuthProvider = Provider>((ref) async { +/// Helper provider to trigger auth refresh - returns a callback +final refreshAuthProvider = Provider Function()>((ref) { final authManager = ref.read(authStateManagerProvider.notifier); - await authManager.refresh(); + return () => authManager.refresh(); }); /// Provider to watch for auth state changes and update API service diff --git a/lib/features/profile/views/profile_page.dart b/lib/features/profile/views/profile_page.dart index 5908ca1..2b98878 100644 --- a/lib/features/profile/views/profile_page.dart +++ b/lib/features/profile/views/profile_page.dart @@ -762,7 +762,7 @@ class ProfilePage extends ConsumerWidget { ); if (confirm) { - await ref.read(logoutActionProvider); + await ref.read(logoutActionProvider)(); } } } diff --git a/lib/main.dart b/lib/main.dart index ee48c0f..38ed275 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -181,7 +181,7 @@ class _ConduitAppState extends ConsumerState { hasSavedCredentialsProvider2.future, ); if (hasCreds) { - await ref.read(silentLoginActionProvider); + await ref.read(silentLoginActionProvider)(); } } catch (_) { // Ignore errors, fallback to showing unified page