E41220983_MuhamadSugengCahy.../praresi/lib/presentation/views/splash_view.dart

123 lines
2.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'dart:async';
class SplashView extends StatefulWidget {
const SplashView({super.key});
@override
State<SplashView> createState() => _SplashViewState();
}
class _SplashViewState extends State<SplashView>
with SingleTickerProviderStateMixin {
late AnimationController _controller;
late Animation<double> _fadeAnim;
late Animation<double> _scaleAnim;
@override
void initState() {
super.initState();
/// ✅ Animation setup
_controller = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 1500),
);
_fadeAnim = Tween<double>(begin: 0, end: 1).animate(
CurvedAnimation(parent: _controller, curve: Curves.easeIn),
);
_scaleAnim = Tween<double>(begin: 0.7, end: 1).animate(
CurvedAnimation(
parent: _controller,
curve: Curves.easeOutBack,
),
);
_controller.forward();
_navigate();
}
void _navigate() {
Timer(const Duration(seconds: 2), () {
final user = FirebaseAuth.instance.currentUser;
if (user != null) {
Get.offAllNamed('/home');
} else {
Get.offAllNamed('/login');
}
});
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final size = MediaQuery.of(context).size;
return Scaffold(
body: Container(
width: size.width,
height: size.height,
decoration: const BoxDecoration(
gradient: LinearGradient(
colors: [
Color(0xFF1976D2),
Color(0xFF42A5F5),
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
),
child: Center(
child: FadeTransition(
opacity: _fadeAnim,
child: ScaleTransition(
scale: _scaleAnim,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
/// ✅ LOGO DARI ASSETS
Image.asset(
"assets/images/praresi_logo.png",
width: 140,
),
const SizedBox(height: 24),
const Text(
"PraResi",
style: TextStyle(
color: Colors.white,
fontSize: 28,
fontWeight: FontWeight.bold,
letterSpacing: 1.2,
),
),
const SizedBox(height: 30),
const CircularProgressIndicator(
color: Colors.white,
),
],
),
),
),
),
),
);
}
}