fix: 修正学习流程中的证据、复习与进度问题
- 独立尝试按课程要求校验内容,不再任意输入即算独立成功 - 复习节点改为学后第 1/3/7/14 天,之后每 30 天抽查;复习轮换情境 - 掌握状态按作答记录推导:需认识、可回忆、跨情境使用及最近两次无帮助 - 课程证据按实际用到的目标记录;跟读与课程对话只算辅助练习 - 复习成功不再降低已有状态 - 学完课程后进入下一节未完成课程;全部学完后引导巩固与阶段评估 - 新增 3 题基础定位,按结果设置起始课程 - 新增按课程开放的对话场景,首页推荐最少练习的场景 - 切换课程时清空上一课的步骤进度 - AI 返回 JSON 格式并按 JSON 回放历史;拼写校验忽略大小写与连字符;移除学习目标选择 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -38,6 +38,10 @@ class _LessonFlowState extends State<LessonFlow> {
|
||||
final writingController = TextEditingController();
|
||||
final independentController = TextEditingController();
|
||||
int selectedAnswer = -1;
|
||||
|
||||
/// Set once a wrong meaning is picked, so only a first-try choice counts as
|
||||
/// recognition evidence.
|
||||
bool listeningMissed = false;
|
||||
int previewIndex = 0;
|
||||
bool listeningAudioPlayed = false;
|
||||
bool showWritingHelp = true;
|
||||
@@ -108,7 +112,12 @@ class _LessonFlowState extends State<LessonFlow> {
|
||||
correctAnswer: activity.answers.first,
|
||||
selectedAnswer: selectedAnswer,
|
||||
audioPlayed: listeningAudioPlayed,
|
||||
onSelected: (value) => setState(() => selectedAnswer = value),
|
||||
onSelected: (value) => setState(() {
|
||||
selectedAnswer = value;
|
||||
if (listeningOptions[value] != activity.answers.first) {
|
||||
listeningMissed = true;
|
||||
}
|
||||
}),
|
||||
onPlayed: () => setState(() => listeningAudioPlayed = true),
|
||||
onLookup: () => showLexiconLookup(
|
||||
context,
|
||||
@@ -118,7 +127,8 @@ class _LessonFlowState extends State<LessonFlow> {
|
||||
onContinue:
|
||||
selectedAnswer >= 0 &&
|
||||
listeningOptions[selectedAnswer] == activity.answers.first
|
||||
? widget.state.completeListening
|
||||
? () =>
|
||||
widget.state.completeListening(recognized: !listeningMissed)
|
||||
: null,
|
||||
);
|
||||
case LessonStep.speaking:
|
||||
@@ -126,7 +136,7 @@ class _LessonFlowState extends State<LessonFlow> {
|
||||
state: widget.state,
|
||||
text: activity.speaking,
|
||||
keepRecording: widget.state.keepRecordings,
|
||||
onContinue: () => widget.state.completeSpeaking(assisted: true),
|
||||
onContinue: widget.state.completeSpeaking,
|
||||
);
|
||||
case LessonStep.reading:
|
||||
content = _ReadingStep(
|
||||
|
||||
Reference in New Issue
Block a user