import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'dart:math' as math; import 'dart:ui'; import '../controllers/splash_controller.dart'; import '../../../theme/app_colors.dart'; class SplashView extends GetView { const SplashView({super.key}); @override Widget build(BuildContext context) { final size = MediaQuery.of(context).size; return Scaffold( body: Container( width: double.infinity, height: double.infinity, decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.topRight, end: Alignment.bottomLeft, colors: [ AppColors.primaryLight.withOpacity(0.1), AppColors.background, AppColors.accentLight.withOpacity(0.1), ], ), ), child: Stack( children: [ // Pattern overlay Opacity( opacity: 0.03, child: Container( decoration: const BoxDecoration( image: DecorationImage( image: AssetImage('assets/images/logo.png'), // Using logo.png which exists repeat: ImageRepeat.repeat, scale: 4.0, ), ), ), ), // Accent circles Positioned( top: -40, right: -20, child: Container( width: 150, height: 150, decoration: BoxDecoration( shape: BoxShape.circle, gradient: RadialGradient( colors: [ AppColors.primary.withOpacity(0.2), Colors.transparent, ], ), ), ), ), Positioned( bottom: -50, left: -30, child: Container( width: 180, height: 180, decoration: BoxDecoration( shape: BoxShape.circle, gradient: RadialGradient( colors: [ AppColors.accent.withOpacity(0.2), Colors.transparent, ], ), ), ), ), // Main content Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // Animated Logo TweenAnimationBuilder( tween: Tween(begin: 0, end: 1), duration: const Duration(seconds: 1), curve: Curves.easeOutBack, builder: (context, value, child) { return Transform.scale( scale: value, child: Image.asset( 'assets/images/logo.png', width: 180, height: 180, fit: BoxFit.contain, errorBuilder: (context, error, stackTrace) { return Icon( Icons.business, size: 100, color: AppColors.primary, ); }, ), ); }, ), const SizedBox(height: 40), // Animated loading indicator _DelayedAnimation( delay: 400, child: Column( children: [ SizedBox( width: 40, height: 40, child: CircularProgressIndicator( valueColor: AlwaysStoppedAnimation( AppColors.primary, ), strokeWidth: 3, ), ), const SizedBox(height: 16), ], ), ), ], ), ), ], ), ), ); } } // Animation helper class class _DelayedAnimation extends StatefulWidget { final Widget child; final int delay; const _DelayedAnimation({required this.child, required this.delay}); @override _DelayedAnimationState createState() => _DelayedAnimationState(); } class _DelayedAnimationState extends State<_DelayedAnimation> with SingleTickerProviderStateMixin { late AnimationController _controller; late Animation _animOffset; @override void initState() { super.initState(); _controller = AnimationController( vsync: this, duration: const Duration(milliseconds: 800), ); final curve = CurvedAnimation( parent: _controller, curve: Curves.decelerate, ); _animOffset = Tween( begin: const Offset(0.0, 0.35), end: Offset.zero, ).animate(curve); Future.delayed(Duration(milliseconds: widget.delay), () { if (mounted) { _controller.forward(); } }); } @override void dispose() { _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return FadeTransition( opacity: _controller, child: SlideTransition(position: _animOffset, child: widget.child), ); } }