qhdkfq_regulatory_flutter/lib/mine/message_page.dart

253 lines
7.1 KiB
Dart
Raw Permalink Normal View History

2025-07-09 14:27:53 +08:00
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:qhdkfq_regulatory_flutter/mine/message_detail_page.dart';
import 'package:qhdkfq_regulatory_flutter/tools/my_appbar.dart';
import 'package:qhdkfq_regulatory_flutter/tools/tools.dart';
class MessagePage extends StatefulWidget {
const MessagePage({super.key});
@override
_MessagePageState createState() => _MessagePageState();
}
class _MessagePageState extends State<MessagePage>
with SingleTickerProviderStateMixin {
final List<NotificationItem> notifications = [
NotificationItem(
type: '会议任务下发提醒',
isRead: false,
time: '2025-05-30 10:07:42',
title: '阿斯顿',
period: '行动周期2025-05-...',
),
NotificationItem(
type: '学习任务下发提醒',
isRead: false,
time: '2025-05-30 10:05:30',
title: '测试附件',
period: '行动周期2025-0-...',
),
NotificationItem(
type: '学习任务下发提醒',
isRead: false,
time: '2025-05-26 14:07:46',
title: '0526-1',
period: '行动周期2025-05-...',
),
NotificationItem(
type: '会议任务下发提醒',
isRead: false,
time: '2025-04-23 17:43:35',
title: '测试423',
period: '行动周期2025-0-...',
),
NotificationItem(
type: '学习任务下发提醒',
isRead: false,
time: '2025-04-23 17:40:44',
title: '测试4.23',
period: '行动周期2025-0-...',
),
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppbar(title: "通知提醒"),
body:
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const SizedBox(height: 10,),
Container(
width: MediaQuery.of(context).size.width, // 获取屏幕宽度
margin: EdgeInsets.only(left: 15,right: 15),
decoration: BoxDecoration(
color: Colors.green,
borderRadius: BorderRadius.circular(6),
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.1),
spreadRadius: 2,
blurRadius: 8,
offset: const Offset(0, 4),
),
],
),
padding: EdgeInsets.all(10),
child:
GestureDetector(
onTap: () {
setState(() {
for (int i = 0; i < notifications.length; i++) {
notifications[i].isRead = true;
}
});
},
child: Text(
"一键已读",
textAlign:TextAlign.center,
style: TextStyle(
fontSize: 13,
color: Colors.white,
) ,
),
)
),
Expanded(
child: ListView.builder(
itemCount: notifications.length,
itemBuilder: (context, index) {
final notification = notifications[index];
return NotificationCard(item: notification);
},
),
)
],
),
);
}
}
class NotificationItem {
String type;
bool isRead;
String time;
String title;
String period;
NotificationItem({
required this.type,
required this.isRead,
required this.time,
required this.title,
required this.period,
});
}
class NotificationCard extends StatelessWidget {
final NotificationItem item;
const NotificationCard({super.key, required this.item});
@override
Widget build(BuildContext context) {
return Card(
margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
elevation: 0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
side: const BorderSide(color: Color(0xFFEEEEEE), width: 1),
),
child: Padding(
padding: const EdgeInsets.only(left: 16,top: 16,right: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
item.type,
style: const TextStyle(
fontWeight: FontWeight.bold,
fontSize: 16,
),
),
Container(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 2),
decoration: BoxDecoration(
color: item.isRead ? const Color(0xFFF5F5F5) : Colors.blue[50],
borderRadius: BorderRadius.circular(10),
),
child: Text(
item.isRead ? '已读' : '未读',
style: TextStyle(
color: item.isRead ? Colors.grey : Colors.blue,
fontSize: 12,
),
),
),
],
),
const SizedBox(height: 8),
Text(
'提醒时间: ${item.time}',
style: const TextStyle(color: Colors.grey, fontSize: 14),
),
const SizedBox(height: 12),
RichText(
text: TextSpan(
style: DefaultTextStyle.of(context).style,
children: [
const TextSpan(
text: '温馨提示,任务名称为',
style: TextStyle(fontSize: 14),
),
TextSpan(
text: item.title,
style: const TextStyle(
fontSize: 14,
fontWeight: FontWeight.bold,
color: Colors.black
),
),
TextSpan(
text: item.period,
style: const TextStyle(fontSize: 14),
),
],
),
),
// const SizedBox(height: 8),
Align(
alignment: Alignment.centerRight,
child: TextButton(
onPressed: () {
pushPage(MessageDetailPage(), context);
},
style: TextButton.styleFrom(
// padding: EdgeInsets.only(bottom: 0),
minimumSize: Size.zero,
),
child: const Text(
'查看详情',
style: TextStyle(color: Colors.blue),
),
),
),
],
),
),
);
}
}