import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../core/theme/app_colors.dart'; import '../../core/utils/date_utils.dart' as du; import '../../core/utils/responsive.dart'; import '../../shared/widgets/form_section.dart'; import '../../shared/widgets/form_field_row.dart'; import 'announcement_model.dart'; final announcementDetailProvider = FutureProvider.autoDispose.family((ref, id) async { return AnnouncementModel( id: id, title: '关于2026年端午节放假安排的通知', content: '根据国务院办公厅通知精神,现将2026年端午节放假安排通知如下:6月25日(星期四)至6月27日(星期六)放假调休,共3天。6月28日(星期日)上班。请各部门提前做好工作安排,确保节日期间各项工作正常运转。', type: '通知公告', publisherId: 'u-admin', publisherName: '行政管理部', publishTime: DateTime(2026, 5, 22), isTop: true, requireConfirm: false, expiryDate: DateTime(2026, 6, 28), readCount: 45, unreadCount: 12, createTime: DateTime(2026, 5, 22), ); }); class AnnouncementDetailPage extends ConsumerWidget { final String id; const AnnouncementDetailPage({super.key, required this.id}); @override Widget build(BuildContext context, WidgetRef ref) { final detailAsync = ref.watch(announcementDetailProvider(id)); final r = ResponsiveHelper.of(context); return Scaffold( appBar: AppBar(title: const Text('公告详情')), body: detailAsync.when( loading: () => const Center(child: CircularProgressIndicator()), error: (_, __) => const Center(child: Text('加载失败')), data: (item) => Align(alignment: Alignment.topCenter, child: ConstrainedBox( constraints: BoxConstraints(maxWidth: r.detailTwoColumns ? 700 : double.infinity), child: SingleChildScrollView( padding: const EdgeInsets.symmetric(vertical: 8), child: FormSection( title: item.title, children: [ FormFieldRow(label: '发布部门', value: item.publisherName, showArrow: false), FormFieldRow(label: '发布时间', value: du.DateUtils.formatDate(item.publishTime), showArrow: false), FormFieldRow(label: '公告类型', value: item.type, showArrow: false), if (item.requireConfirm) FormFieldRow(label: '确认要求', value: '需确认已读', showArrow: false), FormFieldRow(label: '已读', value: '${item.readCount}人', showArrow: false), const Divider(), Padding( padding: const EdgeInsets.all(14), child: Text(item.content, style: const TextStyle(color: AppColors.textPrimary, fontSize: 14, height: 1.6)), ), ], ), ), ), ), ), ); } }