import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:qhd_prevention/customWidget/danner_repain_item.dart'; import 'package:qhd_prevention/customWidget/department_picker.dart'; import 'package:qhd_prevention/customWidget/search_bar_widget.dart'; import 'package:qhd_prevention/customWidget/toast_util.dart'; import 'package:qhd_prevention/http/ApiService.dart'; import 'package:qhd_prevention/pages/home/scan_page.dart'; import 'package:qhd_prevention/pages/home/work/risk_list_page.dart'; import 'package:qhd_prevention/pages/my_appbar.dart'; import 'package:qhd_prevention/tools/SmallWidget.dart'; import 'package:qhd_prevention/tools/tools.dart'; class DangerPage extends StatefulWidget { const DangerPage(this.type, {super.key}); final int type; @override _DangerPageState createState() => _DangerPageState(); } class _DangerPageState extends State with SingleTickerProviderStateMixin { late TabController _tabController; int _selectedTab = 0; // // 模拟数据 // final List _notifications = List.generate(10, (i) { // bool read = i % 3 == 0; // String title = '测试数据标题标题 ${i + 1}'; // String time = '2025-06-${10 + i} 12:3${i}'; // return NotificationItem(title, time); // }); final TextEditingController _searchController = TextEditingController(); String appBarTitle=""; String id=""; String searchKey=""; String searchName=""; bool showBottomTags=false; List listOne = []; List listTwo = []; List listDates = []; @override void initState() { super.initState(); _tabController = TabController(length: 2, vsync: this); _tabController.addListener(() { if (_tabController.indexIsChanging) { setState(() => _selectedTab = _tabController.index); print('切换到标签:${_tabController.index}'); listDates.clear(); setState(() { if(_selectedTab==0){ listDates.addAll(listOne); if(widget.type==1){ showBottomTags=true; }else{ showBottomTags=false; } }else{ listDates.addAll(listTwo); showBottomTags=false; } }); } }); if(widget.type==1){ showBottomTags=true; }else{ showBottomTags=false; } id=SessionService.instance.loginUser?["DEPARTMENT_ID"]??""; getListData(); } void getListData(){ listDates.clear(); listOne.clear(); listTwo.clear(); switch(widget.type ){ case 1://隐患排查 appBarTitle="隐患排查"; _getHazardInvestigationList(); break; case 2://标准排查 appBarTitle="标准排查"; _getStandardInvestigationList(); break; // case 3://首页-待排查 // appBarTitle="待排查"; // // _getStandardInvestigationRecordList(_page,keyWord,"","","","","","",addList); // break; } } Future _getHazardInvestigationList() async { try { final result = await ApiService.getHazardInvestigationList(id,searchKey); if (result['result'] == 'success') { final List newList = result['varList'] ?? []; setState(() { for(int i=0;i _getStandardInvestigationList() async { try { final result = await ApiService.getStandardInvestigationList(id,searchKey); if (result['result'] == 'success') { final List newList = result['varList'] ?? []; setState(() { for(int i=0;i DepartmentPicker(onSelected: (id, name) { setState(() { searchKey=id; searchName=name; _searchController.text=name; }); getListData(); }), ); } @override Widget build(BuildContext context) { return Scaffold( appBar: MyAppbar( title: "隐患排查", actions: [ TextButton( onPressed: () { pushPage(ScanPage(), context); }, child: Text( "清单扫描", style: TextStyle(color: Colors.white, fontSize: 16), ), ), ], ), body: SafeArea( child: Column( children: [ // Tab bar TabBar( controller: _tabController, labelStyle: TextStyle(fontSize: 16), indicator: UnderlineTabIndicator( borderSide: BorderSide(width: 3.0, color: Colors.blue), insets: EdgeInsets.symmetric(horizontal: 100.0), ), labelColor: Colors.blue, unselectedLabelColor: Colors.grey, tabs: const [Tab(text: '待排查'), Tab(text: '已排查')], ), Container( color: Colors.white, child: Padding( padding: const EdgeInsets.all(10), child: SearchBarWidget( showResetButton: true, onInputTap: () { showCategoryPicker(); }, hintText: "", isClickableOnly: true, onSearch: (text) { print('----------'); // searchKey=text; // getListData(); }, controller: _searchController, ), ), ), // List Expanded( child: listDates.isEmpty ? NoDataWidget.show() : ListView.separated( padding: EdgeInsets.only(top: 15), itemCount: listDates.length, separatorBuilder: (_, __) => const SizedBox(), itemBuilder: (context, index) { final item = listDates[index]; return GestureDetector( onTap: () => _handleItemTap(item, index), child: DannerRepainItem( title: item['NAME'], details: [ '清单类型:${item['TYPENAME']}', '排查周期:${item['PERIODNAME']}', '包含检查项:${item['count']}', '负责人:${item['USER_NAME']}', '起始时间:${item['START_DATE']}-${item['END_DATE']}', ], showBottomTags: showBottomTags, bottomTags: [ riskTagText(1, "重大风险:${item['ACOUNT']}"), riskTagText(2, "较大:${item['BCOUNT']}"), riskTagText(3, "一般:${item['CCOUNT']}"), riskTagText(4, "低:${item['DCOUNT']}"), ], ), ); }, ), ), ], ), ), ); } Widget _itemCell(final item) { return Padding( padding: EdgeInsets.only(left: 15, right: 15, bottom: 15), child: Container( decoration: const BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(5)), ), child: Column( children: [ Padding( padding: EdgeInsets.symmetric(vertical: 10, horizontal: 15), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( children: [ Icon( Icons.star_rate_sharp, color: Colors.green, size: 18, ), SizedBox(width: 5), Text("测试--------", style: TextStyle(fontSize: 14)), ], ), Icon( Icons.arrow_forward_ios_rounded, color: Colors.grey, size: 15, ), ], ), ), Divider(height: 1), Padding( padding: EdgeInsets.symmetric(vertical: 10, horizontal: 15), child: Column( spacing: 5, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ HhTextStyleUtils.secondaryTitle("清单类型:测试"), HhTextStyleUtils.secondaryTitle("排查周期:测试"), ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ HhTextStyleUtils.secondaryTitle("包含检查项:3"), HhTextStyleUtils.secondaryTitle("负责人:是测试"), ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ HhTextStyleUtils.secondaryTitle( "起始时间:2025-6-20 - 2026-3-31", ), SizedBox(), ], ), ], ), ), Padding( padding: EdgeInsets.only(top: 0, bottom: 15, left: 15, right: 15), child: Row( spacing: 5, children: [ riskTagText(1, "重大风险:0"), riskTagText(2, "较大:3"), riskTagText(3, "一般:1"), riskTagText(4, "低:0"), ], ), ), ], ), ), ); } } // 模拟数据模版 class NotificationItem { final String title; final String time; NotificationItem(this.title, this.time); }