import 'dart:async'; import 'package:flutter/material.dart'; import 'dashboard_screen.dart'; class SplashScreen extends StatefulWidget { const SplashScreen({super.key}); @override State createState() => _SplashScreenState(); } class _SplashScreenState extends State with SingleTickerProviderStateMixin { late AnimationController controller; late Animation scaleAnim; late Animation fadeAnim; @override void initState() { super.initState(); controller = AnimationController( vsync: this, duration: const Duration(seconds: 2), ); scaleAnim = Tween(begin: 0.8, end: 1.1).animate( CurvedAnimation(parent: controller, curve: Curves.easeOutBack), ); fadeAnim = Tween(begin: 0.0, end: 1.0).animate( CurvedAnimation(parent: controller, curve: Curves.easeIn), ); controller.forward(); // 🔥 bikin efek "breathing" setelah animasi awal controller.addStatusListener((status) { if (status == AnimationStatus.completed) { controller.repeat(reverse: true); } }); // ⏱️ durasi total 5 detik Timer(const Duration(seconds: 5), () { Navigator.pushReplacement( context, MaterialPageRoute(builder: (_) => const DashboardScreen()), ); }); } @override void dispose() { controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: Container( decoration: const BoxDecoration( gradient: LinearGradient( colors: [ Color(0xff061A17), Color(0xff0F3D2E), Color(0xff083A3A), ], begin: Alignment.topLeft, end: Alignment.bottomRight, ), ), child: Center( child: FadeTransition( opacity: fadeAnim, child: ScaleTransition( scale: scaleAnim, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // 🔵 glowing orb (hidup karena animasi repeat) Container( width: 140, height: 140, decoration: BoxDecoration( shape: BoxShape.circle, boxShadow: [ BoxShadow( color: Colors.tealAccent.withOpacity(0.6), blurRadius: 40, spreadRadius: 5, ) ], ), child: const Icon( Icons.shield_outlined, size: 70, color: Colors.white, ), ), const SizedBox(height: 30), const Text( "TerraGuard", style: TextStyle( fontSize: 30, fontWeight: FontWeight.w600, letterSpacing: 1.2, color: Colors.white, ), ), const SizedBox(height: 10), const Text( "Smart Soil Protection System", style: TextStyle( fontSize: 14, color: Colors.white54, ), ), const SizedBox(height: 40), SizedBox( width: 120, child: LinearProgressIndicator( minHeight: 4, backgroundColor: Colors.white12, valueColor: AlwaysStoppedAnimation(Colors.tealAccent), ), ), const SizedBox(height: 12), const Text( "Initializing Sensors...", style: TextStyle(color: Colors.white70), ), ], ), ), ), ), ), ); } }