feat: 优化口语防重复问答、课程推进流转、键盘输入流畅度与竖屏锁定
- AI口语约束:在对话系统提示词与单轮指导中增加防重复问答约束,避免重复寒暄及索取已提供信息,根据历史自然向前推进 - 课程流转:修复多段课程学完后今日任务卡片流转下一课,及退出重进定位逻辑 - 竖屏锁定:在 Flutter、Android 及 iOS 平台配置仅支持竖屏显示 - 对话交互:优化对话界面文本输入重绘与词汇查询,解决键盘输入卡顿 - 测试用例:补充并更新单轮约束、状态流转与返回键退出测试,212项测试全绿
This commit is contained in:
@@ -49,7 +49,15 @@ class TodayTaskCard extends StatelessWidget {
|
||||
}
|
||||
|
||||
_TodayTask _todayTask() {
|
||||
final lesson = lessonById(state.activeLessonId);
|
||||
var lessonId = state.activeLessonId;
|
||||
if (state.completedLessonIds.contains(lessonId)) {
|
||||
final next = state.nextIncompleteLessonId;
|
||||
if (next != null) {
|
||||
lessonId = next;
|
||||
}
|
||||
}
|
||||
final lesson = lessonById(lessonId);
|
||||
|
||||
if (state.hasResumableLessonDialogue) {
|
||||
return _TodayTask(
|
||||
label: '未完成',
|
||||
@@ -75,17 +83,39 @@ class TodayTaskCard extends StatelessWidget {
|
||||
}
|
||||
// A0 课程学完、尚未通过阶段评估时,先巩固再评估;通过后回到下一课。
|
||||
if (state.a0LessonsComplete && !state.a0Passed) return _stageTask();
|
||||
|
||||
if (state.allLessonsComplete) {
|
||||
return _TodayTask(
|
||||
label: '已学完',
|
||||
title: '所有课程已完成',
|
||||
note: '你已学完全部课程内容!建议保持日常到期复习或自由情境对话。',
|
||||
action: '去复习',
|
||||
minutes: '10 分钟',
|
||||
onPressed: onStartReview,
|
||||
);
|
||||
}
|
||||
|
||||
final segments = lesson.segments.length;
|
||||
final segment = state.activeSegmentIndexFor(lesson.id) + 1;
|
||||
final segmentIndex = state.activeSegmentIndexFor(lesson.id);
|
||||
final segment = segmentIndex + 1;
|
||||
final isSegmentResuming = segments > 1 && segmentIndex > 0;
|
||||
|
||||
return _TodayTask(
|
||||
label: '今日新课',
|
||||
label: isSegmentResuming ? '继续课程' : '今日新课',
|
||||
title:
|
||||
'第 ${lesson.number} 课 · ${lesson.title}'
|
||||
'${segments > 1 ? ' · 第 $segment/$segments 段' : ''}',
|
||||
note: '预热词汇 → 听说读写 → 对话 → 独立尝试',
|
||||
action: '开始今天的学习',
|
||||
note: isSegmentResuming
|
||||
? '第 $segmentIndex 段已学完;继续本课下一段情境训练。'
|
||||
: '预热词汇 → 听说读写 → 对话 → 独立尝试',
|
||||
action: isSegmentResuming ? '继续学习第 $segment 段' : '开始今天的学习',
|
||||
minutes: '12 分钟',
|
||||
onPressed: onStartLesson,
|
||||
onPressed: () {
|
||||
if (state.activeLessonId != lesson.id) {
|
||||
state.openLesson(lesson.id);
|
||||
}
|
||||
onStartLesson();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user