refactor: unify app navigation to default to HomeScreen and remove role-based routing redirection
This commit is contained in:
@@ -65,10 +65,7 @@ class _LoginScreenState extends ConsumerState<LoginScreen> {
|
|||||||
// Navigate on auth state changes
|
// Navigate on auth state changes
|
||||||
ref.listen<AuthState>(authProvider, (previous, next) {
|
ref.listen<AuthState>(authProvider, (previous, next) {
|
||||||
if (next.status == AuthStatus.authenticated) {
|
if (next.status == AuthStatus.authenticated) {
|
||||||
// Agents land on /profile (defaults to "Edit Profile" tab —
|
context.go('/home');
|
||||||
// their dashboard/home view). Users land on /home.
|
|
||||||
final isAgent = next.user?.role == 'AGENT';
|
|
||||||
context.go(isAgent ? '/profile' : '/home');
|
|
||||||
}
|
}
|
||||||
// Navigate to 2FA verification screen
|
// Navigate to 2FA verification screen
|
||||||
if (next.requiresTwoFactor && next.tempToken != null) {
|
if (next.requiresTwoFactor && next.tempToken != null) {
|
||||||
|
|||||||
@@ -95,12 +95,10 @@ class _Verify2faScreenState extends ConsumerState<Verify2faScreen> {
|
|||||||
final authState = ref.watch(authProvider);
|
final authState = ref.watch(authProvider);
|
||||||
final isLoading = authState.status == AuthStatus.loading;
|
final isLoading = authState.status == AuthStatus.loading;
|
||||||
|
|
||||||
// Navigate when authentication succeeds, reset submit lock on error.
|
// Navigate to home when authentication succeeds, reset submit lock on error.
|
||||||
// Agents land on /profile (Edit Profile tab — their home/dashboard view).
|
|
||||||
ref.listen<AuthState>(authProvider, (previous, next) {
|
ref.listen<AuthState>(authProvider, (previous, next) {
|
||||||
if (next.status == AuthStatus.authenticated) {
|
if (next.status == AuthStatus.authenticated) {
|
||||||
final isAgent = next.user?.role == 'AGENT';
|
context.go('/home');
|
||||||
context.go(isAgent ? '/profile' : '/home');
|
|
||||||
}
|
}
|
||||||
if (next.status != AuthStatus.loading) {
|
if (next.status != AuthStatus.loading) {
|
||||||
_isSubmitting = false;
|
_isSubmitting = false;
|
||||||
|
|||||||
@@ -1,20 +1,18 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:real_estate_mobile/core/constants/app_colors.dart';
|
import 'package:real_estate_mobile/core/constants/app_colors.dart';
|
||||||
import 'package:real_estate_mobile/features/auth/presentation/providers/auth_provider.dart';
|
|
||||||
|
|
||||||
class SplashScreen extends ConsumerStatefulWidget {
|
class SplashScreen extends StatefulWidget {
|
||||||
const SplashScreen({super.key});
|
const SplashScreen({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
ConsumerState<SplashScreen> createState() => _SplashScreenState();
|
State<SplashScreen> createState() => _SplashScreenState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _SplashScreenState extends ConsumerState<SplashScreen>
|
class _SplashScreenState extends State<SplashScreen>
|
||||||
with SingleTickerProviderStateMixin {
|
with SingleTickerProviderStateMixin {
|
||||||
late final AnimationController _controller;
|
late final AnimationController _controller;
|
||||||
late final Animation<double> _fadeAnimation;
|
late final Animation<double> _fadeAnimation;
|
||||||
@@ -45,15 +43,11 @@ class _SplashScreenState extends ConsumerState<SplashScreen>
|
|||||||
final onboardingCompleted = prefs.getBool('onboarding_completed') ?? false;
|
final onboardingCompleted = prefs.getBool('onboarding_completed') ?? false;
|
||||||
|
|
||||||
if (!mounted) return;
|
if (!mounted) return;
|
||||||
if (!onboardingCompleted) {
|
if (onboardingCompleted) {
|
||||||
|
context.go('/home');
|
||||||
|
} else {
|
||||||
context.go('/onboarding');
|
context.go('/onboarding');
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
// Agents land on /profile (Edit Profile tab); everyone else on /home.
|
|
||||||
final authState = ref.read(authProvider);
|
|
||||||
final isAgent = authState.status == AuthStatus.authenticated &&
|
|
||||||
authState.user?.role == 'AGENT';
|
|
||||||
context.go(isAgent ? '/profile' : '/home');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import 'package:real_estate_mobile/features/agents/presentation/screens/agent_ed
|
|||||||
import 'package:real_estate_mobile/features/profile/presentation/screens/payment_success_screen.dart';
|
import 'package:real_estate_mobile/features/profile/presentation/screens/payment_success_screen.dart';
|
||||||
import 'package:real_estate_mobile/features/splash/presentation/screens/splash_screen.dart';
|
import 'package:real_estate_mobile/features/splash/presentation/screens/splash_screen.dart';
|
||||||
import 'package:real_estate_mobile/features/onboarding/presentation/screens/onboarding_screen.dart';
|
import 'package:real_estate_mobile/features/onboarding/presentation/screens/onboarding_screen.dart';
|
||||||
import 'package:real_estate_mobile/features/agents/presentation/screens/agent_home_screen.dart';
|
|
||||||
import 'package:real_estate_mobile/features/auth/presentation/screens/verify_2fa_screen.dart';
|
import 'package:real_estate_mobile/features/auth/presentation/screens/verify_2fa_screen.dart';
|
||||||
import 'package:real_estate_mobile/features/support_chat/presentation/screens/support_chat_screen.dart';
|
import 'package:real_estate_mobile/features/support_chat/presentation/screens/support_chat_screen.dart';
|
||||||
import 'package:real_estate_mobile/features/coming_soon/presentation/screens/coming_soon_screen.dart';
|
import 'package:real_estate_mobile/features/coming_soon/presentation/screens/coming_soon_screen.dart';
|
||||||
@@ -289,8 +288,8 @@ final routerProvider = Provider<GoRouter>((ref) {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
/// Reactively switches between HomeScreen and AgentHomeScreen based on auth.
|
/// Always shows the user HomeScreen for /home regardless of role.
|
||||||
/// Agents see their dashboard (profile view); users see the discovery home.
|
/// Agents reach their own dashboard via the Edit Profile tab in /profile.
|
||||||
class _HomeRouteWrapper extends ConsumerWidget {
|
class _HomeRouteWrapper extends ConsumerWidget {
|
||||||
const _HomeRouteWrapper();
|
const _HomeRouteWrapper();
|
||||||
|
|
||||||
@@ -307,10 +306,6 @@ class _HomeRouteWrapper extends ConsumerWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (authState.status == AuthStatus.authenticated &&
|
|
||||||
authState.user?.role == 'AGENT') {
|
|
||||||
return const AgentHomeScreen();
|
|
||||||
}
|
|
||||||
return const HomeScreen();
|
return const HomeScreen();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user