announcement_detail_page.dart 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_riverpod/flutter_riverpod.dart';
  3. import '../../core/theme/app_colors.dart';
  4. import '../../core/utils/date_utils.dart' as du;
  5. import '../../core/utils/responsive.dart';
  6. import '../../shared/widgets/form_section.dart';
  7. import '../../shared/widgets/form_field_row.dart';
  8. import 'announcement_model.dart';
  9. final announcementDetailProvider = FutureProvider.autoDispose.family<AnnouncementModel, String>((ref, id) async {
  10. await Future.delayed(const Duration(milliseconds: 300));
  11. return AnnouncementModel(
  12. id: id,
  13. title: '关于2026年端午节放假安排的通知',
  14. content: '根据国务院办公厅通知精神,现将2026年端午节放假安排通知如下:6月25日(星期四)至6月27日(星期六)放假调休,共3天。6月28日(星期日)上班。请各部门提前做好工作安排,确保节日期间各项工作正常运转。',
  15. type: '通知公告',
  16. publisherId: 'u-admin',
  17. publisherName: '行政管理部',
  18. publishTime: DateTime(2026, 5, 22),
  19. isTop: true,
  20. requireConfirm: false,
  21. expiryDate: DateTime(2026, 6, 28),
  22. readCount: 45,
  23. unreadCount: 12,
  24. createTime: DateTime(2026, 5, 22),
  25. );
  26. });
  27. class AnnouncementDetailPage extends ConsumerWidget {
  28. final String id;
  29. const AnnouncementDetailPage({super.key, required this.id});
  30. @override
  31. Widget build(BuildContext context, WidgetRef ref) {
  32. final detailAsync = ref.watch(announcementDetailProvider(id));
  33. final r = ResponsiveHelper.of(context);
  34. return Scaffold(
  35. appBar: AppBar(title: const Text('公告详情')),
  36. body: detailAsync.when(
  37. loading: () => const Center(child: CircularProgressIndicator()),
  38. error: (_, __) => const Center(child: Text('加载失败')),
  39. data: (item) => Align(alignment: Alignment.topCenter,
  40. child: ConstrainedBox(
  41. constraints: BoxConstraints(maxWidth: r.detailTwoColumns ? 700 : double.infinity),
  42. child: SingleChildScrollView(
  43. padding: const EdgeInsets.symmetric(vertical: 8),
  44. child: FormSection(
  45. title: item.title,
  46. children: [
  47. FormFieldRow(label: '发布部门', value: item.publisherName, showArrow: false),
  48. FormFieldRow(label: '发布时间', value: du.DateUtils.formatDate(item.publishTime), showArrow: false),
  49. FormFieldRow(label: '公告类型', value: item.type, showArrow: false),
  50. if (item.requireConfirm)
  51. FormFieldRow(label: '确认要求', value: '需确认已读', showArrow: false),
  52. FormFieldRow(label: '已读', value: '${item.readCount}人', showArrow: false),
  53. const Divider(),
  54. Padding(
  55. padding: const EdgeInsets.all(14),
  56. child: Text(item.content, style: const TextStyle(color: AppColors.textPrimary, fontSize: 14, height: 1.6)),
  57. ),
  58. ],
  59. ),
  60. ),
  61. ),
  62. ),
  63. ),
  64. );
  65. }
  66. }