From 7965d654524454fc00218d2e4069fdd0ccde9a5d Mon Sep 17 00:00:00 2001 From: Roscoe Rubin-Rottenberg Date: Sat, 10 Jan 2026 20:43:28 -0500 Subject: [PATCH] fix(auth): signup flow working --- .../auth/providers/auth_providers.dart | 14 +++-- .../auth/providers/onboarding_providers.dart | 6 ++ .../features/auth/ui/pages/register_page.dart | 56 +++++++++++-------- 3 files changed, 48 insertions(+), 28 deletions(-) diff --git a/lib/src/features/auth/providers/auth_providers.dart b/lib/src/features/auth/providers/auth_providers.dart index c16452da..f86c62cd 100644 --- a/lib/src/features/auth/providers/auth_providers.dart +++ b/lib/src/features/auth/providers/auth_providers.dart @@ -18,7 +18,7 @@ AuthRepository authRepository(Ref ref) { /// Authentication notifier for the application /// Provides higher-level authentication operations and state management -@riverpod +@Riverpod(keepAlive: true) class Auth extends _$Auth { late final AuthRepository _authRepository; late final LogService _logService; @@ -107,9 +107,15 @@ class Auth extends _$Auth { password, inviteCode, ); - _updateState(); - state = state.copyWith(isLoading: false, error: result.error); - return LoginResult.success(); + + if (result.success) { + _updateState(); + state = state.copyWith(isLoading: false); + return LoginResult.success(); + } else { + state = state.copyWith(isLoading: false, error: result.error); + return LoginResult.failed(result.error ?? 'Registration failed'); + } } catch (e, stackTrace) { _logger.e('Registration error', error: e, stackTrace: stackTrace); final errorMsg = 'Registration failed: $e'; diff --git a/lib/src/features/auth/providers/onboarding_providers.dart b/lib/src/features/auth/providers/onboarding_providers.dart index ef692c4c..d60e1e6d 100644 --- a/lib/src/features/auth/providers/onboarding_providers.dart +++ b/lib/src/features/auth/providers/onboarding_providers.dart @@ -63,8 +63,10 @@ class OnboardingState extends _$OnboardingState { avatar: bskyProfile.avatar, ); + if (!ref.mounted) return; state = const AsyncData(null); } catch (e, stackTrace) { + if (!ref.mounted) return; state = AsyncError(e, stackTrace); } } @@ -86,8 +88,10 @@ class OnboardingState extends _$OnboardingState { avatar: avatar, ); + if (!ref.mounted) return; state = const AsyncData(null); } catch (e, stackTrace) { + if (!ref.mounted) return; state = AsyncError(e, stackTrace); } } @@ -114,8 +118,10 @@ class OnboardingState extends _$OnboardingState { hasMore = cursor != null; } + if (!ref.mounted) return; state = const AsyncData(null); } catch (e, stackTrace) { + if (!ref.mounted) return; state = AsyncError(e, stackTrace); } } diff --git a/lib/src/features/auth/ui/pages/register_page.dart b/lib/src/features/auth/ui/pages/register_page.dart index e0595e8c..4222799f 100644 --- a/lib/src/features/auth/ui/pages/register_page.dart +++ b/lib/src/features/auth/ui/pages/register_page.dart @@ -47,38 +47,46 @@ class _RegisterPageState extends ConsumerState { _errorMessage = null; }); - final handle = '${_handleController.text}.sprk.so'; - - final authNotifier = ref.read(authProvider.notifier); - final result = await authNotifier.register( - handle, - _emailController.text, - _passwordController.text, - _inviteCodeController.text.isEmpty ? null : _inviteCodeController.text, - ); + try { + final handle = '${_handleController.text}.sprk.so'; - setState(() { - _isRegistering = false; - }); + final authNotifier = ref.read(authProvider.notifier); + final result = await authNotifier.register( + handle, + _emailController.text, + _passwordController.text, + _inviteCodeController.text.isEmpty ? null : _inviteCodeController.text, + ); - if (result.isSuccess) { - final hasProfile = await ref.read(hasSparkProfileProvider.future); - if (!mounted) return; + if (result.isSuccess) { + // Invalidate and refresh the provider to get fresh state after registration + ref.invalidate(hasSparkProfileProvider); + final hasProfile = await ref.read(hasSparkProfileProvider.future); + if (!mounted) return; - if (hasProfile) { - // Sync preferences from server before navigating to feed - // This ensures feeds are loaded properly after registration - await ref.read(settingsProvider.notifier).syncPreferencesFromServer(); + if (hasProfile) { + // Sync preferences from server before navigating to feed + // This ensures feeds are loaded properly after registration + await ref.read(settingsProvider.notifier).syncPreferencesFromServer(); - if (!mounted) return; + if (!mounted) return; - context.router.replace(const FeedsRoute()); + context.router.replace(const FeedsRoute()); + } else { + context.router.replace(const OnboardingRoute()); + } } else { - context.router.replace(const OnboardingRoute()); + if (!mounted) return; + setState(() { + _isRegistering = false; + _errorMessage = result.error; + }); } - } else { + } catch (e) { + if (!mounted) return; setState(() { - _errorMessage = result.error; + _isRegistering = false; + _errorMessage = 'An error occurred: $e'; }); } } -- 2.51.2