From 33996285f4c91c3a3f33b566151ab48d0dc41d02 Mon Sep 17 00:00:00 2001 From: "DESKTOP-I3JPKHK\\wy" <1111> Date: Thu, 24 Apr 2025 11:43:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/job/annotate_list_to_refresh.dart | 17 +++++++++++++++ .../components/question_number_view.dart | 21 +++++++++++-------- .../configuration_files/index.dart | 15 +++++++------ .../children/homework_review/index.dart | 2 ++ .../read_over/widget/annotate_list.dart | 8 ++++++- 5 files changed, 47 insertions(+), 16 deletions(-) create mode 100644 making_school_asignment_app/lib/common/job/annotate_list_to_refresh.dart diff --git a/making_school_asignment_app/lib/common/job/annotate_list_to_refresh.dart b/making_school_asignment_app/lib/common/job/annotate_list_to_refresh.dart new file mode 100644 index 0000000..73dfb10 --- /dev/null +++ b/making_school_asignment_app/lib/common/job/annotate_list_to_refresh.dart @@ -0,0 +1,17 @@ +import 'package:json_annotation/json_annotation.dart'; + +part 'annotate_list_to_refresh.g.dart'; + + +@JsonSerializable() + class AnnotateListToRefresh extends Object { + + AnnotateListToRefresh(); + + factory AnnotateListToRefresh.fromJson(Map srcJson) => _$AnnotateListToRefreshFromJson(srcJson); + + Map toJson() => _$AnnotateListToRefreshToJson(this); + +} + + diff --git a/making_school_asignment_app/lib/page/home_page/children/homework_review/components/question_number_view.dart b/making_school_asignment_app/lib/page/home_page/children/homework_review/components/question_number_view.dart index aed266f..8bcc869 100644 --- a/making_school_asignment_app/lib/page/home_page/children/homework_review/components/question_number_view.dart +++ b/making_school_asignment_app/lib/page/home_page/children/homework_review/components/question_number_view.dart @@ -35,13 +35,10 @@ class QuestionNumberView extends GetView { var zoomFile = sateZoomData.zoomFile.value; if (zoomFile == null) return const SizedBox(); - var studentQuestions = sateData.studentQuestions.value ?? []; - return $QuestionNumberScrollView( controller: controller, sateData: sateData, sateZoomData: sateZoomData, - studentQuestions: studentQuestions, ); }), ), @@ -52,18 +49,20 @@ class QuestionNumberView extends GetView { // 试题题号视图 @hwidget Widget $questionNumberScrollView({ - required HomeworkReviewLogic controller, required ZoomState sateZoomData, required HomeworkReviewState sateData, - required List studentQuestions, + required HomeworkReviewLogic controller, }) { final scrollControllerNum = useScrollController(); // 试题题号区域 + var studentQuestions = useState>(sateData.studentQuestions.value ?? []); var useZoom = useState(sateZoomData.initScale.value ?? 1); var usePiddingTop = useState(sateZoomData.zoomFile.value?.imageHeightOffsetStart ?? 0); useValueChanged(sateZoomData.zoomFile.value?.imageHeightOffsetStart, (_, __) { usePiddingTop.value = sateZoomData.zoomFile.value?.imageHeightOffsetStart ?? 0; }); useEffect(() { + var studentQuestionsStream = sateData.studentQuestions.listen((e) => studentQuestions.value = e ?? []); + var stream = sateZoomData.initScale.listen((e) { // print("initScale : $e"); useZoom.value = e ?? 1; @@ -83,6 +82,7 @@ Widget $questionNumberScrollView({ return () { stream.cancel(); + studentQuestionsStream.cancel(); }; }, []); @@ -112,7 +112,6 @@ Widget $questionNumberScrollView({ // print("图片高度:$actualImgHeight"); - print("数据长度:${studentQuestions.length}"); print("FFFFFFFFF ${usePiddingTop.value}"); return SingleChildScrollView( @@ -125,9 +124,9 @@ Widget $questionNumberScrollView({ child: Column( mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.min, - children: studentQuestions + children: studentQuestions.value .map((e) => $ScoringQuestionsView( - studentQuestions, + sateData, e, controller, sateZoomData.zoomFile.value!.scaleRatio, @@ -141,7 +140,7 @@ Widget $questionNumberScrollView({ // 单道题得分框 @hwidget -Widget $scoringQuestionsView(BuildContext context, List? studentQuestions, StudentQuestions item, HomeworkReviewLogic logic, double scaleRatio, double initScale) { +Widget $scoringQuestionsView(BuildContext context, HomeworkReviewState sateData, StudentQuestions item, HomeworkReviewLogic logic, double scaleRatio, double initScale) { var studentScore = useState(item.studentScore); useValueChanged(item.studentScore, (_, __) { @@ -156,6 +155,10 @@ Widget $scoringQuestionsView(BuildContext context, List? stude /// 学生打分数据 studentScoreListener() { item.studentScore = studentScore.value; + var theVal = sateData.studentQuestions.value?.firstWhereOrNull((e)=>e.questionNo==e.questionNo); + if(theVal!=null) theVal.studentScore = studentScore.value; + + var studentQuestions = sateData.studentQuestions.value; if (item.studentScore == null) return; // 校验是否自动提交 对于已经批阅过的试题 不重复自动提交 diff --git a/making_school_asignment_app/lib/page/home_page/children/homework_review/configuration_files/index.dart b/making_school_asignment_app/lib/page/home_page/children/homework_review/configuration_files/index.dart index 2a0bf83..fe9756a 100644 --- a/making_school_asignment_app/lib/page/home_page/children/homework_review/configuration_files/index.dart +++ b/making_school_asignment_app/lib/page/home_page/children/homework_review/configuration_files/index.dart @@ -9,11 +9,13 @@ import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; import 'package:get/get_rx/get_rx.dart'; +import 'package:making_school_asignment_app/common/job/annotate_list_to_refresh.dart'; import 'package:making_school_asignment_app/common/job/marking_models/do_paper_details_param.dart'; import 'package:making_school_asignment_app/common/job/marking_models/do_paper_details_result.dart'; import 'package:making_school_asignment_app/common/job/marking_models/do_test_questions_image_info.dart'; import 'package:making_school_asignment_app/common/job/marking_models/favor_param.dart'; import 'package:making_school_asignment_app/common/job/marking_models/review_submission_params.dart'; +import 'package:making_school_asignment_app/common/mixins/event_bus_mixin.dart'; import 'package:making_school_asignment_app/common/mixins/request_tool_mixin.dart'; import 'package:making_school_asignment_app/common/utils/permission_describe_util.dart'; import 'package:making_school_asignment_app/common/utils/toast_utils.dart'; @@ -71,7 +73,7 @@ class HomeworkReviewBinding extends Bindings { } } -class HomeworkReviewLogic extends GetxController with RequestToolMixin { +class HomeworkReviewLogic extends GetxController with RequestToolMixin,EventBusMixin{ final zoomLogic = Get.find(); final GlobalKey pictureOverviewKey = GlobalKey(); late StreamSubscription _paramListen; @@ -150,6 +152,7 @@ class HomeworkReviewLogic extends GetxController with RequestToolMixin { @override void onClose() { SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top]); // 屏幕刘海 + eventCancel(); _dataListen.cancel(); _paramListen.cancel(); imageScaleZoomStream?.cancel(); @@ -279,8 +282,8 @@ class HomeworkReviewLogic extends GetxController with RequestToolMixin { var data = state.data.value; if (data == null) return; - if (state.data.value?.studentQuestions.isEmpty ?? true) return; - var studentQuestions = state.data.value!.studentQuestions; + if ((state.data.value?.studentQuestions.isEmpty ?? true) || (state.studentQuestions.value?.isEmpty ?? true)) return; + var studentQuestions = state.studentQuestions.value!; var noRatingElement = studentQuestions.firstWhereOrNull((e) => e.studentScore == null); if (noRatingElement != null) { ToastUtils.showInfo('${noRatingElement.questionNo}题请评分'); @@ -315,7 +318,7 @@ class HomeworkReviewLogic extends GetxController with RequestToolMixin { // 批阅完成 if (!state.lastQuestionPrompt) { await showDialog( - context: context, + context: Get.context ?? context, builder: (BuildContext context1) { return AlertDialog( title: quickText('批阅已完成'), @@ -338,8 +341,8 @@ class HomeworkReviewLogic extends GetxController with RequestToolMixin { ); }, ); - }else{ - ToastUtils.showSuccess("已经提交",duration:const Duration(milliseconds: 800)); + } else { + ToastUtils.showSuccess("已经提交", duration: const Duration(milliseconds: 800)); } return; } diff --git a/making_school_asignment_app/lib/page/home_page/children/homework_review/index.dart b/making_school_asignment_app/lib/page/home_page/children/homework_review/index.dart index b2fdb59..05a4807 100644 --- a/making_school_asignment_app/lib/page/home_page/children/homework_review/index.dart +++ b/making_school_asignment_app/lib/page/home_page/children/homework_review/index.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:making_school_asignment_app/common/job/annotate_list_to_refresh.dart'; import 'package:making_school_asignment_app/page/global_widget/ReturnToHomepage.dart'; import 'package:making_school_asignment_app/page/global_widget/my_text.dart'; import 'package:making_school_asignment_app/page/home_page/children/annotate_class/annotate_class_logic.dart'; @@ -28,6 +29,7 @@ class HomeworkReview extends StatelessWidget { if (e && sateData.needRefresh) { controller.getList(); homeLogicController.getList(); + logic.eventFire(model: AnnotateListToRefresh()); } }, child: Scaffold( diff --git a/making_school_asignment_app/lib/page/home_page/children/read_over/widget/annotate_list.dart b/making_school_asignment_app/lib/page/home_page/children/read_over/widget/annotate_list.dart index 2776691..ee7eb7f 100644 --- a/making_school_asignment_app/lib/page/home_page/children/read_over/widget/annotate_list.dart +++ b/making_school_asignment_app/lib/page/home_page/children/read_over/widget/annotate_list.dart @@ -5,7 +5,9 @@ import 'package:flutter_easyrefresh/easy_refresh.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:functional_widget_annotation/functional_widget_annotation.dart'; import 'package:get/get.dart'; +import 'package:making_school_asignment_app/common/job/annotate_list_to_refresh.dart'; import 'package:making_school_asignment_app/common/job/work_student_params.dart'; +import 'package:making_school_asignment_app/common/mixins/event_bus_mixin.dart'; import 'package:making_school_asignment_app/common/mixins/request_tool_mixin.dart'; import 'package:making_school_asignment_app/common/utils/enum_untils.dart'; import 'package:making_school_asignment_app/common/utils/utils.dart'; @@ -31,7 +33,7 @@ class AnnotateList extends StatefulWidget { } class _AnnotateListState extends State - with RequestToolMixin, SingleTickerProviderStateMixin { + with RequestToolMixin, SingleTickerProviderStateMixin,EventBusMixin{ late RxString customTimeStr = '自定义'.obs; int active = 1; late RxList unAnnotateList = RxList(); @@ -65,6 +67,9 @@ class _AnnotateListState extends State refreshController1 = EasyRefreshController(); refreshController2 = EasyRefreshController(); + eventOn(callback: (e){ + refreshController1.callRefresh(); + }); tabController2 = TabController(length: 4, vsync: this); EasyLoading.show(status: 'loading...'); getUnAnnotateList(); @@ -76,6 +81,7 @@ class _AnnotateListState extends State refreshController1.dispose(); refreshController2.dispose(); tabController2.dispose(); + eventCancel(); super.dispose(); }