qhd-prevention-flutter/lib/pages/app/Danger_paicha/quick_report_page.dart

197 lines
6.3 KiB
Dart
Raw Normal View History

2025-07-07 16:49:05 +08:00
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
import 'package:qhd_prevention/customWidget/custom_button.dart';
import 'package:qhd_prevention/pages/my_appbar.dart';
import '../../../customWidget/photo_picker_row.dart';
class QuickReportPage extends StatefulWidget {
const QuickReportPage({super.key});
@override
State<QuickReportPage> createState() => _QuickReportPageState();
}
class _QuickReportPageState extends State<QuickReportPage> {
final _standardController = TextEditingController();
final _partController = TextEditingController();
final _dangerDetailController = TextEditingController();
final String _repairLevel = "请选择";
final String _repairType = "请选择";
final String _dangerOrganize = "请选择";
final String _dangerTime = "请选择";
late bool _isDanger = false;
@override
void dispose() {
_standardController.dispose();
_partController.dispose();
_dangerDetailController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppbar(title: "隐患随手拍"),
body: Column(
children: [
// 详情滚动区域
_pageDetail(),
// 底部警示文字,固定在页面底部
Container(
padding: const EdgeInsets.all(15),
color: Colors.white,
child: Text(
' 严禁在本互联网非涉密平台处理、传输国家秘密和工作秘密,请确认扫描、传输的文件资料不涉及国家秘密和工作秘密',
style: TextStyle(fontSize: 14, color: Colors.red),
),
),
],
),
);
}
Widget _buildSectionContainer({required Widget child}) {
return Container(
margin: const EdgeInsets.only(top: 10),
color: Colors.white,
padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 10),
child: child,
);
}
Widget _pageDetail() {
return Expanded(
child: SingleChildScrollView(
padding: const EdgeInsets.only(bottom: 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
_buildSectionContainer(
child: RepairedPhotoSection(
title: "隐患照片",
maxCount: 4,
mediaType: MediaType.image,
isShowAI: true,
onChanged: (List<File> files) {
// 上传图片 files
},
onAiIdentify: () {
// AI 识别逻辑
},
),
),
_buildSectionContainer(
child: RepairedPhotoSection(
title: "隐患视频",
maxCount: 1,
mediaType: MediaType.video,
onChanged: (List<File> files) {
// 上传视频 files
},
onAiIdentify: () {
// AI 视频识别逻辑
},
),
),
_buildSectionContainer(
child: ListItemFactory.createBuildMultilineInput(
"隐患描述",
"请对隐患进行详细描述(必填项)",
_standardController,
),
),
_buildSectionContainer(
child: ListItemFactory.createBuildMultilineInput(
"隐患部位",
"请对隐患部位进行详细描述(必填项)",
_partController,
),
),
_buildSectionContainer(
child: ListItemFactory.createRowSpaceBetweenItem(
leftText: "隐患级别",
rightText: _repairLevel,
isRight: true,
),
),
_buildSectionContainer(
child: ListItemFactory.createRowSpaceBetweenItem(
leftText: "隐患类型",
rightText: _repairType,
isRight: true,
),
),
_buildSectionContainer(
child: ListItemFactory.createYesNoSection(
title: "是否立即整改",
horizontalPadding: 0,
verticalPadding: 0,
yesLabel: "",
noLabel: "",
groupValue: _isDanger,
onChanged: (val) {
setState(() {
_isDanger = val;
});
},
),
),
if (_isDanger)
Column(
children: [
_buildSectionContainer(
child: ListItemFactory.createBuildMultilineInput(
"整改描述",
"请对隐患进行整改描述(必填项)",
_dangerDetailController,
),
),
SizedBox(height: 10),
_buildSectionContainer(
child: RepairedPhotoSection(
title: "整改后图片",
maxCount: 4,
horizontalPadding: 0,
mediaType: MediaType.image,
isShowAI: false,
onChanged: (List<File> files) {
// 上传图片 files
},
onAiIdentify: () {},
),
),
],
),
if (!_isDanger)
Column(
children: [
_buildSectionContainer(
child: ListItemFactory.createRowSpaceBetweenItem(
leftText: "整改责任部门",
rightText: _dangerOrganize,
isRight: true,
),
),
_buildSectionContainer(
child: ListItemFactory.createRowSpaceBetweenItem(
leftText: "整改期限",
rightText: _dangerTime,
isRight: true,
),
),
],
),
SizedBox(height: 30),
CustomButton(text: "提交", backgroundColor: Colors.blue),
],
),
),
);
}
}