import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import 'package:shared_preferences/shared_preferences.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 { const SplashScreen({super.key}); @override ConsumerState createState() => _SplashScreenState(); } class _SplashScreenState extends ConsumerState with SingleTickerProviderStateMixin { late final AnimationController _controller; late final Animation _fadeAnimation; Timer? _navigationTimer; @override void initState() { super.initState(); _controller = AnimationController( vsync: this, duration: const Duration(milliseconds: 800), ); _fadeAnimation = CurvedAnimation( parent: _controller, curve: Curves.easeIn, ); _controller.forward(); _navigationTimer = Timer(const Duration(seconds: 3), _navigate); } Future _navigate() async { if (!mounted) return; final prefs = await SharedPreferences.getInstance(); final onboardingCompleted = prefs.getBool('onboarding_completed') ?? false; if (!mounted) return; if (!onboardingCompleted) { 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 void dispose() { _navigationTimer?.cancel(); _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: Container( width: double.infinity, height: double.infinity, decoration: const BoxDecoration( gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [ AppColors.gradientStart, AppColors.gradientEnd, ], ), ), child: FadeTransition( opacity: _fadeAnimation, child: Center( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 40), child: Column( mainAxisSize: MainAxisSize.min, children: [ SizedBox( width: 150, height: 108, child: Image.asset( 'assets/images/splash_house.png', width: 150, height: 108, fit: BoxFit.contain, semanticLabel: 'House illustration', ), ), const SizedBox(height: 35), SizedBox( width: 264, height: 55, child: Image.asset( 'assets/images/splash_logo.png', width: 264, height: 55, fit: BoxFit.contain, semanticLabel: 'RE-Quest logo', ), ), ], ), ), ), ), ), ); } }