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/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({super.key}); @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 List data = [ Category( id: '1', title: '分类一', children: [ Category(id: '1-1', title: '子项 1-1'), Category(id: '1-2', title: '子项 1-2'), ], ), Category(id: '2', title: '分类二'), Category( id: '3', title: '分类三', children: [ Category( id: '3-1', title: '子项 3-1', children: [Category(id: '3-1-1', title: '子项 3-1-1')], ), ], ), ]; final TextEditingController _searchController = TextEditingController(); @override void initState() { super.initState(); _tabController = TabController(length: 2, vsync: this); _tabController.addListener(() { if (!_tabController.indexIsChanging) { setState(() => _selectedTab = _tabController.index); } }); } @override void dispose() { _tabController.dispose(); super.dispose(); } void _handleItemTap(NotificationItem item, int index) { print("点击了是: ${item.title}"); pushPage(RiskListPage(), context); } // 显示分类选择器 void showCategoryPicker() { showModalBottomSheet( context: context, isScrollControlled: true, barrierColor: Colors.black54, backgroundColor: Colors.transparent, builder: (ctx) => DepartmentPicker( data: data, onSelected: (selectedId) { setState(() {}); }, ), ); } @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: '已排查')], ), // Search bar Padding( padding: const EdgeInsets.all(10), child: SearchBarWidget( showResetButton: true, onInputTap: () { showCategoryPicker(); }, hintText: "", isClickableOnly: true, onSearch: (text) { print('----------'); }, controller: _searchController, ), ), // List Expanded( child: ListView.separated( itemCount: _notifications.length, separatorBuilder: (_, __) => const SizedBox(), itemBuilder: (context, index) { NotificationItem item = _notifications[index]; return GestureDetector( onTap: () => _handleItemTap(item, index), child: DannerRepainItem( title: '测试--------new', details: [ '清单类型:测试', '排查周期:测试', '包含检查项:3', '负责人:是测试', '起始时间:2025-6-20', '', '测试一下是否跳过时间' ], showBottomTags: true, bottomTags: [ riskTagText(1, "重大风险:0"), riskTagText(2, "较大:3"), riskTagText(3, "一般:1"), riskTagText(4, "低:0"), ], ), ); }, ), ), ], ), ), ); } 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); }