import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../core/theme/app_colors.dart'; import '../shell/nav_bar_config.dart'; import '../../core/utils/date_utils.dart' as du; import '../../core/i18n/app_localizations.dart'; import 'announcement_list_controller.dart'; class AnnouncementDetailPage extends ConsumerWidget { final String id; const AnnouncementDetailPage({super.key, required this.id}); @override Widget build(BuildContext context, WidgetRef ref) { final item = mockAnnouncements.firstWhere( (e) => e.id == id, orElse: () => mockAnnouncements.first, ); final l10n = AppLocalizations.of(context); ref .read(navBarConfigProvider.notifier) .update( NavBarConfig( title: l10n.get('announcementDetail'), showBack: true, onBack: () => context.pop(), ), ); return SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // 红色横幅区 Container( width: double.infinity, padding: const EdgeInsets.all(24), color: AppColors.bgCard, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( item.title, style: const TextStyle( fontSize: 20, fontWeight: FontWeight.w700, color: AppColors.textPrimary, height: 1.4, ), ), const SizedBox(height: 12), Row( children: [ Text( item.publisherName, style: const TextStyle( fontSize: 13, color: AppColors.textSecondary, ), ), const SizedBox(width: 12), Text( du.DateUtils.formatDateTime(item.publishTime), style: const TextStyle( fontSize: 13, color: AppColors.textPlaceholder, ), ), ], ), ], ), ), // 红色分隔线 Container(width: double.infinity, height: 2, color: AppColors.danger), // 正文内容 Padding( padding: const EdgeInsets.all(16), child: Container( width: double.infinity, padding: const EdgeInsets.all(20), decoration: BoxDecoration( color: AppColors.bgCard, borderRadius: BorderRadius.circular(8), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '各部门、各位同事:', style: const TextStyle( fontSize: 14, color: AppColors.textPrimary, height: 1.7, ), ), const SizedBox(height: 12), Text( item.content, style: const TextStyle( fontSize: 14, color: AppColors.textSecondary, height: 1.7, ), ), ], ), ), ), // 附件 if (item.attachments.isNotEmpty) Padding( padding: const EdgeInsets.symmetric(horizontal: 16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text( '附件下载', style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, color: AppColors.textPrimary, ), ), const SizedBox(height: 8), ...item.attachments.map( (att) => Container( width: double.infinity, margin: const EdgeInsets.only(bottom: 8), padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: AppColors.bgCard, borderRadius: BorderRadius.circular(8), ), child: Row( children: [ const Icon( Icons.description_outlined, size: 20, color: AppColors.primary, ), const SizedBox(width: 8), Expanded( child: Text( att, style: const TextStyle( fontSize: 14, color: AppColors.textPrimary, ), ), ), Text( '${(att.length * 100) ~/ 1000}KB', style: const TextStyle( fontSize: 12, color: AppColors.textPlaceholder, ), ), const SizedBox(width: 8), const Icon( Icons.download_outlined, size: 16, color: AppColors.textPlaceholder, ), ], ), ), ), ], ), ), // 审计区 Padding( padding: const EdgeInsets.all(16), child: Container( width: double.infinity, padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: AppColors.bgCard, borderRadius: BorderRadius.circular(8), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text( '全员触达率审计追踪', style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, color: AppColors.textPrimary, ), ), const SizedBox(height: 12), Row( children: [ Container( padding: const EdgeInsets.symmetric( horizontal: 12, vertical: 6, ), decoration: BoxDecoration( color: AppColors.successBg, borderRadius: BorderRadius.circular(16), ), child: Text( '${item.readCount} 人已读', style: const TextStyle( fontSize: 12, color: AppColors.success, ), ), ), const SizedBox(width: 12), Container( padding: const EdgeInsets.symmetric( horizontal: 12, vertical: 6, ), decoration: BoxDecoration( color: AppColors.bgPage, borderRadius: BorderRadius.circular(16), ), child: Text( '${item.unreadCount} 人未读', style: const TextStyle( fontSize: 12, color: AppColors.statusGray, ), ), ), ], ), const SizedBox(height: 12), Container( width: double.infinity, padding: const EdgeInsets.symmetric( horizontal: 16, vertical: 10, ), decoration: BoxDecoration( color: AppColors.danger, borderRadius: BorderRadius.circular(20), ), child: const Text( '一键强力 DING 催办', textAlign: TextAlign.center, style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, color: Colors.white, ), ), ), ], ), ), ), const SizedBox(height: 24), ], ), ); } }