import 'package:flutter/material.dart'; import 'package:initial_folder/models/course_model.dart'; import 'package:initial_folder/services/course_by_category_service.dart'; enum ResultState { Loading, NoData, HasData, Error } class CourseByCategoryProvider with ChangeNotifier { final CourseByCategoryService courseByCategoryService; final String id; final String subId; final bool fetchBySubcategory; CourseByCategoryProvider({ required this.courseByCategoryService, required this.id, required this.subId, this.fetchBySubcategory = false, }) { if (fetchBySubcategory) { getCourseByCategory(id, subId); } else { getCourseOnlyCategory(id); } } List _courseByCategory = []; ResultState? _state; String _message = ''; List get result => _courseByCategory; ResultState? get state => _state; String get message => _message; set courseByCategory(List courseByCategory) { _courseByCategory = courseByCategory; notifyListeners(); } Future getCourseByCategory(_id, subId) async { try { _state = ResultState.Loading; notifyListeners(); List courseByCategory = await courseByCategoryService.getCourseCategoryAndSub(_id, subId); if (courseByCategory.isEmpty) { _state = ResultState.NoData; notifyListeners(); return _message = 'Empty Data'; } else { _state = ResultState.HasData; print(_courseByCategory); notifyListeners(); return _courseByCategory = courseByCategory; } } catch (e) { _state = ResultState.Error; notifyListeners(); return _message = 'Error --> $e'; } } Future getCourseOnlyCategory(_id) async { try { _state = ResultState.Loading; notifyListeners(); List courseByCategory = await courseByCategoryService.getCourseOnlyCategory(_id); if (courseByCategory.isEmpty) { _state = ResultState.NoData; notifyListeners(); return _message = 'Empty Data'; } else { _state = ResultState.HasData; notifyListeners(); return _courseByCategory = courseByCategory; } } catch (e) { _state = ResultState.Error; notifyListeners(); return _message = 'Error --> $e'; } } }