diff --git a/marking_app/lib/pages/homework_correction/widget/answer_handwriting.dart b/marking_app/lib/pages/homework_correction/widget/answer_handwriting.dart index 7c41abb..ac61356 100644 --- a/marking_app/lib/pages/homework_correction/widget/answer_handwriting.dart +++ b/marking_app/lib/pages/homework_correction/widget/answer_handwriting.dart @@ -408,15 +408,14 @@ class _HandwritingDrawBoxState extends ConsumerState with Ev toGoPlay(); } else { // 暂停 - toGoPause(); + toGoPause(_val.recalculate); } break; case PlaybackSpeedBus: // 播放速度 var _model = (e as PlaybackSpeedBus); speed = _model.speed; - toGoPause(); // 先暂停再重新播放 - dragProgressBarInitData(handwritingTime, handwritingDuration); + dragProgressBarInitData(handwritingDuration - handwritingTime, handwritingDuration); break; default: } @@ -449,12 +448,13 @@ class _HandwritingDrawBoxState extends ConsumerState with Ev } // 暂停播放 - Future toGoPause() async { + Future toGoPause(bool recalculate) async { timers.forEach((e) { if (e.isActive) e.cancel(); }); timers = []; - if (pendingData.isNotEmpty && handwritingTime > 0 && (handwritingDuration - handwritingTime > 0)) { + // 总时间-剩余时间=已经执行时间 + if (recalculate && pendingData.isNotEmpty && handwritingTime > 0 && (handwritingDuration - handwritingTime > 0)) { // 待执行的数据不等于空 每个数据都需要减去当前暂停已经执行的时间 pendingData = pendingData.map((e) { return GestureHandwritingRecording( @@ -470,7 +470,7 @@ class _HandwritingDrawBoxState extends ConsumerState with Ev /// 拖动进度条后重新初始化数据 /// @param startTime 起始时间 单位秒 Future dragProgressBarInitData(int startTime, int totalDuration) async { - eventFire(model: JobHandwritingPlaybarBus(false)); + eventFire(model: JobHandwritingPlaybarBus(false, false)); timers.forEach((e) { if (e.isActive) e.cancel(); }); @@ -489,7 +489,7 @@ class _HandwritingDrawBoxState extends ConsumerState with Ev for (var i = 0; i < _packagedHandwritingDataAll.length; i++) { var item = _packagedHandwritingDataAll[i]; - if (item.intervalTime < startTime) { + if (item.intervalTime <= startTime) { // 需要直接装配到直接打印的容器 executeImmediately.add(item); } else { @@ -515,29 +515,30 @@ class _HandwritingDrawBoxState extends ConsumerState with Ev List trajectorys = ref.read(jobHandwritingDrawingTrajectoryProvider)..add(e); ref.read(jobHandwritingDrawingTrajectoryProvider.notifier).setVal(List.from(trajectorys)); pendingData.remove(e); // 执行后删除容器中的当前动作 + print('正在执行播放.............'); } } /// 开始播放 Future toGoPlay() async { - handwritingTime = 0; - var executableData = _packagedHandwritingDataAll; - if (pendingData.isNotEmpty) { - // 待执行的数据没有执行完成 就继续执行待执行数据 - executableData = pendingData; - } else { - pendingData.addAll(_packagedHandwritingDataAll); - ref.read(jobHandwritingDrawingTrajectoryProvider.notifier).setVal([]); - } - - executableData.forEach((e) { - if (e.intervalTime == 0) { - zhixinCall(e); + try { + handwritingTime = 0; + var executableData = _packagedHandwritingDataAll; + if (pendingData.isNotEmpty) { + // 待执行的数据没有执行完成 就继续执行待执行数据 + executableData = pendingData; } else { + pendingData.addAll(_packagedHandwritingDataAll); + ref.read(jobHandwritingDrawingTrajectoryProvider.notifier).setVal([]); + } + + executableData.forEach((e) { var ter = Timer(Duration(milliseconds: e.intervalTime ~/ speed), () => zhixinCall(e)); timers.add(ter); - } - }); + }); + } catch (e) { + print('播放报错:$e'); + } } // 计算尺寸 @@ -761,7 +762,7 @@ Widget $bottomPlaybar(BuildContext context, int timeConsuming, int pauseCount, L width: unitScale * (item.apart ?? 0), height: 8.h, decoration: BoxDecoration( - color: Colors.white, + color: Color.fromRGBO(202, 201, 201, 1), borderRadius: isFirst ? BorderRadius.only(topLeft: Radius.circular(8.r), bottomLeft: Radius.circular(10.r)) : (isLast ? BorderRadius.only(topRight: Radius.circular(8.r), bottomRight: Radius.circular(10.r)) : null), @@ -780,7 +781,7 @@ Widget $bottomPlaybar(BuildContext context, int timeConsuming, int pauseCount, L width: containerWidth, decoration: BoxDecoration( // color: Color.fromRGBO(146, 146, 146, 1), - color: Color.fromRGBO(202, 201, 201, 1), + color: Colors.white, borderRadius: BorderRadius.circular(50.r), ), ), @@ -920,7 +921,8 @@ class UseBottomPlaybar with EventBusMixin { // 播放按钮 class JobHandwritingPlaybarBus { bool play; - JobHandwritingPlaybarBus(this.play); + bool recalculate; + JobHandwritingPlaybarBus(this.play, [this.recalculate = true]); } // 笔迹是否已经准备好(笔迹计算好坐标后通知通知栏可以开始播放)