fix: login crashes
This commit is contained in:
@@ -233,7 +233,7 @@ final currentUserProvider = FutureProvider<User?>((ref) async {
|
|||||||
// Helper provider to force refresh auth state - now using unified system
|
// Helper provider to force refresh auth state - now using unified system
|
||||||
final refreshAuthStateProvider = Provider<void>((ref) {
|
final refreshAuthStateProvider = Provider<void>((ref) {
|
||||||
// This provider can be invalidated to force refresh the unified auth system
|
// This provider can be invalidated to force refresh the unified auth system
|
||||||
ref.read(refreshAuthProvider);
|
ref.read(refreshAuthProvider)();
|
||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -5,34 +5,34 @@ import '../../../core/providers/app_providers.dart';
|
|||||||
/// Unified auth providers using the new auth state manager
|
/// Unified auth providers using the new auth state manager
|
||||||
/// These replace the old auth providers for better efficiency
|
/// These replace the old auth providers for better efficiency
|
||||||
|
|
||||||
/// Login action provider
|
/// Login action provider (schedules side-effect outside provider build)
|
||||||
final loginActionProvider = Provider.family<Future<bool>, Map<String, String>>((
|
final loginActionProvider = Provider.family<Future<bool>, Map<String, String>>(
|
||||||
ref,
|
(ref, credentials) async {
|
||||||
credentials,
|
|
||||||
) async {
|
|
||||||
final authManager = ref.read(authStateManagerProvider.notifier);
|
final authManager = ref.read(authStateManagerProvider.notifier);
|
||||||
|
|
||||||
final username = credentials['username']!;
|
final username = credentials['username']!;
|
||||||
final password = credentials['password']!;
|
final password = credentials['password']!;
|
||||||
final rememberCredentials = credentials['remember'] == 'true';
|
final rememberCredentials = credentials['remember'] == 'true';
|
||||||
|
|
||||||
return await authManager.login(
|
// Defer the mutation to avoid changing other providers during build
|
||||||
|
return Future(() => authManager.login(
|
||||||
username,
|
username,
|
||||||
password,
|
password,
|
||||||
rememberCredentials: rememberCredentials,
|
rememberCredentials: rememberCredentials,
|
||||||
);
|
));
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
/// Silent login action provider - returns a callback to run later
|
||||||
|
final silentLoginActionProvider = Provider<Future<bool> Function()>((ref) {
|
||||||
|
final authManager = ref.read(authStateManagerProvider.notifier);
|
||||||
|
return () => authManager.silentLogin();
|
||||||
});
|
});
|
||||||
|
|
||||||
/// Silent login action provider
|
/// Logout action provider - returns a callback to run later
|
||||||
final silentLoginActionProvider = Provider<Future<bool>>((ref) async {
|
final logoutActionProvider = Provider<Future<void> Function()>((ref) {
|
||||||
final authManager = ref.read(authStateManagerProvider.notifier);
|
final authManager = ref.read(authStateManagerProvider.notifier);
|
||||||
return await authManager.silentLogin();
|
return () => authManager.logout();
|
||||||
});
|
|
||||||
|
|
||||||
/// Logout action provider
|
|
||||||
final logoutActionProvider = Provider<Future<void>>((ref) async {
|
|
||||||
final authManager = ref.read(authStateManagerProvider.notifier);
|
|
||||||
await authManager.logout();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/// Check if saved credentials exist
|
/// Check if saved credentials exist
|
||||||
@@ -70,10 +70,10 @@ final authStatusProvider = Provider<AuthStatus>((ref) {
|
|||||||
return ref.watch(authStateManagerProvider.select((state) => state.status));
|
return ref.watch(authStateManagerProvider.select((state) => state.status));
|
||||||
});
|
});
|
||||||
|
|
||||||
/// Helper provider to trigger auth refresh
|
/// Helper provider to trigger auth refresh - returns a callback
|
||||||
final refreshAuthProvider = Provider<Future<void>>((ref) async {
|
final refreshAuthProvider = Provider<Future<void> Function()>((ref) {
|
||||||
final authManager = ref.read(authStateManagerProvider.notifier);
|
final authManager = ref.read(authStateManagerProvider.notifier);
|
||||||
await authManager.refresh();
|
return () => authManager.refresh();
|
||||||
});
|
});
|
||||||
|
|
||||||
/// Provider to watch for auth state changes and update API service
|
/// Provider to watch for auth state changes and update API service
|
||||||
|
|||||||
@@ -762,7 +762,7 @@ class ProfilePage extends ConsumerWidget {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (confirm) {
|
if (confirm) {
|
||||||
await ref.read(logoutActionProvider);
|
await ref.read(logoutActionProvider)();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ class _ConduitAppState extends ConsumerState<ConduitApp> {
|
|||||||
hasSavedCredentialsProvider2.future,
|
hasSavedCredentialsProvider2.future,
|
||||||
);
|
);
|
||||||
if (hasCreds) {
|
if (hasCreds) {
|
||||||
await ref.read(silentLoginActionProvider);
|
await ref.read(silentLoginActionProvider)();
|
||||||
}
|
}
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
// Ignore errors, fallback to showing unified page
|
// Ignore errors, fallback to showing unified page
|
||||||
|
|||||||
Reference in New Issue
Block a user