更新
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
/// ============================================================
|
||||
/// 【课堂习题 · 收藏 / 错题本】(1:1 迁移 Vue exerciseCollect.js)
|
||||
///
|
||||
/// type=1 收藏;type=2 错题(仅 view 模式可用)。
|
||||
/// ============================================================
|
||||
library;
|
||||
|
||||
import 'package:new_learn/core/api/conquerPackage/classExercises/api.dart';
|
||||
import 'package:new_learn/features/conquerPackage/classExercises/controllers/exercise_session.dart';
|
||||
import 'package:new_learn/features/conquerPackage/classExercises/models/question_model.dart';
|
||||
|
||||
class ExerciseCollectHandlers {
|
||||
ExerciseCollectHandlers({
|
||||
required this.session,
|
||||
required this.bridge,
|
||||
});
|
||||
|
||||
final ExerciseSession session;
|
||||
final ExerciseUiBridge bridge;
|
||||
final ClassExercisesApi _api = ClassExercisesApi.instance;
|
||||
|
||||
dynamic _field(dynamic resp, String key) {
|
||||
if (resp is Map) {
|
||||
if (resp[key] != null) return resp[key];
|
||||
final data = resp['data'];
|
||||
if (data is Map && data[key] != null) return data[key];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// type:1=收藏,2=错题本
|
||||
Future<void> onClickAddUserCollect(int type) async {
|
||||
// 错题仅查看模式可用
|
||||
if (type == 2 && !session.isView) return;
|
||||
|
||||
final info = session.currentQuestion;
|
||||
if (info == null) return;
|
||||
|
||||
final selected = type == 1 ? info.isCollect : info.isWrongCollect;
|
||||
try {
|
||||
if (selected) {
|
||||
final id = type == 1 ? info.collectId : info.wrongCollectId;
|
||||
await _api.cancleCollect(<String, dynamic>{
|
||||
'type': type,
|
||||
'id': id ?? 0,
|
||||
});
|
||||
_syncCollectState(type, true, null, info);
|
||||
bridge.toast(type == 1 ? '取消收藏成功' : '取消错题成功');
|
||||
} else {
|
||||
final packId =
|
||||
session.totalPackId.isNotEmpty ? session.totalPackId : session.packId;
|
||||
final res = await _api.addUserCollect(<String, dynamic>{
|
||||
'type': type,
|
||||
'packId': packId,
|
||||
'questionId': info.questionId,
|
||||
'recordQuestionId': info.id,
|
||||
});
|
||||
final resId = _field(res, 'id');
|
||||
_syncCollectState(type, false, resId, info);
|
||||
bridge.toast(type == 1 ? '收藏成功' : '错题添加成功');
|
||||
}
|
||||
bridge.notifyListeners();
|
||||
} catch (_) {
|
||||
bridge.toast(type == 1 ? '收藏失败' : '失败');
|
||||
}
|
||||
}
|
||||
|
||||
/// 同步收藏态(对标 syncCollectState)
|
||||
void _syncCollectState(
|
||||
int type,
|
||||
bool wasSelected,
|
||||
dynamic resId,
|
||||
QuestionModel info,
|
||||
) {
|
||||
if (type == 2) {
|
||||
info.isWrongCollect = !wasSelected;
|
||||
info.wrongCollectId = wasSelected ? 0 : resId;
|
||||
} else {
|
||||
info.isCollect = !wasSelected;
|
||||
info.collectId = wasSelected ? 0 : resId;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user