import 'package:flutter/material.dart'; import '../../../../common/theme/theme.dart'; import '../../../components/spacer/spacer.dart'; class ProfileHeader extends StatefulWidget { const ProfileHeader({super.key}); @override State createState() => _ProfileHeaderState(); } class _ProfileHeaderState extends State with SingleTickerProviderStateMixin { late AnimationController _animationController; late Animation _fadeInAnimation; late Animation _slideAnimation; late Animation _scaleAnimation; @override void initState() { super.initState(); _animationController = AnimationController( duration: const Duration(milliseconds: 1200), vsync: this, ); _fadeInAnimation = Tween(begin: 0.0, end: 1.0).animate( CurvedAnimation( parent: _animationController, curve: const Interval(0.0, 0.6, curve: Curves.easeOut), ), ); _slideAnimation = Tween(begin: const Offset(0, 0.5), end: Offset.zero).animate( CurvedAnimation( parent: _animationController, curve: const Interval(0.2, 0.8, curve: Curves.easeOutCubic), ), ); _scaleAnimation = Tween(begin: 0.8, end: 1.0).animate( CurvedAnimation( parent: _animationController, curve: const Interval(0.0, 0.7, curve: Curves.elasticOut), ), ); _animationController.forward(); } @override void dispose() { _animationController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Container( width: double.infinity, decoration: BoxDecoration( gradient: LinearGradient( colors: [ ...AppColor.primaryGradient, AppColor.primaryGradient.last.withOpacity(0.8), ], begin: Alignment.topLeft, end: Alignment.bottomRight, ), boxShadow: [ BoxShadow( color: AppColor.primaryGradient.first.withOpacity(0.3), blurRadius: 20, offset: const Offset(0, 10), ), ], ), child: Stack( alignment: Alignment.center, children: [ // Background decoration with floating circles ...List.generate( 6, (index) => Positioned( top: (index * 30.0) + 20, right: (index * 40.0) - 50, child: AnimatedBuilder( animation: _animationController, builder: (context, child) { return Transform.rotate( angle: _animationController.value * 2 * 3.14159 * 0.5, child: Container( width: 20 + (index * 5.0), height: 20 + (index * 5.0), decoration: BoxDecoration( shape: BoxShape.circle, color: AppColor.textWhite.withOpacity(0.1), ), ), ); }, ), ), ), // Main content Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: [ const SpaceHeight(30), // Profile Picture with enhanced design AnimatedBuilder( animation: _scaleAnimation, builder: (context, child) { return Transform.scale( scale: _scaleAnimation.value, child: Stack( alignment: Alignment.center, children: [ // Outer glow effect Container( width: 120, height: 120, decoration: BoxDecoration( shape: BoxShape.circle, boxShadow: [ BoxShadow( color: AppColor.textWhite.withOpacity(0.3), blurRadius: 20, spreadRadius: 5, ), ], ), ), // Profile picture container Container( width: 110, height: 110, decoration: BoxDecoration( shape: BoxShape.circle, border: Border.all( color: AppColor.textWhite, width: 4, ), gradient: LinearGradient( colors: [ AppColor.primaryLight, AppColor.primaryLight.withOpacity(0.8), ], begin: Alignment.topLeft, end: Alignment.bottomRight, ), ), child: ClipOval( child: Container( decoration: BoxDecoration( gradient: LinearGradient( colors: [ AppColor.primaryLight, AppColor.primaryLight.withOpacity(0.7), ], begin: Alignment.topCenter, end: Alignment.bottomCenter, ), ), child: const Icon( Icons.person, size: 55, color: AppColor.textWhite, ), ), ), ), // Online status indicator Positioned( bottom: 5, right: 5, child: Container( width: 24, height: 24, decoration: BoxDecoration( shape: BoxShape.circle, color: Colors.green, border: Border.all( color: AppColor.textWhite, width: 3, ), ), ), ), ], ), ); }, ), const SpaceHeight(20), // Name with animation SlideTransition( position: _slideAnimation, child: FadeTransition( opacity: _fadeInAnimation, child: Column( children: [ Text( 'John Doe', style: AppStyle.h5.copyWith( fontWeight: FontWeight.bold, color: AppColor.textWhite, shadows: [ Shadow( color: Colors.black.withOpacity(0.3), offset: const Offset(0, 2), blurRadius: 4, ), ], ), ), const SpaceHeight(4), Container( height: 2, width: 60, decoration: BoxDecoration( color: AppColor.textWhite.withOpacity(0.7), borderRadius: BorderRadius.circular(1), ), ), ], ), ), ), const SpaceHeight(12), // Enhanced Role Badge FadeTransition( opacity: _fadeInAnimation, child: SlideTransition( position: _slideAnimation, child: Container( padding: const EdgeInsets.symmetric( horizontal: 20, vertical: 10, ), decoration: BoxDecoration( color: AppColor.textWhite.withOpacity(0.25), borderRadius: BorderRadius.circular(25), border: Border.all( color: AppColor.textWhite.withOpacity(0.3), width: 1, ), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.1), blurRadius: 10, offset: const Offset(0, 4), ), ], ), child: Row( mainAxisSize: MainAxisSize.min, children: [ Icon( Icons.business_center, size: 16, color: AppColor.textWhite.withOpacity(0.9), ), const SpaceHeight(6), Text( 'Business Owner', style: AppStyle.md.copyWith( color: AppColor.textWhite, fontWeight: FontWeight.w600, letterSpacing: 0.5, ), ), ], ), ), ), ), const SpaceHeight(30), ], ), ], ), ); } }