import 'package:flutter/material.dart'; import 'package:initial_folder/models/catagories_model.dart'; import 'package:initial_folder/models/subcategories_model.dart'; import 'package:initial_folder/services/categories_service.dart'; enum ResultState { Loading, NoData, HasData, Error } class CategoriesProvider with ChangeNotifier { final CategoriesService categoriesService; CategoriesProvider({required this.categoriesService}) { getAllCategories(); } List _categories = []; Map> _subCategoriesMap = {}; ResultState? _state; String _message = ''; List get ids { return _categories.map((category) => category.id).toList(); } List get nameCategories { return _categories.map((category) => category.nameCategory).toList(); } List get result => _categories; ResultState? get state => _state; String get message => _message; String _selectedSubcategoryId = ''; set categories(List categories) { _categories = categories; notifyListeners(); } Map> get subCategoriesMap => _subCategoriesMap; String get selectedSubcategoryId => _selectedSubcategoryId; set selectedSubcategoryId(String value) { _selectedSubcategoryId = value; notifyListeners(); } Future getAllCategories() async { try { _state = ResultState.Loading; notifyListeners(); List categories = await categoriesService.getAllCategories(); if (categories.isEmpty) { _state = ResultState.NoData; notifyListeners(); return _message = 'Empty Data'; } else { for (var category in categories) { List subCategories = await categoriesService.getSubCategories(category.id!); category.subCategories = subCategories; } _categories = categories; _state = ResultState.HasData; notifyListeners(); } } catch (e) { _state = ResultState.Error; notifyListeners(); return _message = 'Error --> $e'; } } }