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
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(); |
|
} |
|
}
|
|
|