import 'dart:developer' as dev; import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; import 'package:muaawana/services/home_service.dart'; import '../models/ads/Advertisement.dart'; import '../models/categories/category.dart'; import '../models/products/product_model.dart'; import '../models/services/result.dart'; import '../utils/connection.dart'; class HomeScreenProvider with ChangeNotifier { HomeService get service => GetIt.I(); bool adsLoader = false; bool serviceLoader = false; bool loader = false; bool categoryLoader = false; bool productLoader = false; bool productHomeLoader = false; List categoryList = []; List allCategoryList = []; List searchedCategoryList = []; List servicesList = []; List searchServicesList = []; List allServicesList = []; List productsList = []; List productsHomeList = []; List searchProductsList = []; List allProductsList = []; int totalServicePages = 0; int currentServicesPages = 0; Service? serviceDetail; int totalCategoryPages = 0; int currentCategoryPages = 0; Advertisement? ad; Category? _selectedCategory; bool isCategoryVisible = true; selectCategory(Category category) async { _selectedCategory = category; notifyListeners(); } setCategoryVisibility(bool isVisible) { isCategoryVisible = isVisible; notifyListeners(); } Category? get selectedCategory => _selectedCategory; bool isCategorySelected(int id) { return _selectedCategory?.id == id; } fetchAllCategorySeeAllScreen(int page, int size) async { if (await Connection.checkConnection()) { categoryLoader = true; notifyListeners(); categoryList.clear(); try { final fetchCategoryResult = await service.fetchAllCategoriesPg(page, size); if ((fetchCategoryResult.statusCode == 200 || fetchCategoryResult.statusCode == 201) && fetchCategoryResult.data != null) { log("fetchAllCategorySeeAllScreen --${fetchCategoryResult.data!}"); for (var category in fetchCategoryResult.data!.result!) { if (categoryList .indexWhere((element) => element.id == category.id) == -1) { categoryList.add(category); } } // categoryList.addAll(fetchCategoryResult.data!.result!); // selectCategory(categoryList.first); // await getServicesByCategory(categoryList.first.id!, 0, 3); // await getProductsByCategory(categoryList.first.id!, 0, 4); dev.log(categoryList.length.toString()); categoryLoader = false; notifyListeners(); } else { categoryLoader = false; notifyListeners(); } } catch (e, stackTrace) { categoryLoader = false; notifyListeners(); dev.log("-----> Login Caught Error : "); dev.log(e.toString()); dev.log("-----> Login Caught Error StackTrace : "); dev.log(stackTrace.toString()); } } else { /// No Internet Connection dev.log("-----> No Internet Connection"); categoryLoader = false; notifyListeners(); } } getAllCategoriesPg() async { if (await Connection.checkConnection()) { categoryLoader = true; notifyListeners(); categoryList = []; try { final fetchCategoryResult = await service.fetchAllCategoriesPg(0, 100); if ((fetchCategoryResult.statusCode == 200 || fetchCategoryResult.statusCode == 201) && fetchCategoryResult.data != null) { // //print(fetchProfileResult.data!.result!.length); for (var category in fetchCategoryResult.data!.result!) { if (categoryList .indexWhere((element) => element.id == category.id) == -1) { categoryList.add(category); } } // ✅ Only auto-select first category if none is selected yet if (_selectedCategory == null && categoryList.isNotEmpty) { _selectedCategory = categoryList.first; await getServicesByCategory(_selectedCategory!.id!, 0, 3); } // categoryList.addAll(fetchCategoryResult.data!.result!); // selectCategory(categoryList.first); await getServicesByCategory(categoryList.first.id!, 0, 3); // await getProductsByCategory(categoryList.first.id!, 0, 4); // dev.log(categoryList.length.toString()); categoryLoader = false; notifyListeners(); } else { categoryLoader = false; notifyListeners(); } } catch (e, stackTrace) { categoryLoader = false; notifyListeners(); dev.log("-----> Login Caught Error : "); dev.log(e.toString()); dev.log("-----> Login Caught Error StackTrace : "); dev.log(stackTrace.toString()); } } else { /// No Internet Connection dev.log("-----> No Internet Connection"); categoryLoader = false; notifyListeners(); } } searchCategory(String name) { searchedCategoryList = []; searchedCategoryList = categoryList.where((element) => element.nom!.contains(name)).toList(); notifyListeners(); } getAllCategories(BuildContext context) async { if (await Connection.checkConnection()) { categoryLoader = true; notifyListeners(); allCategoryList.clear(); try { final fetchCategoryResult = await service.fetchAllCategories(); if ((fetchCategoryResult.statusCode == 200 || fetchCategoryResult.statusCode == 201) && fetchCategoryResult.data != null) { // dev.log(fetchCategoryResult.data.toString()); categoryList.addAll(fetchCategoryResult.data!); dev.log(categoryList.length.toString()); categoryLoader = false; notifyListeners(); } else { categoryLoader = false; notifyListeners(); } } catch (e, stackTrace) { categoryLoader = false; notifyListeners(); dev.log("-----> Login Caught Error : "); dev.log(e.toString()); dev.log("-----> Login Caught Error StackTrace : "); dev.log(stackTrace.toString()); } } else { /// No Internet Connection dev.log("-----> No Internet Connection"); categoryLoader = false; notifyListeners(); } } loadMoreServices() async { allServicesList = servicesList; if (totalServicePages - 1 == currentServicesPages) { notifyListeners(); return; } else { getServicesByCategory( _selectedCategory!.id!, currentServicesPages + 1, 6); allServicesList.addAll(servicesList); notifyListeners(); } } // loadMoreCategories() async { // allCategoryList=categoryList; // if (totalCategoryPages - 1 == currentCategoryPages) { // notifyListeners(); // return; // } else { // service.fetchAllCategoriesPg( // currentServicesPages + 1, 6); // allCategoryList.addAll(categoryList); // notifyListeners(); // } // } getServicesByCategory(int categoryId, int page, int size) async { if (await Connection.checkConnection()) { servicesList = []; serviceLoader = true; notifyListeners(); try { final fetchServicesResult = await service.fetchServiceByCategory(categoryId, page, size); if ((fetchServicesResult.statusCode == 200 || fetchServicesResult.statusCode == 201) && fetchServicesResult.data != null) { log("getServicesByCategory -- ${fetchServicesResult.data}"); totalServicePages = fetchServicesResult.data!.totalPages!; currentServicesPages = fetchServicesResult.data!.currentPage!; servicesList.addAll(fetchServicesResult.data!.result!); //print(servicesList.length); serviceLoader = false; notifyListeners(); } else { serviceLoader = false; notifyListeners(); } } catch (e, stackTrace) { serviceLoader = false; notifyListeners(); dev.log("-----> Login Caught Error : "); dev.log(e.toString()); dev.log("-----> Login Caught Error StackTrace : "); dev.log(stackTrace.toString()); } } else { /// No Internet Connection dev.log("-----> No Internet Connection"); serviceLoader = false; notifyListeners(); } } // getServicesByCategoryPg() async { // if (await Connection.checkConnection()) { // loader = true; // notifyListeners(); // try { // final fetchServicesResult = await service.fetchServicesByCategoryPg(); // if ((fetchServicesResult.statusCode == 200 || // fetchServicesResult.statusCode == 201) && // fetchServicesResult.data != null) { // loader = false; // notifyListeners(); // } else { // loader = false; // notifyListeners(); // } // } catch (e, stackTrace) { // loader = false; // notifyListeners(); // dev.log("-----> Login Caught Error : "); // dev.log(e.toString()); // dev.log("-----> Login Caught Error StackTrace : "); // dev.log(stackTrace.toString()); // } // } else { // /// No Internet Connection // dev.log("-----> No Internet Connection"); // loader = false; // notifyListeners(); // } // } getProductsByCategory(int categoryId, int page, int size) async { if (await Connection.checkConnection()) { productsList = []; productLoader = true; notifyListeners(); try { final fetchProductResponse = await service.fetchProductsByCategory(categoryId, page, size); if ((fetchProductResponse.statusCode == 200 || fetchProductResponse.statusCode == 201) ) { dev.log("getProductsByCategory -- ${fetchProductResponse.data!.productList}"); productsList.addAll(fetchProductResponse.data!.productList); //print('product list length !!!!!! ${productsList.length}'); productLoader = false; notifyListeners(); } else { dev.log("22222222222"); productLoader = false; notifyListeners(); } } catch (e, stackTrace) { dev.log("333333333333"); productLoader = false; notifyListeners(); dev.log("-----> Login Caught Error : "); dev.log(e.toString()); dev.log("-----> Login Caught Error StackTrace : "); dev.log(stackTrace.toString()); } } else { dev.log("44444444444444"); /// No Internet Connection dev.log("-----> No Internet Connection"); productLoader = false; notifyListeners(); } } getProducts(int page, int size) async { if (await Connection.checkConnection()) { productsHomeList = []; productHomeLoader = true; notifyListeners(); try { final fetchProductResponse = await service.fetchProducts(page, size); dev.log("getProducts -- ${fetchProductResponse.data!.productList}"); if ((fetchProductResponse.statusCode == 200 || fetchProductResponse.statusCode == 201)) { dev.log("getProducts -- ${fetchProductResponse.data!.productList}"); productsHomeList.addAll(fetchProductResponse.data!.productList); //print('product list length !!!!!! ${productsHomeList.length}'); productHomeLoader = false; notifyListeners(); } else { dev.log("22222222222"); productHomeLoader = false; notifyListeners(); } } catch (e, stackTrace) { dev.log("333333333333"); productHomeLoader = false; notifyListeners(); dev.log("-----> Login Caught Error : "); dev.log(e.toString()); dev.log("-----> Login Caught Error StackTrace : "); dev.log(stackTrace.toString()); } } else { dev.log("44444444444444"); /// No Internet Connection dev.log("-----> No Internet Connection"); productHomeLoader = false; notifyListeners(); } } // getProductsByCategoryPg() async { // if (await Connection.checkConnection()) { // loader = true; // notifyListeners(); // try { // final fetchProfileResult = await service.fetchProductsByCategoryPg(); // if ((fetchProfileResult.statusCode == 200 || // fetchProfileResult.statusCode == 201) && // fetchProfileResult.data != null) { // loader = false; // notifyListeners(); // } else { // loader = false; // notifyListeners(); // } // } catch (e, stackTrace) { // loader = false; // notifyListeners(); // dev.log("-----> Login Caught Error : "); // dev.log(e.toString()); // dev.log("-----> Login Caught Error StackTrace : "); // dev.log(stackTrace.toString()); // } // } else { // /// No Internet Connection // dev.log("-----> No Internet Connection"); // loader = false; // notifyListeners(); // } // } /// Get Service Detail getServiceDetail(int serviceId) async { if (await Connection.checkConnection()) { loader = true; notifyListeners(); try { final fetchServiceDetailResponse = await service.getServiceDetail(serviceId); if ((fetchServiceDetailResponse.statusCode == 200 || fetchServiceDetailResponse.statusCode == 201) && fetchServiceDetailResponse.data != null) { dev.log("11111111111"); serviceDetail = fetchServiceDetailResponse.data; loader = false; notifyListeners(); } else { dev.log("22222222222"); loader = false; notifyListeners(); } } catch (e, stackTrace) { dev.log("333333333333"); loader = false; notifyListeners(); dev.log("-----> Login Caught Error : "); dev.log(e.toString()); dev.log("-----> Login Caught Error StackTrace : "); dev.log(stackTrace.toString()); } } else { dev.log("44444444444444"); /// No Internet Connection dev.log("-----> No Internet Connection"); loader = false; notifyListeners(); } } /// Search Future searchServices(String name, int page, int size) async { if (await Connection.checkConnection()) { searchServicesList = []; loader = true; notifyListeners(); try { final fetchServicesResult = await service.searchService(name, page, size); if ((fetchServicesResult.statusCode == 200 || fetchServicesResult.statusCode == 201) && fetchServicesResult.data != null) { totalServicePages = fetchServicesResult.data!.totalPages!; currentServicesPages = fetchServicesResult.data!.currentPage!; searchServicesList.addAll(fetchServicesResult.data!.result!); //print(searchServicesList.length); loader = false; notifyListeners(); } else { loader = false; notifyListeners(); } } catch (e, stackTrace) { loader = false; notifyListeners(); dev.log("-----> Login Caught Error : "); dev.log(e.toString()); dev.log("-----> Login Caught Error StackTrace : "); dev.log(stackTrace.toString()); } } else { /// No Internet Connection dev.log("-----> No Internet Connection"); loader = false; notifyListeners(); } } Future searchProducts(String name, int page, int size) async { if (await Connection.checkConnection()) { searchProductsList = []; loader = true; notifyListeners(); try { final fetchServicesResult = await service.searchProduct(name, page, size); if ((fetchServicesResult.statusCode == 200 || fetchServicesResult.statusCode == 201) && fetchServicesResult.data != null) { totalServicePages = fetchServicesResult.data!.totalPages; currentServicesPages = fetchServicesResult.data!.currentPage; searchProductsList.addAll(fetchServicesResult.data!.productList); //print(searchProductsList.length); loader = false; notifyListeners(); } else { loader = false; notifyListeners(); } } catch (e, stackTrace) { loader = false; notifyListeners(); dev.log("-----> Login Caught Error : "); dev.log(e.toString()); dev.log("-----> Login Caught Error StackTrace : "); dev.log(stackTrace.toString()); } } else { /// No Internet Connection dev.log("-----> No Internet Connection"); loader = false; notifyListeners(); } } searchHome(String name) async { loader = true; notifyListeners(); Future.wait([ searchServices(name, 0, 100), // searchProducts(name, 0, 20) ]); loader = false; notifyListeners(); } List adsList = []; fetchAds() async { if (await Connection.checkConnection()) { adsLoader = true; notifyListeners(); try { final fetchCategoryResult = await service.fetchAds(); if ((fetchCategoryResult.statusCode == 200 || fetchCategoryResult.statusCode == 201) && fetchCategoryResult.data != null) { adsList.clear(); for (var ad in fetchCategoryResult.data!) { if (!ad.archive!) { adsList.add(ad); } } // adsList = fetchCategoryResult.data!; adsLoader = false; notifyListeners(); } else { adsLoader = false; notifyListeners(); } } catch (e, stackTrace) { adsLoader = false; notifyListeners(); dev.log(e.toString()); dev.log(stackTrace.toString()); } } else { dev.log("-----> No Internet Connection"); adsLoader = false; notifyListeners(); } } }