3.9 KiB
3.9 KiB
Sign-In Redirect Fix - ChooseServiceScreen
Issue
After successful sign-in, users should be redirected to ChooseServiceScreen instead of other screens.
Changes Made
1. Updated MAIN Graph Start Destination
File: MainNavGraph.kt
Changed the start destination of MAIN graph to ChooseServiceScreen:
navigation(
route = Graph.MAIN,
startDestination = AppScreen.chooseService("1") // ✅ ChooseServiceScreen
)
2. Simplified Sign-In Navigation
File: AuthNavGraph.kt
Simplified the onSuccess callback to navigate directly to Graph.MAIN, which automatically uses the start destination (ChooseServiceScreen):
Before:
onSuccess = {
// Complex navigation with delays and multiple steps
navController.navigate(Graph.MAIN) { ... }
// Then navigate to ChooseServiceScreen after delay
CoroutineScope(Dispatchers.Main).launch {
delay(200)
navController.navigate(AppScreen.chooseService("1")) { ... }
}
}
After:
onSuccess = {
// Simple navigation - MAIN graph starts at ChooseServiceScreen
navController.navigate(Graph.MAIN) {
popUpTo(Graph.AUTH) { inclusive = true }
launchSingleTop = true
}
}
3. Updated Sign-In Flow Comments
File: OTPScreen.kt
Updated comments to clarify that sign-in navigates to ChooseServiceScreen:
if (isSignInFlow) {
// For existing users (sign-in), navigate to ChooseServiceScreen
android.util.Log.d("OTPScreen", "Existing user - navigating to ChooseServiceScreen")
onSuccess() // This navigates to ChooseServiceScreen
}
Navigation Flow
Sign-In Flow:
- User enters phone number →
SignInScreen - User enters OTP →
OTPScreen - OTP verified →
authManager.login()succeeds - Tokens saved →
mainViewModel.refreshAuthStatus()called onSuccess()callback triggered- Navigate to
Graph.MAIN→ ChooseServiceScreen ✅
Sign-Up Flow:
- User fills signup form →
SignUpScreen - User enters OTP →
OTPScreen - OTP verified → User created/updated
- Signup API called → Profile updated
- Navigate to
Graph.MAIN→ ChooseServiceScreen ✅
App Startup Flow:
- App opens →
MainViewModelchecks tokens - If tokens valid →
authState = Authenticated AppNavigationsetsstartDestination = Graph.MAINGraph.MAINstarts at ChooseServiceScreen ✅
Route Structure
MAIN Graph:
- Start Destination:
choose_service/1(ChooseServiceScreen) - Other Routes:
buy_animals(BuyScreen)create_profile/{name}(CreateProfileScreen)- etc.
AUTH Graph:
- Start Destination:
landing(LandingScreen) - Other Routes:
sign_in(SignInScreen)sign_up(SignUpScreen)otp/{phoneNumber}/{name}(OTPScreen)- etc.
Testing
✅ Test Sign-In:
- Open app → Landing screen
- Click "Sign In"
- Enter phone number
- Enter OTP
- After successful verification → Should navigate to ChooseServiceScreen ✅
✅ Test Sign-Up:
- Open app → Landing screen
- Click "Sign Up"
- Fill form and enter OTP
- After successful signup → Should navigate to ChooseServiceScreen ✅
✅ Test App Reopen (Logged In):
- Sign in to app
- Close app completely
- Reopen app
- Should open directly to ChooseServiceScreen ✅
Summary
✅ Sign-in redirect fixed:
- After successful sign-in → Navigates to ChooseServiceScreen
- After successful sign-up → Navigates to ChooseServiceScreen
- App reopen (logged in) → Opens to ChooseServiceScreen
✅ Navigation simplified:
- Removed complex navigation with delays
- Uses graph start destination automatically
- Cleaner, more maintainable code
✅ Consistent routing:
- All authenticated users go to ChooseServiceScreen
- All unauthenticated users go to LandingScreen
- No navigation inconsistencies
The sign-in flow now correctly redirects users to ChooseServiceScreen after successful authentication.