import 'dart:async'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:dikantin/app/data/providers/menu_provider.dart'; import '../../../data/models/search_model.dart'; class bm25fController extends GetxController { final menuProvider = MenuProvider().obs; final searchResults = [].obs; final isLoading = false.obs; final TextEditingController searchController = TextEditingController(); Timer? debounce; // Deklarasi Timer debounce @override void onInit() { super.onInit(); refreshData(); } void setLoading(bool value) { isLoading.value = value; } Future refreshData() async { await search(''); } Future search(String keyword) async { debounce?.cancel(); // Pastikan debounce dibatalkan sebelum membuat yang baru debounce = Timer(Duration(milliseconds: 1500), () async { try { setLoading(true); final results = await menuProvider.value.bm25fSearch(keyword); searchResults.assignAll(results.data ?? []); } catch (e) { print('Error during search: $e'); searchResults.clear(); } finally { setLoading(false); } }); } @override void onClose() { debounce?.cancel(); // Pastikan debounce dibatalkan saat controller dihancurkan searchController.dispose(); super.onClose(); } }