import 'package:flutter/material.dart'; import '../../../../core/l10n/app_localizations.dart'; import '../../../../core/design/tokens.dart'; /// طبقة البحث عن سائق — نبض + مؤقت + زر إلغاء. class SearchingOverlay extends StatefulWidget { final int elapsed; final VoidCallback? onCancel; const SearchingOverlay({ super.key, required this.elapsed, this.onCancel, }); @override State createState() => _SearchingOverlayState(); } class _SearchingOverlayState extends State with SingleTickerProviderStateMixin { late AnimationController _pulseController; late Animation _pulseAnimation; @override void initState() { super.initState(); _pulseController = AnimationController( vsync: this, duration: const Duration(seconds: 2), )..repeat(reverse: true); _pulseAnimation = Tween(begin: 0.8, end: 1.2).animate( CurvedAnimation(parent: _pulseController, curve: Curves.easeInOut), ); } @override void dispose() { _pulseController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { final l10n = AppLocalizations.of(context)!; final cs = Theme.of(context).colorScheme; final minutes = widget.elapsed ~/ 60; final seconds = widget.elapsed % 60; final timeStr = '${minutes.toString().padLeft(2, '0')}:${seconds.toString().padLeft(2, '0')}'; return Material( color: Colors.black54, child: Center( child: Container( margin: const EdgeInsets.all(T.pagePadding * 2), padding: const EdgeInsets.all(T.pagePadding * 1.5), decoration: BoxDecoration( color: cs.surface, borderRadius: BorderRadius.circular(T.r16), boxShadow: [T.shadowLg], ), child: Column( mainAxisSize: MainAxisSize.min, children: [ // نبض البحث ScaleTransition( scale: _pulseAnimation, child: Container( width: 80, height: 80, decoration: BoxDecoration( color: cs.primaryContainer, shape: BoxShape.circle, ), child: Icon( Icons.directions_car_filled_rounded, size: 40, color: cs.onPrimaryContainer, ), ), ), const SizedBox(height: T.s16), // نص البحث Text( l10n.searchingDriver, style: Theme.of(context).textTheme.titleMedium?.copyWith( fontWeight: FontWeight.w600, ), textAlign: TextAlign.center, ), const SizedBox(height: T.s8), // المؤقت Text( timeStr, style: Theme.of(context).textTheme.headlineMedium?.copyWith( color: cs.primary, fontWeight: FontWeight.w700, fontFeatures: const [FontFeature.tabularFigures()], ), ), const SizedBox(height: T.s20), // زر الإلغاء SizedBox( width: double.infinity, child: OutlinedButton( onPressed: widget.onCancel, style: OutlinedButton.styleFrom( foregroundColor: cs.error, side: BorderSide(color: cs.error), ), child: Text(l10n.cancelSearch), ), ), ], ), ), ), ); } }