fix: 修正学习流程中的证据、复习与进度问题
- 独立尝试按课程要求校验内容,不再任意输入即算独立成功 - 复习节点改为学后第 1/3/7/14 天,之后每 30 天抽查;复习轮换情境 - 掌握状态按作答记录推导:需认识、可回忆、跨情境使用及最近两次无帮助 - 课程证据按实际用到的目标记录;跟读与课程对话只算辅助练习 - 复习成功不再降低已有状态 - 学完课程后进入下一节未完成课程;全部学完后引导巩固与阶段评估 - 新增 3 题基础定位,按结果设置起始课程 - 新增按课程开放的对话场景,首页推荐最少练习的场景 - 切换课程时清空上一课的步骤进度 - AI 返回 JSON 格式并按 JSON 回放历史;拼写校验忽略大小写与连字符;移除学习目标选择 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -9,6 +9,7 @@ import 'models.dart';
|
||||
import 'a0_core.dart';
|
||||
import 'generated_content.dart';
|
||||
import 'local_store.dart';
|
||||
import 'review_feedback.dart';
|
||||
import 'seed_courses.dart';
|
||||
import 'ai_config.dart';
|
||||
import 'ai_service.dart';
|
||||
@@ -32,6 +33,10 @@ abstract class _AppStateData extends ChangeNotifier {
|
||||
bool keepRecordings = false;
|
||||
int completedLessons = 0;
|
||||
String activeLessonId = 'a0-01';
|
||||
|
||||
/// Lesson recommended by the placement check; it and earlier lessons are
|
||||
/// open without finishing the lesson before them.
|
||||
String placementStartLessonId = 'a0-01';
|
||||
final Set<String> completedLessonIds = {};
|
||||
final Set<String> completedSegmentIds = {};
|
||||
final Set<String> reportedAiVariantKeys = {};
|
||||
@@ -212,6 +217,16 @@ class AppState extends _AppStateData
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
/// Applies the placement result. Only A0 starting points exist until A1
|
||||
/// content is frozen, and placement never counts as passing a lesson.
|
||||
void setPlacementStartLesson(String lessonId) {
|
||||
if (!a0SeedLessons.any((lesson) => lesson.id == lessonId)) return;
|
||||
placementStartLessonId = lessonId;
|
||||
activeLessonId = lessonId;
|
||||
_resetLessonFlow();
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setAiProvider(AiProviderType value) {
|
||||
aiProvider = value;
|
||||
notifyListeners();
|
||||
@@ -236,6 +251,7 @@ class AppState extends _AppStateData
|
||||
void clearProgress() {
|
||||
completedLessons = 0;
|
||||
activeLessonId = 'a0-01';
|
||||
placementStartLessonId = 'a0-01';
|
||||
completedLessonIds.clear();
|
||||
completedSegmentIds.clear();
|
||||
reportedAiVariantKeys.clear();
|
||||
|
||||
Reference in New Issue
Block a user