import 'package:new_learn/features/exam/question_type.dart'; /// ============================================================ /// 【ExamQuestion】试卷题目接口模型(纯 Dart,无 Isar 依赖) /// /// 一、为什么不能直接用 Isar 的 Question 模型(web 编译约束): /// Isar 模型生成的 *.g.dart 含 64 位 schema 哈希常量, /// dart2js 无法精确表示 → web 编译直接失败(本项目已踩坑)。 /// 业务代码 import Isar 模型 = 把它拉进 web 编译图。 /// 所以试卷功能用本纯 Dart 模型(接口 JSON 解析), /// WrongQuestionStore 注释的约定:"页面永远不要 import 模型"。 /// /// 二、与 Isar Question 字段对应: /// questionId/title/answer/analysis 一一对应; /// options 直接用 `List`(接口 JSON 是数组), /// Isar 侧存 JSON 字符串只是本地存储的简化写法,语义相同。 /// ============================================================ class ExamQuestion { const ExamQuestion({ required this.questionId, required this.title, required this.options, required this.answer, required this.type, required this.analysis, }); /// 服务器题号(答案 Map 的 key,续答恢复的关联字段) final int questionId; /// 题干(HTML 富文本,RichTextContent 渲染) final String title; /// 选项(选择/判断题有值,解答题空列表) final List options; /// 正确答案(多选 "A,C" 逗号拼接,判断 "对"/"错",解答为参考答案) final String answer; /// 题型(渲染分发的依据) final QuestionType type; /// 解析(交卷后查看答案用) final String analysis; /// 接口 JSON → 模型(字段缺失兜底空值,防御脏数据) factory ExamQuestion.fromJson(Map json) { return ExamQuestion( questionId: json['questionId'] as int, title: json['title'] as String? ?? '', options: (json['options'] as List?)?.cast() ?? const [], answer: json['answer'] as String? ?? '', type: QuestionType.fromCode(json['type'] as int?), analysis: json['analysis'] as String? ?? '', ); } }