MIF_E31222846/lib/views/siswa/quiz/controllers/quiz_controller.dart

99 lines
2.7 KiB
Dart

import 'dart:convert';
import 'dart:developer';
import 'package:get/get.dart';
import 'package:http/http.dart' as http;
import 'package:shared_preferences/shared_preferences.dart';
import 'package:ui/constans/api_constans.dart';
import 'package:ui/models/quiz_mode.dart';
class QuizController extends GetxController {
var isLoading = false.obs;
QuizModel? quizM;
var isEmptyData = true.obs;
@override
void onInit() {
super.onInit();
// Reset data when controller is initialized
resetData();
// Delay to ensure arguments are available
Future.delayed(const Duration(milliseconds: 100), () {
getQuiz();
});
}
void resetData() {
quizM = null;
isEmptyData.value = true;
isLoading.value = false;
}
Future<void> getQuiz() async {
final prefs = await SharedPreferences.getInstance();
final token = prefs.getString('token');
log("Get.arguments: ${Get.arguments.toString()}");
// Check if arguments are available
if (Get.arguments == null || !Get.arguments.containsKey('matpel_id')) {
log("Arguments not available or missing 'matpel_id'");
isEmptyData.value = true;
return;
}
if (token == null) {
throw Exception("Token not found");
}
final headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer $token',
};
try {
isLoading(true);
final url =
"${ApiConstants.quizEnpoint}?matapelajaran_id=${Get.arguments['matpel_id'].toString()}";
log("Requesting URL: $url");
final response = await http.get(
Uri.parse(url),
headers: headers,
);
log("Response status: ${response.statusCode}");
log("Response body: ${response.body}");
if (response.statusCode == 200) {
final json = jsonDecode(response.body);
log("Parsed JSON: $json");
try {
quizM = QuizModel.fromJson(json);
log("Quiz model created successfully");
log("Quiz data length: ${quizM?.data.length ?? 0}");
if (quizM!.data.isEmpty) {
isEmptyData(true);
log("Quiz data is empty");
} else {
isEmptyData(false);
log("Quiz data has ${quizM!.data.length} items");
}
} catch (parseError) {
log("Error parsing QuizModel: $parseError");
// Fallback: try to create model without waktu field
isEmptyData(true);
}
} else {
log("Terjadi kesalahan get data: ${response.statusCode}");
log("Error response: ${response.body}");
isEmptyData(true);
}
} catch (e) {
log("Error get quiz: $e");
isEmptyData(true);
} finally {
isLoading(false);
}
}
}