mcy_new #1

Merged
wangyang merged 179 commits from mcy_new into master 2025-08-28 10:10:45 +08:00
5 changed files with 47 additions and 16 deletions
Showing only changes of commit 33996285f4 - Show all commits

View File

@ -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<String, dynamic> srcJson) => _$AnnotateListToRefreshFromJson(srcJson);
Map<String, dynamic> toJson() => _$AnnotateListToRefreshToJson(this);
}

View File

@ -35,13 +35,10 @@ class QuestionNumberView extends GetView<HomeworkReviewLogic> {
var zoomFile = sateZoomData.zoomFile.value; var zoomFile = sateZoomData.zoomFile.value;
if (zoomFile == null) return const SizedBox(); if (zoomFile == null) return const SizedBox();
var studentQuestions = sateData.studentQuestions.value ?? [];
return $QuestionNumberScrollView( return $QuestionNumberScrollView(
controller: controller, controller: controller,
sateData: sateData, sateData: sateData,
sateZoomData: sateZoomData, sateZoomData: sateZoomData,
studentQuestions: studentQuestions,
); );
}), }),
), ),
@ -52,18 +49,20 @@ class QuestionNumberView extends GetView<HomeworkReviewLogic> {
// //
@hwidget @hwidget
Widget $questionNumberScrollView({ Widget $questionNumberScrollView({
required HomeworkReviewLogic controller,
required ZoomState sateZoomData, required ZoomState sateZoomData,
required HomeworkReviewState sateData, required HomeworkReviewState sateData,
required List<StudentQuestions> studentQuestions, required HomeworkReviewLogic controller,
}) { }) {
final scrollControllerNum = useScrollController(); // final scrollControllerNum = useScrollController(); //
var studentQuestions = useState<List<StudentQuestions>>(sateData.studentQuestions.value ?? []);
var useZoom = useState<double>(sateZoomData.initScale.value ?? 1); var useZoom = useState<double>(sateZoomData.initScale.value ?? 1);
var usePiddingTop = useState<double>(sateZoomData.zoomFile.value?.imageHeightOffsetStart ?? 0); var usePiddingTop = useState<double>(sateZoomData.zoomFile.value?.imageHeightOffsetStart ?? 0);
useValueChanged<double?, void>(sateZoomData.zoomFile.value?.imageHeightOffsetStart, (_, __) { useValueChanged<double?, void>(sateZoomData.zoomFile.value?.imageHeightOffsetStart, (_, __) {
usePiddingTop.value = sateZoomData.zoomFile.value?.imageHeightOffsetStart ?? 0; usePiddingTop.value = sateZoomData.zoomFile.value?.imageHeightOffsetStart ?? 0;
}); });
useEffect(() { useEffect(() {
var studentQuestionsStream = sateData.studentQuestions.listen((e) => studentQuestions.value = e ?? []);
var stream = sateZoomData.initScale.listen((e) { var stream = sateZoomData.initScale.listen((e) {
// print("initScale : $e"); // print("initScale : $e");
useZoom.value = e ?? 1; useZoom.value = e ?? 1;
@ -83,6 +82,7 @@ Widget $questionNumberScrollView({
return () { return () {
stream.cancel(); stream.cancel();
studentQuestionsStream.cancel();
}; };
}, []); }, []);
@ -112,7 +112,6 @@ Widget $questionNumberScrollView({
// print("图片高度:$actualImgHeight"); // print("图片高度:$actualImgHeight");
print("数据长度:${studentQuestions.length}");
print("FFFFFFFFF ${usePiddingTop.value}"); print("FFFFFFFFF ${usePiddingTop.value}");
return SingleChildScrollView( return SingleChildScrollView(
@ -125,9 +124,9 @@ Widget $questionNumberScrollView({
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: studentQuestions children: studentQuestions.value
.map((e) => $ScoringQuestionsView( .map((e) => $ScoringQuestionsView(
studentQuestions, sateData,
e, e,
controller, controller,
sateZoomData.zoomFile.value!.scaleRatio, sateZoomData.zoomFile.value!.scaleRatio,
@ -141,7 +140,7 @@ Widget $questionNumberScrollView({
// //
@hwidget @hwidget
Widget $scoringQuestionsView(BuildContext context, List<StudentQuestions>? 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<int?>(item.studentScore); var studentScore = useState<int?>(item.studentScore);
useValueChanged<int?, void>(item.studentScore, (_, __) { useValueChanged<int?, void>(item.studentScore, (_, __) {
@ -156,6 +155,10 @@ Widget $scoringQuestionsView(BuildContext context, List<StudentQuestions>? stude
/// ///
studentScoreListener() { studentScoreListener() {
item.studentScore = studentScore.value; 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; if (item.studentScore == null) return;
// //

View File

@ -9,11 +9,13 @@ import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:get/get_rx/get_rx.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_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_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/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/favor_param.dart';
import 'package:making_school_asignment_app/common/job/marking_models/review_submission_params.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/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/permission_describe_util.dart';
import 'package:making_school_asignment_app/common/utils/toast_utils.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<AnnotateListToRefresh>{
final zoomLogic = Get.find<ZoomLogic>(); final zoomLogic = Get.find<ZoomLogic>();
final GlobalKey pictureOverviewKey = GlobalKey(); final GlobalKey pictureOverviewKey = GlobalKey();
late StreamSubscription<DoPaperDetailsParam> _paramListen; late StreamSubscription<DoPaperDetailsParam> _paramListen;
@ -150,6 +152,7 @@ class HomeworkReviewLogic extends GetxController with RequestToolMixin {
@override @override
void onClose() { void onClose() {
SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top]); // SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top]); //
eventCancel();
_dataListen.cancel(); _dataListen.cancel();
_paramListen.cancel(); _paramListen.cancel();
imageScaleZoomStream?.cancel(); imageScaleZoomStream?.cancel();
@ -279,8 +282,8 @@ class HomeworkReviewLogic extends GetxController with RequestToolMixin {
var data = state.data.value; var data = state.data.value;
if (data == null) return; if (data == null) return;
if (state.data.value?.studentQuestions.isEmpty ?? true) return; if ((state.data.value?.studentQuestions.isEmpty ?? true) || (state.studentQuestions.value?.isEmpty ?? true)) return;
var studentQuestions = state.data.value!.studentQuestions; var studentQuestions = state.studentQuestions.value!;
var noRatingElement = studentQuestions.firstWhereOrNull((e) => e.studentScore == null); var noRatingElement = studentQuestions.firstWhereOrNull((e) => e.studentScore == null);
if (noRatingElement != null) { if (noRatingElement != null) {
ToastUtils.showInfo('${noRatingElement.questionNo}题请评分'); ToastUtils.showInfo('${noRatingElement.questionNo}题请评分');
@ -315,7 +318,7 @@ class HomeworkReviewLogic extends GetxController with RequestToolMixin {
// //
if (!state.lastQuestionPrompt) { if (!state.lastQuestionPrompt) {
await showDialog( await showDialog(
context: context, context: Get.context ?? context,
builder: (BuildContext context1) { builder: (BuildContext context1) {
return AlertDialog( return AlertDialog(
title: quickText('批阅已完成'), title: quickText('批阅已完成'),
@ -338,8 +341,8 @@ class HomeworkReviewLogic extends GetxController with RequestToolMixin {
); );
}, },
); );
}else{ } else {
ToastUtils.showSuccess("已经提交",duration:const Duration(milliseconds: 800)); ToastUtils.showSuccess("已经提交", duration: const Duration(milliseconds: 800));
} }
return; return;
} }

View File

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.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/ReturnToHomepage.dart';
import 'package:making_school_asignment_app/page/global_widget/my_text.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'; 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) { if (e && sateData.needRefresh) {
controller.getList(); controller.getList();
homeLogicController.getList(); homeLogicController.getList();
logic.eventFire(model: AnnotateListToRefresh());
} }
}, },
child: Scaffold( child: Scaffold(

View File

@ -5,7 +5,9 @@ import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:functional_widget_annotation/functional_widget_annotation.dart'; import 'package:functional_widget_annotation/functional_widget_annotation.dart';
import 'package:get/get.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/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/mixins/request_tool_mixin.dart';
import 'package:making_school_asignment_app/common/utils/enum_untils.dart'; import 'package:making_school_asignment_app/common/utils/enum_untils.dart';
import 'package:making_school_asignment_app/common/utils/utils.dart'; import 'package:making_school_asignment_app/common/utils/utils.dart';
@ -31,7 +33,7 @@ class AnnotateList extends StatefulWidget {
} }
class _AnnotateListState extends State<AnnotateList> class _AnnotateListState extends State<AnnotateList>
with RequestToolMixin, SingleTickerProviderStateMixin { with RequestToolMixin, SingleTickerProviderStateMixin,EventBusMixin<AnnotateListToRefresh>{
late RxString customTimeStr = '自定义'.obs; late RxString customTimeStr = '自定义'.obs;
int active = 1; int active = 1;
late RxList<Items> unAnnotateList = RxList(); late RxList<Items> unAnnotateList = RxList();
@ -65,6 +67,9 @@ class _AnnotateListState extends State<AnnotateList>
refreshController1 = EasyRefreshController(); refreshController1 = EasyRefreshController();
refreshController2 = EasyRefreshController(); refreshController2 = EasyRefreshController();
eventOn<AnnotateListToRefresh>(callback: (e){
refreshController1.callRefresh();
});
tabController2 = TabController(length: 4, vsync: this); tabController2 = TabController(length: 4, vsync: this);
EasyLoading.show(status: 'loading...'); EasyLoading.show(status: 'loading...');
getUnAnnotateList(); getUnAnnotateList();
@ -76,6 +81,7 @@ class _AnnotateListState extends State<AnnotateList>
refreshController1.dispose(); refreshController1.dispose();
refreshController2.dispose(); refreshController2.dispose();
tabController2.dispose(); tabController2.dispose();
eventCancel();
super.dispose(); super.dispose();
} }