TKK_E32231225/lib/screens/splash_screen.dart

153 lines
4.1 KiB
Dart

import 'dart:async';
import 'package:flutter/material.dart';
import 'dashboard_screen.dart';
class SplashScreen extends StatefulWidget {
const SplashScreen({super.key});
@override
State<SplashScreen> createState() => _SplashScreenState();
}
class _SplashScreenState extends State<SplashScreen>
with SingleTickerProviderStateMixin {
late AnimationController controller;
late Animation<double> scaleAnim;
late Animation<double> fadeAnim;
@override
void initState() {
super.initState();
controller = AnimationController(
vsync: this,
duration: const Duration(seconds: 2),
);
scaleAnim = Tween<double>(begin: 0.8, end: 1.1).animate(
CurvedAnimation(parent: controller, curve: Curves.easeOutBack),
);
fadeAnim = Tween<double>(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),
),
],
),
),
),
),
),
);
}
}