import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import './config/theme_colors.dart'; import 'login_page.dart'; import 'dashboard_page.dart'; class SplashScreen extends StatefulWidget { const SplashScreen({Key? key}) : super(key: key); @override _SplashScreenState createState() => _SplashScreenState(); } class _SplashScreenState extends State with TickerProviderStateMixin { late AnimationController _fadeController; late AnimationController _moveController; late Animation _fadeAnimation; late Animation _scaleAnimation; late Animation _slideAnimation; @override void initState() { super.initState(); // Controller untuk fade in _fadeController = AnimationController( duration: const Duration(seconds: 2), vsync: this, ); // Controller untuk animasi bergerak _moveController = AnimationController( duration: const Duration(milliseconds: 800), vsync: this, ); _fadeAnimation = CurvedAnimation( parent: _fadeController, curve: Curves.easeIn, ); _scaleAnimation = Tween( begin: 1.0, end: 1.0, ).animate(CurvedAnimation( parent: _moveController, curve: Curves.easeInOut, )); _slideAnimation = Tween( begin: Offset.zero, end: Offset(0, -1.03), ).animate(CurvedAnimation( parent: _moveController, curve: Curves.easeInOut, )); _fadeController.forward(); Future.delayed(Duration(seconds: 3), () { _moveController.forward().then((_) { checkLoginStatus(); }); }); } Future checkLoginStatus() async { final prefs = await SharedPreferences.getInstance(); final token = prefs.getString('token'); Navigator.pushReplacement( context, PageRouteBuilder( pageBuilder: (context, animation, secondaryAnimation) => token != null ? DashboardPage() : LoginPage(), transitionsBuilder: (context, animation, secondaryAnimation, child) { return FadeTransition( opacity: animation, child: child, ); }, transitionDuration: Duration(milliseconds: 500), ), ); } @override void dispose() { _fadeController.dispose(); _moveController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { final isDarkMode = Theme.of(context).brightness == Brightness.dark; return Scaffold( backgroundColor: ThemeColors.primary(context), body: Stack( children: [ // Background image Positioned.fill( child: Image.asset( isDarkMode ? 'assets/images/background_dark.png' : 'assets/images/background_light.png', fit: BoxFit.cover, ), ), // Logo dengan animasi Center( child: FadeTransition( opacity: _fadeAnimation, child: SlideTransition( position: _slideAnimation, child: ScaleTransition( scale: _scaleAnimation, child: Container( width: 200, height: 200, decoration: BoxDecoration( image: DecorationImage( image: AssetImage( isDarkMode ? 'assets/images/logo_dark.png' : 'assets/images/logo_light.png' ), fit: BoxFit.contain, ), ), ), ), ), ), ), ], ), ); } }