2025.8.27 解决bug后上传
|
@ -36,27 +36,27 @@ android {
|
||||||
versionName = flutter.versionName
|
versionName = flutter.versionName
|
||||||
}
|
}
|
||||||
|
|
||||||
// ✅ 添加 release 签名配置
|
// // ✅ 添加 release 签名配置
|
||||||
signingConfigs {
|
// signingConfigs {
|
||||||
create("release") {
|
// create("release") {
|
||||||
storeFile = file(keystoreProperties["storeFile"] as String)
|
// storeFile = file(keystoreProperties["storeFile"] as String)
|
||||||
storePassword = keystoreProperties["storePassword"] as String
|
// storePassword = keystoreProperties["storePassword"] as String
|
||||||
keyAlias = keystoreProperties["keyAlias"] as String
|
// keyAlias = keystoreProperties["keyAlias"] as String
|
||||||
keyPassword = keystoreProperties["keyPassword"] as String
|
// keyPassword = keystoreProperties["keyPassword"] as String
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
buildTypes {
|
// buildTypes {
|
||||||
release {
|
// release {
|
||||||
// ✅ 替换成 release 签名
|
// // ✅ 替换成 release 签名
|
||||||
signingConfig = signingConfigs.getByName("release")
|
// signingConfig = signingConfigs.getByName("release")
|
||||||
isMinifyEnabled = false
|
// isMinifyEnabled = false
|
||||||
isShrinkResources = false
|
// isShrinkResources = false
|
||||||
}
|
// }
|
||||||
debug {
|
// debug {
|
||||||
signingConfig = signingConfigs.getByName("debug")
|
// signingConfig = signingConfigs.getByName("debug")
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
flutter {
|
flutter {
|
||||||
|
|
After Width: | Height: | Size: 345 KiB |
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
|
||||||
|
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||||
|
<item name="android:forceDarkAllowed">false</item>
|
||||||
|
<item name="android:windowFullscreen">false</item>
|
||||||
|
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
|
||||||
|
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||||
|
</style>
|
||||||
|
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||||
|
This theme determines the color of the Android Window while your
|
||||||
|
Flutter UI initializes, as well as behind your Flutter UI while its
|
||||||
|
running.
|
||||||
|
|
||||||
|
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
||||||
|
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||||
|
<item name="android:windowBackground">?android:colorBackground</item>
|
||||||
|
</style>
|
||||||
|
</resources>
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
|
||||||
|
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||||
|
<item name="android:forceDarkAllowed">false</item>
|
||||||
|
<item name="android:windowFullscreen">false</item>
|
||||||
|
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
|
||||||
|
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||||
|
</style>
|
||||||
|
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||||
|
This theme determines the color of the Android Window while your
|
||||||
|
Flutter UI initializes, as well as behind your Flutter UI while its
|
||||||
|
running.
|
||||||
|
|
||||||
|
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
||||||
|
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||||
|
<item name="android:windowBackground">?android:colorBackground</item>
|
||||||
|
</style>
|
||||||
|
</resources>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="appName">智守安全</string>
|
||||||
|
</resources>
|
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 6.6 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 8.9 KiB |
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "background.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 345 KiB |
|
@ -0,0 +1 @@
|
||||||
|
"CFBundleDisplayName" = "智守安全";
|
|
@ -29,6 +29,7 @@ class BottomPickerTwo {
|
||||||
int initialIndex = 0,
|
int initialIndex = 0,
|
||||||
double itemExtent = 40.0,
|
double itemExtent = 40.0,
|
||||||
double height = 250,
|
double height = 250,
|
||||||
|
double desiredSpacing = 16.0,
|
||||||
}) {
|
}) {
|
||||||
// 当前选中项
|
// 当前选中项
|
||||||
dynamic selected = items[initialIndex];
|
dynamic selected = items[initialIndex];
|
||||||
|
@ -46,7 +47,10 @@ class BottomPickerTwo {
|
||||||
children: [
|
children: [
|
||||||
// 按钮行
|
// 按钮行
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: 16,
|
||||||
|
vertical: 8,
|
||||||
|
),
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
|
@ -65,13 +69,39 @@ class BottomPickerTwo {
|
||||||
// 滚动选择器
|
// 滚动选择器
|
||||||
Expanded(
|
Expanded(
|
||||||
child: CupertinoPicker(
|
child: CupertinoPicker(
|
||||||
scrollController:
|
scrollController: FixedExtentScrollController(
|
||||||
FixedExtentScrollController(initialItem: initialIndex),
|
initialItem: initialIndex,
|
||||||
itemExtent: 30,
|
),
|
||||||
|
itemExtent: 35,
|
||||||
onSelectedItemChanged: (index) {
|
onSelectedItemChanged: (index) {
|
||||||
selected = items[index];
|
selected = items[index];
|
||||||
},
|
},
|
||||||
children: items.map(itemBuilder).toList(),
|
// children: items.map(itemBuilder).toList(),
|
||||||
|
children: List<Widget>.generate(items.length, (int index) {
|
||||||
|
return Padding(
|
||||||
|
// 通过Padding调整项间距
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
vertical: desiredSpacing / 2,
|
||||||
|
),
|
||||||
|
child: Center(
|
||||||
|
child: Text(
|
||||||
|
// '选项 $index',
|
||||||
|
items[index]["NAME"],
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18,
|
||||||
|
color:
|
||||||
|
index == selected
|
||||||
|
? CupertinoColors.activeBlue
|
||||||
|
: CupertinoColors.inactiveGray,
|
||||||
|
fontWeight:
|
||||||
|
index == selected
|
||||||
|
? FontWeight.bold
|
||||||
|
: FontWeight.normal,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
|
@ -152,7 +152,7 @@ class _CheckInformationOneItemState extends State<CheckInformationOneItem> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: MyAppbar(title: "隐患登记"),
|
appBar: MyAppbar(title: "隐患等级"),
|
||||||
body: Column(
|
body: Column(
|
||||||
children: [
|
children: [
|
||||||
// 详情滚动区域
|
// 详情滚动区域
|
||||||
|
|
|
@ -151,7 +151,7 @@ class _HazardRegistrationPageState extends State<HazardRegistrationPage> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: MyAppbar(title: "隐患登记"),
|
appBar: MyAppbar(title: "隐患等级"),
|
||||||
body: Column(
|
body: Column(
|
||||||
children: [
|
children: [
|
||||||
// 详情滚动区域
|
// 详情滚动区域
|
||||||
|
|
|
@ -311,7 +311,7 @@ class _CheckingInformationOnePageState extends State<CheckingInformationOnePage>
|
||||||
// 确认按钮
|
// 确认按钮
|
||||||
// const Spacer(),
|
// const Spacer(),
|
||||||
_buildTrueButton(),
|
_buildTrueButton(),
|
||||||
|
SizedBox(height: 10,),
|
||||||
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
@ -152,7 +152,33 @@ class _SafetyCommitmentDhListState extends State<SafetyCommitmentDhList> {
|
||||||
Future<void> _handleApply() async {
|
Future<void> _handleApply() async {
|
||||||
// 处理申请按钮点击逻辑
|
// 处理申请按钮点击逻辑
|
||||||
|
|
||||||
setState(() async {
|
// setState(() async {
|
||||||
|
// if(widget.type==1) {
|
||||||
|
// await pushPage(CompanySafetyCommitmentApply(), context);
|
||||||
|
// }else if(widget.type==2){
|
||||||
|
// await pushPage(WorkShopSafetyCommitmentApply(), context);
|
||||||
|
// }else {
|
||||||
|
// await pushPage(TeamSafetyCommitmentApply(), context);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// searchKeywords = "";
|
||||||
|
// currentPage = 1;
|
||||||
|
// list.clear();
|
||||||
|
// _fetchData();
|
||||||
|
// });
|
||||||
|
|
||||||
|
try {
|
||||||
|
final Map<String, dynamic> response;
|
||||||
|
if(widget.type==1) {
|
||||||
|
response = await ApiService.getCompanySafetyCommitmentPermission( id);
|
||||||
|
}else if(widget.type==2){
|
||||||
|
response = await ApiService.getWorkshopSafetyCommitmentPermission(id);
|
||||||
|
}else {
|
||||||
|
response = await ApiService.getTeamSafetyCommitmentPermission(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response['result'] == 'success') {
|
||||||
|
|
||||||
if(widget.type==1) {
|
if(widget.type==1) {
|
||||||
await pushPage(CompanySafetyCommitmentApply(), context);
|
await pushPage(CompanySafetyCommitmentApply(), context);
|
||||||
}else if(widget.type==2){
|
}else if(widget.type==2){
|
||||||
|
@ -161,44 +187,19 @@ class _SafetyCommitmentDhListState extends State<SafetyCommitmentDhList> {
|
||||||
await pushPage(TeamSafetyCommitmentApply(), context);
|
await pushPage(TeamSafetyCommitmentApply(), context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setState(() {
|
||||||
searchKeywords = "";
|
searchKeywords = "";
|
||||||
currentPage = 1;
|
currentPage = 1;
|
||||||
list.clear();
|
list.clear();
|
||||||
_fetchData();
|
_fetchData();
|
||||||
});
|
});
|
||||||
|
}else{
|
||||||
// try {
|
ToastUtil.showNormal(context, response['msg']);
|
||||||
// final Map<String, dynamic> response;
|
}
|
||||||
// if(widget.type==1) {
|
} catch (e) {
|
||||||
// response = await ApiService.getCompanySafetyCommitmentPermission( id);
|
ToastUtil.showNormal(context,'$e');
|
||||||
// }else if(widget.type==2){
|
print('Error fetching data: $e');
|
||||||
// response = await ApiService.getWorkshopSafetyCommitmentPermission(id);
|
}
|
||||||
// }else {
|
|
||||||
// response = await ApiService.getTeamSafetyCommitmentPermission(id);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (response['result'] == 'success') {
|
|
||||||
// setState(() async {
|
|
||||||
// if(widget.type==1) {
|
|
||||||
// await pushPage(CompanySafetyCommitmentApply(), context);
|
|
||||||
// }else if(widget.type==2){
|
|
||||||
//
|
|
||||||
// }else {
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// searchKeywords = "";
|
|
||||||
// currentPage = 1;
|
|
||||||
// list.clear();
|
|
||||||
// _fetchData();
|
|
||||||
// });
|
|
||||||
// }else{
|
|
||||||
// ToastUtil.showNormal(context, response['msg']);
|
|
||||||
// }
|
|
||||||
// } catch (e) {
|
|
||||||
// ToastUtil.showNormal(context,'$e');
|
|
||||||
// print('Error fetching data: $e');
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ class _SafetyCommitmentTabListState extends State<SafetyCommitmentTabList> {
|
||||||
buttonInfos = [
|
buttonInfos = [
|
||||||
{
|
{
|
||||||
"icon": "assets/icon-apps/icon_101.png",
|
"icon": "assets/icon-apps/icon_101.png",
|
||||||
"title": "动火作业",
|
"title": "公司安全承诺",
|
||||||
"unreadCount": 0,
|
"unreadCount": 0,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -153,6 +153,7 @@ class _RiskDetailPageState extends State<RiskDetailPage> {
|
||||||
Spacer(),
|
Spacer(),
|
||||||
// 底部按钮固定
|
// 底部按钮固定
|
||||||
_buildBottomButton(),
|
_buildBottomButton(),
|
||||||
|
SizedBox(height: 10,)
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
|
@ -13,6 +13,8 @@ class HotWorkDetailFormWidget extends StatefulWidget {
|
||||||
final VoidCallback onChooseHotworkUser;
|
final VoidCallback onChooseHotworkUser;
|
||||||
final VoidCallback onAnalyzeTap;
|
final VoidCallback onAnalyzeTap;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 新增
|
// 新增
|
||||||
final VoidCallback? onChooseVideoManager;
|
final VoidCallback? onChooseVideoManager;
|
||||||
/// 选择摄像头
|
/// 选择摄像头
|
||||||
|
@ -55,6 +57,7 @@ class HotWorkDetailFormWidget extends StatefulWidget {
|
||||||
this.hotworkPersonController,
|
this.hotworkPersonController,
|
||||||
this.relatedController,
|
this.relatedController,
|
||||||
this.riskController,
|
this.riskController,
|
||||||
|
|
||||||
}) : assert(
|
}) : assert(
|
||||||
!isEditable ||
|
!isEditable ||
|
||||||
(contentController != null &&
|
(contentController != null &&
|
||||||
|
|
|
@ -100,7 +100,7 @@ class _HotworkApplyDetailState extends State<HotworkApplyDetail> {
|
||||||
_getData();
|
_getData();
|
||||||
} else {
|
} else {
|
||||||
isEditable = true;
|
isEditable = true;
|
||||||
pd['ANALYZE_TIME'] = 1;
|
// pd['ANALYZE_TIME'] = 1;
|
||||||
pd['APPLY_DEPARTMENT_ID'] = SessionService.instance.deptId;
|
pd['APPLY_DEPARTMENT_ID'] = SessionService.instance.deptId;
|
||||||
pd['APPLY_DEPARTMENT_NAME'] =
|
pd['APPLY_DEPARTMENT_NAME'] =
|
||||||
SessionService.instance.loginUser!['DEPARTMENT_NAME'] ?? '';
|
SessionService.instance.loginUser!['DEPARTMENT_NAME'] ?? '';
|
||||||
|
@ -731,6 +731,7 @@ class _HotworkApplyDetailState extends State<HotworkApplyDetail> {
|
||||||
onWorkAreaHandle: _getWorkArea,
|
onWorkAreaHandle: _getWorkArea,
|
||||||
onWorkAreaLocationHandle: _showLocationHandle,
|
onWorkAreaLocationHandle: _showLocationHandle,
|
||||||
|
|
||||||
|
|
||||||
onAnalyzeTap: () {
|
onAnalyzeTap: () {
|
||||||
pushPage(
|
pushPage(
|
||||||
HotworkGasList(HOTWORK_ID: widget.HOTWORK_ID),
|
HotworkGasList(HOTWORK_ID: widget.HOTWORK_ID),
|
||||||
|
|
|
@ -53,13 +53,13 @@ class _UserinfoPageState extends State<UserinfoPage> {
|
||||||
Divider(height: 1),
|
Divider(height: 1),
|
||||||
_userItemCell("部门", user["DEPARTMENT_NAME"]??"", false),
|
_userItemCell("部门", user["DEPARTMENT_NAME"]??"", false),
|
||||||
Divider(height: 1),
|
Divider(height: 1),
|
||||||
_userItemCell("岗位", user["DUTIES_NAME"]??"", true),
|
_userItemCell("岗位(工种)", user["POST_NAME"]??"", true),
|
||||||
Divider(height: 1),
|
Divider(height: 1),
|
||||||
_userItemCell("人员类型", user["PERSONNEL_TYPE_NAME"]??"", false),
|
_userItemCell("人员类型", user["PERSONNEL_TYPE_NAME"]??"", false),
|
||||||
Divider(height: 1),
|
Divider(height: 1),
|
||||||
_userItemCell("入职时间", user["ENTRY_DATE"]??"", false),
|
_userItemCell("入职时间", user["ENTRY_DATE"]??"", false),
|
||||||
Divider(height: 1),
|
Divider(height: 1),
|
||||||
_userItemCell("工种", user["TYPE_OF_WORK_NAME"]??"", false),
|
// _userItemCell("工种", user["TYPE_OF_WORK_NAME"]??"", false),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
@ -263,7 +263,7 @@ class _DangerProjectPageState extends State<DangerProjectPage> {
|
||||||
Card(
|
Card(
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
child: Container(
|
child: Container(
|
||||||
padding: const EdgeInsets.all(16),
|
padding: const EdgeInsets.all(10),
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
|
@ -375,7 +375,7 @@ class _DangerProjectPageState extends State<DangerProjectPage> {
|
||||||
VoidCallback? onImageTap,
|
VoidCallback? onImageTap,
|
||||||
}) {
|
}) {
|
||||||
final isSelected = item["REFERENCE_BASIS"] == value;
|
final isSelected = item["REFERENCE_BASIS"] == value;
|
||||||
final buttonWidth = (screenWidth - 60) / 3 - 10; // 计算按钮宽度
|
final buttonWidth = (screenWidth - 30) / 3 - 10; // 计算按钮宽度
|
||||||
|
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
|
@ -395,15 +395,15 @@ class _DangerProjectPageState extends State<DangerProjectPage> {
|
||||||
// 不要在这里放 Expanded(非 Flex 父组件)
|
// 不要在这里放 Expanded(非 Flex 父组件)
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: 30,
|
height: 30,
|
||||||
width: 90,
|
width: 100,
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
Icon(icon, color: isSelected ? color : Colors.grey, size: 30),
|
Icon(icon, color: isSelected ? color : Colors.grey, size: 30),
|
||||||
const SizedBox(width: 8),
|
const SizedBox(width: 3),
|
||||||
Flexible(
|
Flexible(
|
||||||
child: Text(
|
child: Text(
|
||||||
label,
|
label,
|
||||||
|
@ -415,10 +415,8 @@ class _DangerProjectPageState extends State<DangerProjectPage> {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
|
||||||
),
|
const SizedBox(width: 3),
|
||||||
),
|
|
||||||
const SizedBox(width: 6),
|
|
||||||
if ((value == "option1" && item["REFERENCE_BASIS"] == "option1") ||
|
if ((value == "option1" && item["REFERENCE_BASIS"] == "option1") ||
|
||||||
(value == "option2" &&
|
(value == "option2" &&
|
||||||
item["REFERENCE_BASIS"] == "option2" &&
|
item["REFERENCE_BASIS"] == "option2" &&
|
||||||
|
@ -440,6 +438,11 @@ class _DangerProjectPageState extends State<DangerProjectPage> {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
@ -206,8 +206,9 @@ class _riskListPageState extends State<RiskListPage> {
|
||||||
height: 50,
|
height: 50,
|
||||||
child: TextButton(
|
child: TextButton(
|
||||||
onPressed: () => _nextHandle(), child: Text("下一步", style: TextStyle(color: Colors.white),)),
|
onPressed: () => _nextHandle(), child: Text("下一步", style: TextStyle(color: Colors.white),)),
|
||||||
)
|
),
|
||||||
|
|
||||||
|
SizedBox(height: 20,),
|
||||||
],
|
],
|
||||||
)),
|
)),
|
||||||
);
|
);
|
||||||
|
|