197 lines
6.3 KiB
Dart
197 lines
6.3 KiB
Dart
|
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),
|
||
|
],
|
||
|
),
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
}
|