You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

64 lines
2.0 KiB

// problem_upload_controller.dart
import 'package:get/get.dart';
import 'package:problem_check_system/data/models/problem_model.dart';
// import 'package:problem_check_system/services/problem_service.dart';
class ProblemUploadController extends GetxController {
// 假设从数据库或其他来源获取问题列表
final RxList<Problem> problems = <Problem>[].obs;
// 用于存储用户选中的问题
final RxList<Problem> selectedProblems = <Problem>[].obs;
@override
void onInit() {
super.onInit();
// 监听 problems 列表的变化,并在变化时更新 selectedProblems
ever(problems, (_) => _updateSelectedList());
// 监听 selectedProblems 列表,更新上传按钮状态
ever(selectedProblems, (_) => _updateUploadButtonState());
fetchProblems(); // 假设从数据源获取问题列表
}
void fetchProblems() async {
// 模拟从服务中获取问题列表
// final fetched = await ProblemService.getProblemsForUpload();
// problems.assignAll(fetched);
}
// 监听所有问题的 isChecked 状态,更新 selectedProblems 列表
void _updateSelectedList() {
selectedProblems.clear();
for (var problem in problems) {
if (problem.isChecked.value) {
selectedProblems.add(problem);
}
}
}
// 控制上传按钮是否可用
RxBool isUploadEnabled = false.obs;
void _updateUploadButtonState() {
isUploadEnabled.value = selectedProblems.isNotEmpty;
}
// 控制全选/取消全选按钮的文案
RxBool allSelected = false.obs;
void selectAll() {
final bool newState = !allSelected.value;
for (var problem in problems) {
problem.isChecked.value = newState;
}
allSelected.value = newState;
}
void uploadProblems() {
if (selectedProblems.isEmpty) return;
// 实际的上传逻辑,例如调用 API
print('开始上传 ${selectedProblems.length} 个问题...');
// 上传完成后,清空列表或更新状态
selectedProblems.clear();
}
}