no message

This commit is contained in:
1147192855@qq.com 2024-05-10 19:26:59 +08:00
parent adc07a9346
commit ad660bec11
3 changed files with 73 additions and 34 deletions

View File

@ -96,9 +96,9 @@ class MarkingTextQuestion extends Object {
@JsonKey(name: 'papersUrlStr')
List<String>? papersUrlStr;
//
@JsonKey(name: 'commentImageUrlTodo')
List<String>? commentImageUrlTodo;
// //
// @JsonKey(name: 'commentImageUrlTodo')
// List<String>? commentImageUrlTodo;
// Map
@JsonKey(name: 'commentImageUrlMap')
@ -115,8 +115,8 @@ class MarkingTextQuestion extends Object {
@JsonKey(name: 'historicalScorings')
List<HistoricalScoring>? historicalScorings;
MarkingTextQuestion(this.id, this.totalScore, this.isFinish, this.subQuestionDetailList, this.isException,
this.questionNum, this.score, this.studentAnswerList,
MarkingTextQuestion(
this.id, this.totalScore, this.isFinish, this.subQuestionDetailList, this.isException, this.questionNum, this.score, this.studentAnswerList,
// this.questionIndex,
{required this.commentImageUrl,
required this.lastOne,
@ -130,7 +130,7 @@ class MarkingTextQuestion extends Object {
// this.totalCount = 0,
// this.currentIndex = 0,
this.papersUrl = const [],
this.commentImageUrlTodo,
// this.commentImageUrlTodo,
this.commentImageUrlMap = const {}}) {
score = isFinish ? score : null;
completeRating = isFinish && score != null;
@ -140,14 +140,20 @@ class MarkingTextQuestion extends Object {
commentImageUrlMap = Map();
if (commentImageUrl.isNotEmpty) {
for (var element in commentImageUrl) {
commentImageUrlMap[element] = '$element?${DateTime.now().millisecondsSinceEpoch}';
// for (var element in commentImageUrl) {
// commentImageUrlMap[element] = '$element?${DateTime.now().millisecondsSinceEpoch}';
// }
for (var i = 0; i < commentImageUrl.length; i++) {
var element = commentImageUrl[i];
var originalImage = studentAnswerList[i];
commentImageUrlMap[originalImage] = '$element?${DateTime.now().millisecondsSinceEpoch}';
}
} else {
for (var element in studentAnswerList) {
commentImageUrlMap[element] = element;
}
}
// if (historicalScore != null) {
// this.historicalScorings = (jsonDecode(historicalScore!) as List<dynamic>).map((e) {
// return HistoricalScoring.fromJson(e as Map<String, dynamic>);
@ -165,10 +171,6 @@ class MarkingTextQuestion extends Object {
factory MarkingTextQuestion.fromJson(Map<String, dynamic> srcJson) => _$MarkingTextQuestionFromJson(srcJson);
List<String> getImageData() {
if (commentImageUrlTodo != null && commentImageUrlTodo!.isNotEmpty) {
return commentImageUrlTodo!;
}
if (commentImageUrl.isNotEmpty) {
return commentImageUrl;
}
@ -178,10 +180,8 @@ class MarkingTextQuestion extends Object {
bool setImageList(String resImage, int imageIndex) {
try {
commentImageUrlTodo ??= getImageData().map((e) => e).toList();
String oldImage = studentAnswerList[imageIndex];
commentImageUrlMap[oldImage] = '$resImage?${DateTime.now().millisecondsSinceEpoch}';
commentImageUrlTodo![imageIndex] = resImage;
return true;
} catch (e) {
return false;
@ -220,11 +220,7 @@ class SubQuestions extends Object {
bool completeRating;
SubQuestions(
{required this.subQuestionScore,
required this.subQuestionNum,
this.subQuestionGotScore,
required this.isFinish,
this.completeRating = false}) {
{required this.subQuestionScore, required this.subQuestionNum, this.subQuestionGotScore, required this.isFinish, this.completeRating = false}) {
subQuestionGotScore = isFinish ? subQuestionGotScore : null;
completeRating = isFinish && subQuestionGotScore != null;
}

View File

@ -30,6 +30,7 @@ import 'package:marking_app/common/model/job/upload_file_interface_config_params
import 'package:marking_app/common/model/marking/annotation_graffiti_switch.dart';
import 'package:marking_app/common/model/marking/do_marking_keyboard_model.dart';
import 'package:marking_app/common/model/marking/marking_history_zoom_info.dart';
import 'package:marking_app/common/model/marking/marking_text_question.dart';
import 'package:marking_app/common/model/marking/switch_keyboard_to_reload_images.dart';
import 'package:marking_app/pages/common/event_bus_mixin.dart';
import 'package:marking_app/pages/homework_correction/hooks/use_cached_img_refresh.dart';
@ -69,6 +70,7 @@ class PictureOverview extends StatefulHookConsumerWidget {
final bool annotationsFlag;
final String testQuestionNumber;
final Map<String, String> commentImageMap;
final MarkingTextQuestion data;
const PictureOverview({
required this.imageItems,
@ -77,6 +79,7 @@ class PictureOverview extends StatefulHookConsumerWidget {
required this.testQuestionNumber,
required this.questionNum,
required this.markingUserId,
required this.data,
this.homework = false,
this.imageScale = 1,
this.imagePosition,
@ -87,7 +90,7 @@ class PictureOverview extends StatefulHookConsumerWidget {
PictureOverviewState createState() => PictureOverviewState();
}
class PictureOverviewState extends ConsumerState<PictureOverview> with CommonMixin {
class PictureOverviewState extends ConsumerState<PictureOverview> with CommonMixin, EventBusMixin {
final GlobalKey theglobalKey = GlobalKey();
final GlobalKey<_ExamPaperDrawingState> examPaperDrawingKey = GlobalKey<_ExamPaperDrawingState>();
final GlobalKey zoomGlobalKey = GlobalKey(); // zoom
@ -132,11 +135,39 @@ class PictureOverviewState extends ConsumerState<PictureOverview> with CommonMix
graffitiSwitch = state;
toUpState(setState, () {}, mounted);
});
// 线
eventOn(callback: (BottomAnnotationSwitchCleanallOfMarking item) async {
if (ref.read(drawMarkingProvider).data.isEmpty) {
if (widget.data.commentImageUrl.isNotEmpty) {
bool? res = await showDialog<bool>(
//
barrierDismissible: false,
context: context,
builder: (context1) {
return AlertDialog(content: quickText("是否撤销上次批注痕迹"), actions: <Widget>[
TextButton(child: quickText("取消"), onPressed: () => Navigator.pop(context1, false)),
TextButton(child: quickText("确定", color: Theme.of(context).primaryColor), onPressed: () => Navigator.pop(context1, true))
]);
},
);
if (res == true) {
widget.data.commentImageUrl.removeAt(currentIndex);
var theUrl = widget.imageItems[currentIndex];
widget.commentImageMap[theUrl] = theUrl;
toUpState(setState, () {}, mounted);
}
} else {
ToastUtils.showInfo('批注已清空');
}
}
});
}
@override
void dispose() {
_annotationsListener();
eventCancel();
try {
_imageStream?.removeListener(_imageStreamListener!);
if (temFile != null) {
@ -156,9 +187,12 @@ class PictureOverviewState extends ConsumerState<PictureOverview> with CommonMix
//
RenderRepaintBoundary? boundary = theglobalKey.currentContext!.findRenderObject() as RenderRepaintBoundary?;
if (boundary == null) return null;
double dpr = MediaQuery.of(context).devicePixelRatio;
// double dpr = ui.window.devicePixelRatio;
ui.Image image = await boundary.toImage(pixelRatio: dpr);
// double dpr = MediaQuery.of(context).devicePixelRatio;
double pixelRatio = MediaQuery.of(context).devicePixelRatio;
if (imagInfoModel?.pixelRatio != null) pixelRatio = imagInfoModel!.pixelRatio;
ui.Image image = await boundary.toImage(pixelRatio: pixelRatio);
ByteData? byteData = await image.toByteData(format: ui.ImageByteFormat.png);
if (byteData == null) {
/// null
@ -172,8 +206,11 @@ class PictureOverviewState extends ConsumerState<PictureOverview> with CommonMix
temFile = file;
}
crypto.Digest fileMd5 = crypto.md5.convert(await temFile!.readAsBytes());
if (imagInfoModel != null) {
//
}
crypto.Digest fileMd5 = crypto.md5.convert(await temFile!.readAsBytes());
RestClient _client = await getClient();
BaseStructureResult<UploadFileInterfaceConfig> resUploadConfig = await _client.getUploadFile(UploadFileInterfaceConfigParams(
fileName: '1.png',
@ -459,7 +496,6 @@ class _ExamPaperDrawingState extends ConsumerState<ExamPaperDrawing> with EventB
eventOn(callback: (BottomAnnotationSwitchCleanallOfMarking item) {
if (item.previousStep) {
if (ref.read(drawMarkingProvider).data.isEmpty) {
ToastUtils.showInfo('批注已清空');
return;
}
var index = pointsPureData.toList().lastIndexOf(null);
@ -508,7 +544,7 @@ class _ExamPaperDrawingState extends ConsumerState<ExamPaperDrawing> with EventB
isComplex: true,
willChange: true,
foregroundPainter: DrawingPainter(ctrl: _vnHandWritings),
child: RepaintBoundary(child: widget.child),
child: widget.child,
),
);
}

View File

@ -28,6 +28,7 @@ import 'package:marking_app/common/model/common/base_structure_result.dart';
import 'package:marking_app/common/model/common/upload_img_secret_key.dart';
import 'package:marking_app/common/model/enum/KeyboardType.dart';
import 'package:marking_app/common/model/enum/marking_list_type.dart';
import 'package:marking_app/common/model/enum/review_marks_bottom_btns_enum.dart';
import 'package:marking_app/common/model/marking/current_review_task.dart';
import 'package:marking_app/common/model/marking/do_marking_keyboard_model.dart';
import 'package:marking_app/common/model/marking/keyboard_assist_event.dart';
@ -52,6 +53,8 @@ import 'package:marking_app/components/marking/review_records_view.dart';
import 'package:marking_app/components/marking/selectable_keyboard_bottom.dart';
import 'package:marking_app/pages/common/event_bus_mixin.dart';
import 'package:marking_app/pages/marking/hooks/use_zoomImage_history_utils.dart';
import 'package:marking_app/pages/marking/provider/do_paper_bottom_review_marks_provider.dart';
import 'package:marking_app/pages/marking/provider/draw_marking_provider.dart';
import 'package:marking_app/pages/marking/provider/rating_progress_provider.dart';
import 'package:marking_app/provider/annotation_graffiti_switch_provider.dart';
import 'package:marking_app/provider/do_marking_provider.dart';
@ -158,6 +161,10 @@ class _MarkingPapersState extends ConsumerState<DoPapers>
fToast.init(context);
Future.delayed(const Duration(seconds: 0)).then((onValue) {
ref.read(annotationGraffitiSwitchProvider.notifier).init();
//
ref.read(drawMarkingProvider.notifier).setState(DrawMarkingVal([], []));
//
ref.read(doPaperBottomReviewMarksProvider.notifier).setState(ReviewMarksBottomBtnsEnum.DRAG);
});
//
@ -460,15 +467,10 @@ class _MarkingPapersState extends ConsumerState<DoPapers>
RestClient client = await getClient();
String? commentImageUrlStr;
List<String>? commentImageUrl = currentQuestion?.commentImageUrlTodo;
if (commentImageUrl?.isEmpty ?? true) commentImageUrl = currentQuestion?.commentImageUrl;
List<String>? commentImageUrl =
(currentQuestion?.commentImageUrl.isNotEmpty ?? false) || res?.url != null ? currentQuestion?.commentImageUrlMap.values.toList() : null;
if (commentImageUrl?.isNotEmpty ?? false) commentImageUrlStr = jsonEncode(commentImageUrl);
// bool excessContinue =
// _currentTab?.agreementExcess == null ? true : _currentTab!.agreementExcess!; // true
bool isExit = false;
MarkingTextQuestionTab? nextTag;
BaseStructureResult<bool> result = await client.submitTestQuestionsOfExam(SubmitExamParams(
widget.markingUserId,
detailId,
@ -1124,6 +1126,10 @@ class _MarkingPapersState extends ConsumerState<DoPapers>
setTimeOut(300, () => ToastUtils.showError('请求错诶,请重试'));
throw Error();
}
//
ref.read(doPaperBottomReviewMarksProvider.notifier).setState(ReviewMarksBottomBtnsEnum.DRAG);
//
ref.read(drawMarkingProvider.notifier).setState(DrawMarkingVal([], []));
currentQuestion = result.data;
if (temTab != null) {
result.data!.scoreInterval = temTab.scoreInterval ?? 1;
@ -1919,6 +1925,7 @@ class _MarkingPapersState extends ConsumerState<DoPapers>
// margin: EdgeInsets.only(top: 6.h),
padding: EdgeInsets.symmetric(horizontal: 1.w),
child: PictureOverview(
data: data,
questionNum: data.questionNum,
markingUserId: widget.markingUserId,
key: pictureOverviewKey,
@ -1927,7 +1934,7 @@ class _MarkingPapersState extends ConsumerState<DoPapers>
annotationsFlag: annotationSwitch,
commentImageMap: data.commentImageUrlMap,
testQuestionNumber: widget.markingUserId.toString() + '-' + data.questionNum,
imageItems: data.getImageData(),
imageItems: data.studentAnswerList,
),
),