11 changed files with 263 additions and 272 deletions
@ -1,11 +1,23 @@
|
||||
import 'package:get/get.dart'; |
||||
import 'package:problem_check_system/data/models/problem_model.dart'; |
||||
import 'package:problem_check_system/modules/problem/controllers/problem_form_controller.dart'; |
||||
|
||||
class ProblemFormBinding extends Bindings { |
||||
@override |
||||
void dependencies() { |
||||
final dynamic arguments = Get.arguments; |
||||
final bool readOnly = Get.parameters['isReadOnly'] == 'true'; |
||||
|
||||
Problem? problem; |
||||
if (arguments != null && arguments is Problem) { |
||||
problem = arguments; |
||||
} |
||||
Get.lazyPut<ProblemFormController>( |
||||
() => ProblemFormController(problemRepository: Get.find()), |
||||
() => ProblemFormController( |
||||
problemRepository: Get.find(), |
||||
problem: problem, |
||||
isReadOnly: readOnly, |
||||
), |
||||
); |
||||
} |
||||
} |
||||
|
@ -1,122 +0,0 @@
|
||||
// widgets/compact_filter_bar.dart |
||||
import 'package:flutter/material.dart'; |
||||
import 'package:flutter_screenutil/flutter_screenutil.dart'; |
||||
import 'package:get/get.dart'; |
||||
import 'package:problem_check_system/modules/problem/controllers/problem_controller.dart'; |
||||
|
||||
import 'custom_filter_dropdown.dart'; |
||||
|
||||
class CompactFilterBar extends GetView<ProblemController> { |
||||
final bool showDateRangeFilter; |
||||
final bool showUploadFilter; |
||||
final bool showBindFilter; |
||||
final bool showCustomButton; // 新增:是否显示自定义按钮 |
||||
final String? customButtonText; // 新增:自定义按钮文本 |
||||
final IconData? customButtonIcon; // 新增:自定义按钮图标 |
||||
final VoidCallback? onCustomButtonPressed; // 新增:自定义按钮点击回调 |
||||
final EdgeInsetsGeometry? padding; |
||||
|
||||
const CompactFilterBar({ |
||||
super.key, |
||||
this.showDateRangeFilter = true, |
||||
this.showUploadFilter = true, |
||||
this.showBindFilter = true, |
||||
this.showCustomButton = false, // 默认不显示 |
||||
this.customButtonText, |
||||
this.customButtonIcon, |
||||
this.onCustomButtonPressed, |
||||
this.padding, |
||||
}); |
||||
|
||||
@override |
||||
Widget build(BuildContext context) { |
||||
return Container( |
||||
padding: padding ?? EdgeInsets.symmetric(horizontal: 16.w, vertical: 8.h), |
||||
color: Colors.grey[50], |
||||
child: Row( |
||||
children: [ |
||||
// 自定义按钮 |
||||
if (showCustomButton) ...[_buildCustomButton()], |
||||
// 日期范围筛选 |
||||
if (showDateRangeFilter) ...[ |
||||
Obx( |
||||
() => CustomFilterDropdown( |
||||
title: '时间范围', |
||||
options: controller.dateRangeOptions, |
||||
selectedValue: controller.currentDateRange.value.name, |
||||
onChanged: controller.updateDateRange, |
||||
width: 100.w, |
||||
showBorder: false, |
||||
), |
||||
), |
||||
], |
||||
|
||||
// 上传状态筛选 |
||||
if (showUploadFilter) ...[ |
||||
Obx( |
||||
() => CustomFilterDropdown( |
||||
title: '上传状态', |
||||
options: controller.uploadOptions, |
||||
selectedValue: controller.currentUploadFilter.value, |
||||
onChanged: controller.updateUploadFilter, |
||||
width: 100.w, |
||||
showBorder: false, |
||||
), |
||||
), |
||||
], |
||||
|
||||
// 绑定状态筛选 |
||||
if (showBindFilter) ...[ |
||||
Obx( |
||||
() => CustomFilterDropdown( |
||||
title: '绑定状态', |
||||
options: controller.bindOptions, |
||||
selectedValue: controller.currentBindFilter.value, |
||||
onChanged: controller.updateBindFilter, |
||||
width: 100.w, |
||||
showBorder: false, |
||||
), |
||||
), |
||||
], |
||||
], |
||||
), |
||||
); |
||||
} |
||||
|
||||
// 构建自定义按钮 |
||||
Widget _buildCustomButton() { |
||||
return SizedBox( |
||||
width: 110.w, |
||||
// decoration: BoxDecoration( |
||||
// border: Border.all(color: Colors.grey.shade300), |
||||
// borderRadius: BorderRadius.circular(8.r), |
||||
// ), |
||||
child: TextButton( |
||||
onPressed: onCustomButtonPressed, |
||||
style: TextButton.styleFrom( |
||||
padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 4.h), |
||||
shape: RoundedRectangleBorder( |
||||
borderRadius: BorderRadius.circular(8.r), |
||||
), |
||||
), |
||||
child: Row( |
||||
mainAxisAlignment: MainAxisAlignment.center, |
||||
children: [ |
||||
if (customButtonIcon != null) ...[ |
||||
Icon(customButtonIcon, size: 16.sp, color: Colors.grey[700]), |
||||
SizedBox(width: 4.w), |
||||
], |
||||
Text( |
||||
customButtonText ?? '自定义', |
||||
style: TextStyle( |
||||
fontSize: 14.sp, |
||||
color: Colors.black87, |
||||
fontWeight: FontWeight.normal, |
||||
), |
||||
), |
||||
], |
||||
), |
||||
), |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,66 @@
|
||||
// widgets/compact_filter_bar.dart |
||||
import 'package:flutter/material.dart'; |
||||
import 'package:flutter_screenutil/flutter_screenutil.dart'; |
||||
import 'package:get/get.dart'; |
||||
import 'package:problem_check_system/modules/problem/controllers/problem_controller.dart'; |
||||
|
||||
import 'custom_filter_dropdown.dart'; |
||||
|
||||
class CurrentFilterBar extends GetView<ProblemController> { |
||||
final EdgeInsetsGeometry? padding; |
||||
|
||||
const CurrentFilterBar({super.key, this.padding}); |
||||
|
||||
@override |
||||
Widget build(BuildContext context) { |
||||
return Container( |
||||
padding: padding ?? EdgeInsets.symmetric(horizontal: 16.w, vertical: 5.h), |
||||
color: Colors.grey[50], |
||||
child: Row( |
||||
children: [ |
||||
// 日期范围筛选 |
||||
...[ |
||||
Obx( |
||||
() => CustomFilterDropdown( |
||||
title: '时间范围', |
||||
options: controller.dateRangeOptions, |
||||
selectedValue: controller.currentDateRange.value.name, |
||||
onChanged: controller.updateCurrentDateRange, |
||||
width: 100.w, |
||||
showBorder: false, |
||||
), |
||||
), |
||||
], |
||||
|
||||
// 上传状态筛选 |
||||
...[ |
||||
Obx( |
||||
() => CustomFilterDropdown( |
||||
title: '上传状态', |
||||
options: controller.uploadOptions, |
||||
selectedValue: controller.currentUploadFilter.value, |
||||
onChanged: controller.updateCurrentUpload, |
||||
width: 100.w, |
||||
showBorder: false, |
||||
), |
||||
), |
||||
], |
||||
|
||||
// 绑定状态筛选 |
||||
...[ |
||||
Obx( |
||||
() => CustomFilterDropdown( |
||||
title: '绑定状态', |
||||
options: controller.bindOptions, |
||||
selectedValue: controller.currentBindFilter.value, |
||||
onChanged: controller.updateCurrentBind, |
||||
width: 100.w, |
||||
showBorder: false, |
||||
), |
||||
), |
||||
], |
||||
], |
||||
), |
||||
); |
||||
} |
||||
} |
@ -1,53 +0,0 @@
|
||||
import 'package:flutter/material.dart'; |
||||
import 'package:flutter_screenutil/flutter_screenutil.dart'; |
||||
import 'package:get/get.dart'; |
||||
import 'package:problem_check_system/modules/problem/views/widgets/models/dropdown_option.dart'; |
||||
|
||||
class CustomObjectDropdown extends StatelessWidget { |
||||
final RxString selectedValue; |
||||
final List<DropdownOption> items; |
||||
final Function(String) onChanged; |
||||
|
||||
const CustomObjectDropdown({ |
||||
super.key, |
||||
required this.selectedValue, |
||||
required this.items, |
||||
required this.onChanged, |
||||
}); |
||||
|
||||
@override |
||||
Widget build(BuildContext context) { |
||||
return Obx( |
||||
() => Container( |
||||
height: 30.h, |
||||
margin: EdgeInsets.only(right: 10.w, top: 10.w, bottom: 10.w), |
||||
alignment: Alignment.center, |
||||
padding: EdgeInsets.symmetric(horizontal: 12.5.w, vertical: 7.5.h), |
||||
decoration: BoxDecoration( |
||||
color: const Color.fromARGB(90, 158, 158, 158), |
||||
borderRadius: BorderRadius.circular(7.5.w), |
||||
), |
||||
child: DropdownButtonHideUnderline( |
||||
child: DropdownButton<String>( |
||||
value: selectedValue.value, |
||||
onChanged: (String? newValue) { |
||||
if (newValue != null) { |
||||
onChanged(newValue); |
||||
} |
||||
}, |
||||
items: items.map((DropdownOption option) { |
||||
return DropdownMenuItem<String>( |
||||
value: option.value, |
||||
child: Text(option.label), |
||||
); |
||||
}).toList(), |
||||
icon: const Icon(Icons.arrow_drop_down, size: 15), |
||||
style: TextStyle(fontSize: 10.sp, color: Colors.black), |
||||
dropdownColor: Colors.white, |
||||
underline: const SizedBox.shrink(), |
||||
), |
||||
), |
||||
), |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,97 @@
|
||||
// widgets/compact_filter_bar.dart |
||||
import 'package:flutter/material.dart'; |
||||
import 'package:flutter_screenutil/flutter_screenutil.dart'; |
||||
import 'package:get/get.dart'; |
||||
import 'package:problem_check_system/modules/problem/controllers/problem_controller.dart'; |
||||
|
||||
import 'custom_filter_dropdown.dart'; |
||||
|
||||
class HistoryFilterBar extends GetView<ProblemController> { |
||||
final EdgeInsetsGeometry? padding; |
||||
|
||||
const HistoryFilterBar({super.key, this.padding}); |
||||
|
||||
@override |
||||
Widget build(BuildContext context) { |
||||
return Container( |
||||
padding: padding ?? EdgeInsets.symmetric(horizontal: 16.w, vertical: 5.h), |
||||
color: Colors.grey[50], |
||||
child: Row( |
||||
children: [ |
||||
// 显示日期选择 |
||||
...[ |
||||
SizedBox( |
||||
width: 110.w, |
||||
// decoration: BoxDecoration( |
||||
// border: Border.all(color: Colors.grey.shade300), |
||||
// borderRadius: BorderRadius.circular(8.r), |
||||
// ), |
||||
child: TextButton( |
||||
onPressed: () { |
||||
controller.selectDateRange(context); |
||||
}, |
||||
style: TextButton.styleFrom( |
||||
padding: EdgeInsets.symmetric( |
||||
horizontal: 12.w, |
||||
vertical: 4.h, |
||||
), |
||||
shape: RoundedRectangleBorder( |
||||
borderRadius: BorderRadius.circular(8.r), |
||||
), |
||||
), |
||||
child: Row( |
||||
mainAxisAlignment: MainAxisAlignment.center, |
||||
children: [ |
||||
Icon( |
||||
Icons.date_range, |
||||
size: 16.sp, |
||||
color: Colors.grey[700], |
||||
), |
||||
SizedBox(width: 4.w), |
||||
|
||||
Text( |
||||
'选择日期', |
||||
style: TextStyle( |
||||
fontSize: 14.sp, |
||||
color: Colors.black87, |
||||
fontWeight: FontWeight.normal, |
||||
), |
||||
), |
||||
], |
||||
), |
||||
), |
||||
), |
||||
], |
||||
|
||||
// 上传状态筛选 |
||||
...[ |
||||
Obx( |
||||
() => CustomFilterDropdown( |
||||
title: '上传状态', |
||||
options: controller.uploadOptions, |
||||
selectedValue: controller.historyUploadFilter.value, |
||||
onChanged: controller.updateHistoryUpload, |
||||
width: 100.w, |
||||
showBorder: false, |
||||
), |
||||
), |
||||
], |
||||
|
||||
// 绑定状态筛选 |
||||
...[ |
||||
Obx( |
||||
() => CustomFilterDropdown( |
||||
title: '绑定状态', |
||||
options: controller.bindOptions, |
||||
selectedValue: controller.historyBindFilter.value, |
||||
onChanged: controller.updateHistoryBind, |
||||
width: 100.w, |
||||
showBorder: false, |
||||
), |
||||
), |
||||
], |
||||
], |
||||
), |
||||
); |
||||
} |
||||
} |
Loading…
Reference in new issue