From 17a1791d9230a8fe117d904f04275b15f07989da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=8C=AF=E5=8D=87?= <359059686@qq.com> Date: Tue, 26 Aug 2025 17:32:05 +0800 Subject: [PATCH] =?UTF-8?q?fate=20:=20=E9=97=AE=E9=A2=98=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=20problem=5Fupload=5Fpage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/app/routes/app_pages.dart | 13 +- lib/app/routes/app_routes.dart | 1 + lib/modules/home/bindings/home_binding.dart | 1 + .../problem/bindings/problem_binding.dart | 2 + .../controllers/problem_controller.dart | 2 +- .../problem_upload_controller.dart | 2 + lib/modules/problem/views/problem_page.dart | 224 ++++++++---------- .../problem/views/problem_upload_page.dart | 7 +- 8 files changed, 110 insertions(+), 142 deletions(-) diff --git a/lib/app/routes/app_pages.dart b/lib/app/routes/app_pages.dart index a882e55..0284e59 100644 --- a/lib/app/routes/app_pages.dart +++ b/lib/app/routes/app_pages.dart @@ -5,6 +5,8 @@ import 'package:problem_check_system/modules/auth/bindings/auth_binding.dart'; import 'package:problem_check_system/modules/auth/views/login_page.dart'; import 'package:problem_check_system/modules/my/bingdings/change_password_binding.dart'; import 'package:problem_check_system/modules/my/views/change_password.dart'; +import 'package:problem_check_system/modules/problem/bindings/problem_binding.dart'; +import 'package:problem_check_system/modules/problem/views/problem_upload_page.dart'; import 'app_routes.dart'; @@ -27,11 +29,10 @@ abstract class AppPages { page: () => const ChangePasswordPage(), binding: ChangePasswordBinding(), ), - // // 添加 Problem 模块的路由和绑定 - // GetPage( - // name: AppRoutes.problem, // 确保在 app_routes.dart 中定义了此常量 - // page: () => const ProblemPage(), - // binding: null, - // ), + GetPage( + name: AppRoutes.problemUpload, + page: () => const ProblemUploadPage(), + binding: ProblemBinding(), + ), ]; } diff --git a/lib/app/routes/app_routes.dart b/lib/app/routes/app_routes.dart index 272fc7c..1b49c23 100644 --- a/lib/app/routes/app_routes.dart +++ b/lib/app/routes/app_routes.dart @@ -5,4 +5,5 @@ abstract class AppRoutes { static const problem = '/problem'; static const my = '/my'; static const changePassword = '/changePassword'; + static const problemUpload = '/problemUpload'; } diff --git a/lib/modules/home/bindings/home_binding.dart b/lib/modules/home/bindings/home_binding.dart index 0798137..464ace3 100644 --- a/lib/modules/home/bindings/home_binding.dart +++ b/lib/modules/home/bindings/home_binding.dart @@ -24,6 +24,7 @@ class HomeBinding implements Bindings { dio: dio, connectivityProvider: connectivityProvider, ), + fenix: true, ); Get.lazyPut(() => MyController()); Get.lazyPut(() => AuthProvider(dio: dio)); diff --git a/lib/modules/problem/bindings/problem_binding.dart b/lib/modules/problem/bindings/problem_binding.dart index 4fc8e2e..afbf807 100644 --- a/lib/modules/problem/bindings/problem_binding.dart +++ b/lib/modules/problem/bindings/problem_binding.dart @@ -3,6 +3,7 @@ import 'package:dio/dio.dart'; import 'package:problem_check_system/data/providers/connectivity_provider.dart'; import 'package:problem_check_system/modules/problem/controllers/problem_controller.dart'; import 'package:problem_check_system/data/providers/local_database.dart'; +import 'package:problem_check_system/modules/problem/controllers/problem_upload_controller.dart'; class ProblemBinding implements Bindings { @override @@ -17,5 +18,6 @@ class ProblemBinding implements Bindings { connectivityProvider: Get.find(), ), ); + Get.lazyPut(() => ProblemUploadController()); } } diff --git a/lib/modules/problem/controllers/problem_controller.dart b/lib/modules/problem/controllers/problem_controller.dart index 7514c0b..e2cce29 100644 --- a/lib/modules/problem/controllers/problem_controller.dart +++ b/lib/modules/problem/controllers/problem_controller.dart @@ -49,7 +49,7 @@ class ProblemController extends GetxController final double _edgePaddingX = 27.0.w; // 边缘间距 final double _edgePaddingY = 111.0.h; // 边缘间距 // 可拖动按钮的位置,使用 Rx - final fabUploadPosition = Offset(301.w, 660.h).obs; + final fabUploadPosition = Offset(337.0, 703.7).obs; void updateFabUploadPosition(Offset delta) { final screenWidth = ScreenUtil().screenWidth; diff --git a/lib/modules/problem/controllers/problem_upload_controller.dart b/lib/modules/problem/controllers/problem_upload_controller.dart index 2a20e6a..a673c8b 100644 --- a/lib/modules/problem/controllers/problem_upload_controller.dart +++ b/lib/modules/problem/controllers/problem_upload_controller.dart @@ -4,6 +4,8 @@ import 'package:problem_check_system/data/models/problem_model.dart'; // import 'package:problem_check_system/services/problem_service.dart'; class ProblemUploadController extends GetxController { + ProblemUploadController(); + // 假设从数据库或其他来源获取问题列表 final RxList problems = [].obs; diff --git a/lib/modules/problem/views/problem_page.dart b/lib/modules/problem/views/problem_page.dart index 5af14a5..5ce8609 100644 --- a/lib/modules/problem/views/problem_page.dart +++ b/lib/modules/problem/views/problem_page.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:problem_check_system/app/routes/app_routes.dart'; import 'package:problem_check_system/modules/problem/controllers/problem_controller.dart'; import 'package:problem_check_system/modules/problem/views/problem_list_page.dart'; // 导入修正后的 ProblemListPage import 'package:problem_check_system/modules/problem/views/problem_form_page.dart'; @@ -35,7 +36,7 @@ class ProblemPage extends GetView { controller: controller.tabController, indicatorSize: TabBarIndicatorSize.tab, indicator: const BoxDecoration( - color: Color(0xfffff7f7), + color: Color(0xfff7f7f7), borderRadius: BorderRadius.only( topLeft: Radius.circular(8), topRight: Radius.circular(60), @@ -56,7 +57,7 @@ class ProblemPage extends GetView { fontSize: 14.sp, ), labelColor: Colors.black, - unselectedLabelColor: Colors.white, + unselectedLabelColor: Color(0xfff7f7f7), ), ), Expanded( @@ -64,152 +65,113 @@ class ProblemPage extends GetView { controller: controller.tabController, children: [ // 问题列表 Tab - Column( - children: [ - Container( - padding: EdgeInsets.symmetric(horizontal: 17.w), - child: Row( - children: [ - CustomDateRangeDropdown( - selectedRange: controller.selectedDateRange, - onChanged: (rangeValue) { - controller.updateFiltersAndLoadProblems( - newDateRange: rangeValue, - ); - }, - ), + DecoratedBox( + decoration: BoxDecoration(color: Color(0xfff7f7f7)), + child: Column( + children: [ + Container( + padding: EdgeInsets.symmetric(horizontal: 17.w), + child: Row( + children: [ + CustomDateRangeDropdown( + selectedRange: controller.selectedDateRange, + onChanged: (rangeValue) { + controller.updateFiltersAndLoadProblems( + newDateRange: rangeValue, + ); + }, + ), - CustomStringDropdown( - selectedValue: controller.selectedUploadStatus, - items: const ['全部', '未上传', '已上传'], - onChanged: (uploadValue) { - controller.updateFiltersAndLoadProblems( - newUploadStatus: uploadValue, - ); - }, - ), + CustomStringDropdown( + selectedValue: controller.selectedUploadStatus, + items: const ['全部', '未上传', '已上传'], + onChanged: (uploadValue) { + controller.updateFiltersAndLoadProblems( + newUploadStatus: uploadValue, + ); + }, + ), - CustomStringDropdown( - selectedValue: controller.selectedBindingStatus, - items: const ['全部', '未绑定', '已绑定'], - onChanged: (bindingValue) { - controller.updateFiltersAndLoadProblems( - newBindingStatus: bindingValue, - ); - }, - ), - ], + CustomStringDropdown( + selectedValue: controller.selectedBindingStatus, + items: const ['全部', '未绑定', '已绑定'], + onChanged: (bindingValue) { + controller.updateFiltersAndLoadProblems( + newBindingStatus: bindingValue, + ); + }, + ), + ], + ), ), - ), - Expanded( - child: // 使用通用列表组件 - ProblemListPage( - problemsToShow: controller.problems, - viewType: ProblemCardViewType.buttons, + Expanded( + child: // 使用通用列表组件 + ProblemListPage( + problemsToShow: controller.problems, + viewType: ProblemCardViewType.buttons, + ), ), - ), - ], + ], + ), ), // 历史问题列表 Tab - Column( - children: [ - Container( - padding: EdgeInsets.symmetric(horizontal: 17.w), - child: Row( - children: [ - CustomDateRangeDropdown( - selectedRange: controller.selectedDateRange, - onChanged: (rangeValue) { - controller.updateFiltersAndLoadProblems( - newDateRange: rangeValue, - ); - }, - ), + DecoratedBox( + decoration: BoxDecoration(color: Color(0xfff7f7f7)), + child: Column( + children: [ + Container( + padding: EdgeInsets.symmetric(horizontal: 17.w), + child: Row( + children: [ + CustomDateRangeDropdown( + selectedRange: controller.selectedDateRange, + onChanged: (rangeValue) { + controller.updateFiltersAndLoadProblems( + newDateRange: rangeValue, + ); + }, + ), - CustomStringDropdown( - selectedValue: controller.selectedUploadStatus, - items: const ['全部', '未上传', '已上传'], - onChanged: (uploadValue) { - controller.updateFiltersAndLoadProblems( - newUploadStatus: uploadValue, - ); - }, - ), + CustomStringDropdown( + selectedValue: controller.selectedUploadStatus, + items: const ['全部', '未上传', '已上传'], + onChanged: (uploadValue) { + controller.updateFiltersAndLoadProblems( + newUploadStatus: uploadValue, + ); + }, + ), - CustomStringDropdown( - selectedValue: controller.selectedBindingStatus, - items: const ['全部', '未绑定', '已绑定'], - onChanged: (bindingValue) { - controller.updateFiltersAndLoadProblems( - newBindingStatus: bindingValue, - ); - }, - ), - ], + CustomStringDropdown( + selectedValue: controller.selectedBindingStatus, + items: const ['全部', '未绑定', '已绑定'], + onChanged: (bindingValue) { + controller.updateFiltersAndLoadProblems( + newBindingStatus: bindingValue, + ); + }, + ), + ], + ), ), - ), - Expanded( - child: // 使用通用列表组件 - ProblemListPage( - problemsToShow: controller.problems, - viewType: ProblemCardViewType.buttons, + Expanded( + child: // 使用通用列表组件 + ProblemListPage( + problemsToShow: controller.problems, + viewType: ProblemCardViewType.buttons, + ), ), - ), - ], + ], + ), ), ], ), ), ], ), - // floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, - // floatingActionButton: Stack( - // children: [ - // Align( - // alignment: Alignment.bottomCenter, - // child: FloatingActionButton( - // heroTag: "btn_add", - // onPressed: () { - // Get.to(() => ProblemFormPage()); - // }, - // shape: const CircleBorder(), - // backgroundColor: Colors.blue[300], - // foregroundColor: Colors.white, - // child: const Icon(Icons.add), - // ), - // ), - // Positioned( - // right: controller.fabPosition.value.dx, //27.w, - // bottom: controller.fabPosition.value.dy, //56.h, - // child: Obx(() { - // final bool isOnline = controller.isOnline.value; - // return GestureDetector( - // onPanUpdate: (details) { - // // 调用控制器中的方法来更新位置 - // controller.updatePosition(details.delta); - // }, - // child: FloatingActionButton( - // heroTag: "btn_upload", - // onPressed: isOnline - // ? () => controller.uploadAllUnuploaded() - // : null, - // foregroundColor: Colors.white, - // backgroundColor: isOnline - // ? Colors.red[300] - // : Colors.grey[400], - // child: Icon( - // isOnline - // ? Icons.file_upload_outlined - // : Icons.cloud_off_outlined, - // ), - // ), - // ); - // }), - // ), - // ], - // ), + floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, // 使用 Stack 统一管理所有浮动按钮 floatingActionButton: Stack( @@ -252,7 +214,7 @@ class ProblemPage extends GetView { child: FloatingActionButton( heroTag: "btn_upload", onPressed: isOnline - ? () => controller.uploadAllUnuploaded() + ? () => Get.toNamed(AppRoutes.problemUpload) : null, foregroundColor: Colors.white, backgroundColor: isOnline diff --git a/lib/modules/problem/views/problem_upload_page.dart b/lib/modules/problem/views/problem_upload_page.dart index 95c7a24..f873f8e 100644 --- a/lib/modules/problem/views/problem_upload_page.dart +++ b/lib/modules/problem/views/problem_upload_page.dart @@ -4,10 +4,9 @@ import 'package:get/get.dart'; import 'package:problem_check_system/modules/problem/controllers/problem_upload_controller.dart'; import 'package:problem_check_system/modules/problem/views/widgets/problem_card.dart'; -class ProblemUploadPage extends StatelessWidget { - ProblemUploadPage({super.key}); - - final ProblemUploadController controller = Get.put(ProblemUploadController()); +// todo 使用problem_list_page,填充内容,problem_controller 控制内容 +class ProblemUploadPage extends GetView { + const ProblemUploadPage({super.key}); @override Widget build(BuildContext context) {