// lib/features/notifications/widgets/notification_tile.dart import 'package:flutter/material.dart'; import '../models/notification_model.dart'; class NotificationTile extends StatelessWidget { final NotificationModel notification; final VoidCallback? onTap; const NotificationTile({Key? key, required this.notification, this.onTap}) : super(key: key); @override Widget build(BuildContext context) { return InkWell( onTap: onTap, child: Container( color: notification.isRead ? Colors.transparent : const Color(0xFFF0F4FF), padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 14), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ _buildIcon(), const SizedBox(width: 14), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( notification.title, style: TextStyle( fontWeight: notification.isRead ? FontWeight.w400 : FontWeight.w600, fontSize: 14, ), maxLines: 1, overflow: TextOverflow.ellipsis, ), const SizedBox(height: 4), Text( notification.message, style: TextStyle(color: Colors.grey.shade600, fontSize: 13), maxLines: 2, overflow: TextOverflow.ellipsis, ), const SizedBox(height: 6), Text( _timeAgo(notification.createdAt), style: TextStyle(color: Colors.grey.shade400, fontSize: 12), ), ], ), ), ], ), ), ); } Widget _buildIcon() { final config = _typeConfig(notification.type); return Container( width: 40, height: 40, decoration: BoxDecoration( color: config.color.withOpacity(0.15), shape: BoxShape.circle, ), child: Icon(config.icon, color: config.color, size: 20), ); } static _TypeConfig _typeConfig(String type) { switch (type) { case 'event': return _TypeConfig(Colors.blue, Icons.event); case 'promo': return _TypeConfig(Colors.green, Icons.local_offer); case 'booking': return _TypeConfig(Colors.orange, Icons.confirmation_number); default: return _TypeConfig(Colors.grey, Icons.info_outline); } } static String _timeAgo(DateTime dt) { final diff = DateTime.now().difference(dt); if (diff.inMinutes < 1) return 'Just now'; if (diff.inMinutes < 60) return '${diff.inMinutes}m ago'; if (diff.inHours < 24) return '${diff.inHours}h ago'; if (diff.inDays < 7) return '${diff.inDays}d ago'; return '${dt.day}/${dt.month}/${dt.year}'; } } class _TypeConfig { final Color color; final IconData icon; const _TypeConfig(this.color, this.icon); }