Untitled
unknown
plain_text
a month ago
2.1 kB
5
Indexable
Future<bool> startQuiz(String quizType) async {
isLoading.value = true;
// Load quizzes jika belum tersedia
if (quizzes.isEmpty) {
debugPrint('Quizzes not loaded yet, loading now…');
await loadQuizzes();
}
// Ambil quiz berdasarkan category
final quiz = getQuizByCategory(category);
if (quiz == null) {
debugPrint('Quiz not found for category: $category');
debugPrint(
'Available quizzes: '
'${quizzes.map((q) => q.category).join(", ")}',
);
throw Exception('Kuis $category tidak ditemukan');
}
// Cek apakah quiz sudah pernah diselesaikan
final completed = await isQuizCompleted(quiz.idQuiz);
if (completed) {
final quizCategory =
CooldownHelper.parseCategory(quiz.category);
final nextLabel =
CooldownHelper.getNextAvailableLabel(quizCategory) ??
'Coba lagi nanti';
Get.snackbar(
CooldownHelper.getLimitSnackbarTitle(quizCategory),
nextLabel,
snackPosition: SnackPosition.BOTTOM,
backgroundColor: Colors.orange,
colorText: Colors.white,
duration: const Duration(seconds: 4),
);
return false;
}
debugPrint(
'Loading quiz with questions for ID: ${quiz.idQuiz}',
);
// Ambil token autentikasi
final token = await _authController.getToken();
// Fetch detail quiz beserta pertanyaan
final fullQuiz = await Quiz.fetchQuizById(
quiz.idQuiz,
token: token,
);
currentQuiz.value = fullQuiz;
final questions = fullQuiz.questions ?? [];
// Validasi apakah quiz memiliki pertanyaan
if (questions.isEmpty) {
throw Exception('Tidak ada pertanyaan untuk kuis ini');
}
// Urutkan pertanyaan berdasarkan order
questions.sort(
(a, b) => a.order.compareTo(b.order),
);
debugPrint('Loaded ${questions.length} questions');
// Inisialisasi state quiz
currentQuestions.value = questions;
currentQuestionIndex.value = 0;
userAnswers.value = List.filled(
questions.length,
null,
);
totalScore.value = 0;
return true;
}Editor is loading...
Leave a Comment