import 'dart:async'; import 'dart:ffi'; import 'package:flutter/material.dart'; import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart'; import 'package:qhd_prevention/pages/home/low_page.dart'; import 'package:qhd_prevention/pages/home/risk/riskControl_page.dart'; import 'package:qhd_prevention/pages/home/userInfo_page.dart'; import 'package:qhd_prevention/pages/home/work/danger_page.dart'; import 'package:qhd_prevention/pages/home/work/danger_wait_list_page.dart'; import 'package:qhd_prevention/pages/home/workSet_page.dart'; import '../../tools/tools.dart'; class HomePage extends StatefulWidget { const HomePage({Key? key}) : super(key: key); @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State { final List> buttonInfos = [ {"icon": "assets/icon-apps/home-base.png", "title": "人员信息"}, {"icon": "assets/icon-apps/home-rili.png", "title": "工作安排"}, {"icon": "assets/icon-apps/home-risk.png", "title": "风险布控"}, {"icon": "assets/icon-apps/home-fl.png", "title": "法律法规"}, ]; final List> workInfos = [ { "icon": "assets/icon-apps/jobico1.png", "num": "1", "detail": "待排查", "index": 1, }, { "icon": "assets/icon-apps/jobico2.png", "num": "2", "detail": "待整改", "index": 2, }, { "icon": "assets/icon-apps/jobico3.png", "num": "3", "detail": "已超期", "index": 3, }, { "icon": "assets/icon-apps/jobico4.png", "num": "4", "detail": "待验收", "index": 4, }, { "icon": "assets/icon-apps/jobico5.png", "num": "5", "detail": "已验收", "index": 5, }, ]; final List> pcData = [ { "index": 1, "detail": {"jiancha": "2", "yinhuan": "20", "yanshou": "4"}, }, { "index": 2, "detail": {"jiancha": "4", "yinhuan": "10", "yanshou": "5"}, }, { "index": 3, "detail": {"jiancha": "3", "yinhuan": "23", "yanshou": "3"}, }, ]; final List> tagLabels = [ ['我', '的'], ['部', '门'], ['监', '管'], ]; Future _onRefresh() async { // 模拟网络请求 await Future.delayed(const Duration(seconds: 2)); // 刷新数据逻辑,如 fetchData() setState(() { // TODO: 更新数据源 }); } @override Widget build(BuildContext context) { return Scaffold( body: RefreshIndicator( onRefresh: _onRefresh, child: ListView( physics: const AlwaysScrollableScrollPhysics(), padding: const EdgeInsets.all(10), children: [ ClipRRect( borderRadius: BorderRadius.circular(5), child: Image.asset('assets/images/banner.jpg', fit: BoxFit.cover), ), const SizedBox(height: 10), _buildIconSection(context), const SizedBox(height: 10), _buildWorkSection(context), const SizedBox(height: 10), ListItemFactory.createBuildSimpleSection("隐患播报"), const SizedBox(height: 10), _buildPCDataSection(), SizedBox(height: 50), ], ), ), ); } Widget _buildIconSection(BuildContext context) { return Container( padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(8), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: buttonInfos.asMap().entries.map((entry) { final index = entry.key; // 获取当前索引 final btnInfo = entry.value; // 获取按钮信息 return _buildIconButton( icon: Image.asset(btnInfo["icon"]!, width: 40, height: 40), label: btnInfo["title"]!, onPressed: () { // 使用索引判断点击的是哪个按钮 print("点击了第 $index 个按钮"); if (index == 0) { pushPage(UserinfoPage(), context); } else if (index == 1) { pushPage(WorkSetPage(), context); } else if (index == 2) { pushPage(RiskControlPage(), context); } else if (index == 3) { pushPage(LowPage(), context); } }, ); }).toList(), ), ); } Widget _buildWorkSection(BuildContext context) { return Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(8), ), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ // _widgetTopTip(title: "我的工作"), ListItemFactory.createBuildSimpleSection("我的工作"), Padding( padding: const EdgeInsets.fromLTRB(10, 0, 10, 10), child: LayoutBuilder( builder: (context, constraints) { const spacing = 10.0; final totalWidth = constraints.maxWidth; final itemWidth = (totalWidth - spacing * 2) / 3; return Wrap( spacing: spacing, runSpacing: spacing, children: workInfos.map((info) { return SizedBox( width: itemWidth, child: _buildGridItem( context, icon: info["icon"]!, title: info["num"]!, subtitle: info["detail"]!, index: info["index"]!, ), ); }).toList(), ); }, ), ), ], ), ); } Widget _buildPCDataSection() { return Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(8), ), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ // _widgetTopTip(title: "排查数据"), ListItemFactory.createBuildSimpleSection("排查数据"), ...pcData.map(_widgetPCDataItem), ], ), ); } // 构建图标按钮:图上文字下 Widget _buildIconButton({ required Widget icon, required String label, required VoidCallback onPressed, // 添加点击回调参数 }) { return InkWell( onTap: onPressed, // 处理点击事件 borderRadius: BorderRadius.circular(8), child: Padding( padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 12), child: Column( mainAxisSize: MainAxisSize.min, children: [ icon, const SizedBox(height: 5), Text(label, style: const TextStyle(fontSize: 14)), ], ), ), ); } // 排查数据列表 item Widget _widgetPCDataItem(Map item) { final detail = item["detail"] as Map; final values = [detail["jiancha"]!, detail["yinhuan"]!, detail["yanshou"]!]; const labels = ["检查数", "发现隐患数", "已验收隐患数"]; const colors = [Color(0xFF3283FF), Color(0xFFF37B1D), Color(0xFF41B852)]; final int idx = int.tryParse(item["index"].toString())! - 1; return Padding( padding: const EdgeInsets.fromLTRB(15, 0, 10, 15), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ for (var i = 0; i < 3; i++) Column( children: [ Text( values[i], style: TextStyle( color: colors[i], fontSize: 18, fontWeight: FontWeight.bold, ), ), const SizedBox(height: 4), Text( labels[i], style: TextStyle(color: Colors.black38, fontSize: 15), ), ], ), Container( color: idx == 0 ? Colors.red : Colors.blue, width: 20, height: 40, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( tagLabels[idx][0], style: TextStyle(color: Colors.white, fontSize: 12), ), Text( tagLabels[idx][1], style: TextStyle(color: Colors.white, fontSize: 12), ), ], ), ), ], ), SizedBox(height: 10), Divider(height: 1, color: Colors.black12), ], ), ); } // 构建灰色网格项 Widget _buildGridItem( BuildContext context, { required String icon, required String title, required String subtitle, required int index, }) { return GestureDetector( onTap: () { if (index == 1) { pushPage(DangerPage(), context); } else if (index == 2) { pushPage(DangerWaitListPage(DangerType.wait), context); } else if (index == 3) { pushPage(DangerWaitListPage(DangerType.expired), context); }else if (index == 4) { pushPage(DangerWaitListPage(DangerType.waitAcceptance), context); }else if (index == 5) { pushPage(DangerWaitListPage(DangerType.acceptance), context); } }, child: Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: const Color(0xfbf9f9ff), borderRadius: BorderRadius.circular(6), ), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Image.asset(icon, width: 35, height: 35), const SizedBox(width: 15), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( title, style: const TextStyle( fontSize: 16, fontWeight: FontWeight.bold, ), maxLines: 1, overflow: TextOverflow.ellipsis, ), const SizedBox(height: 4), Text( subtitle, style: const TextStyle(fontSize: 14, color: Colors.black), maxLines: 1, overflow: TextOverflow.ellipsis, ), ], ), ), ], ), ), ); } }