import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import '../../../core/design/tokens.dart'; import '../../../core/design/tripz_colors.dart'; import '../../../core/di.dart'; import '../../../core/l10n/l10n.dart'; import '../../../core/notifications/notification_store.dart'; import '../../../core/ui/empty_view.dart'; import '../../../core/ui/tripz_card.dart'; import '../../../core/ui/tripz_scaffold.dart'; import '../../../core/ui/view_status.dart'; /// صندوق الإشعارات — يقابل `NotificationPage` في دراور سيرو /// (`map_menu_widget.dart:354`). /// /// المصدر [NotificationStore] محلّي لا شبكي (السبب في تعليق ذلك الصنف). /// فلا كيوبت ولا مستودع: قراءة واحدة عند الفتح ثم `setState` — إضافة طبقة /// حالة لمصدرٍ في الذاكرة تعقيد بلا مقابل. class NotificationsPage extends StatefulWidget { const NotificationsPage({super.key}); @override State createState() => _NotificationsPageState(); } class _NotificationsPageState extends State { final NotificationStore _store = sl(); @override void initState() { super.initState(); // فتح الشاشة هو القراءة — لا زرّ «تعليم كمقروء» منفصل. _store.markAllRead(); } Future _clear() async { await _store.clear(); if (mounted) setState(() {}); } @override Widget build(BuildContext context) { final l10n = context.l10n; final items = _store.items; return TripzScaffold( title: l10n.menuNotifications, status: items.isEmpty ? ViewStatus.empty : ViewStatus.success, empty: EmptyView( icon: Icons.notifications_none_rounded, message: l10n.notificationsEmpty, ), actions: [ if (items.isNotEmpty) IconButton( icon: const Icon(Icons.delete_outline_rounded), tooltip: l10n.notificationsClear, onPressed: _clear, ), ], child: ListView.separated( itemCount: items.length, separatorBuilder: (context, i) => const SizedBox(height: Space.xs), itemBuilder: (context, i) => _NotificationCard(item: items[i]), ), ); } } class _NotificationCard extends StatelessWidget { const _NotificationCard({required this.item}); final AppNotification item; @override Widget build(BuildContext context) { return TripzCard( child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Icon( Icons.notifications_active_outlined, size: Sizes.iconSm, color: context.colors.primary, ), const SizedBox(width: Space.sm), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ if (item.title.isNotEmpty) Text(item.title, style: context.texts.titleSmall), if (item.body.isNotEmpty) ...[ const SizedBox(height: Space.xxs), Text( item.body, style: context.texts.bodySmall?.copyWith( color: context.colors.onSurfaceVariant, ), ), ], const SizedBox(height: Space.xxs), Text( DateFormat.yMd().add_jm().format(item.receivedAt.toLocal()), style: context.texts.labelSmall?.copyWith( color: context.colors.onSurfaceVariant, ), ), ], ), ), ], ), ); } }