import 'package:cached_network_image/cached_network_image.dart'; import 'package:carousel_slider/carousel_controller.dart'; import 'package:grostore/apis/banners_api.dart'; import 'package:grostore/apis/category_api.dart'; import 'package:grostore/apis/product_api.dart'; import 'package:grostore/app_lang.dart'; import 'package:grostore/custom_ui/Button.dart'; import 'package:grostore/custom_ui/Image_view.dart'; import 'package:grostore/custom_ui/toast_ui.dart'; import 'package:grostore/helpers/device_info_helper.dart'; import 'package:grostore/models/common/category_info.dart'; import 'package:grostore/models/home_banner_response.dart'; import 'package:grostore/models/product_mini_response.dart'; import 'package:grostore/models/category_response.dart'; import 'package:provider/provider.dart'; import 'package:flutter/material.dart'; class HomePresenter extends ChangeNotifier { static BuildContext? context; setContext(BuildContext context) { HomePresenter.context = context; } int currentSlider = 0; List homeBannerImages = []; List topCategoryList = []; List bestSellingProductList = []; List products = []; int page = 1; bool isTopCategoryInitial = false; bool isHomeBannerInitial = false; bool isBestSellingProductInitial = false; bool isAllProductInitial = false; ScrollController homeScrollController = ScrollController(); fetchAll() { getProducts(); fetchBannerImages(); fetchTopCategories(); fetBestSellingProducts(); } Widget bannerImageSimple(BannerData data) { return Container( margin: EdgeInsets.symmetric(horizontal: 5), child: Button( minWidth: getWidth(context), onPressed: () {}, child: ImageView( url: data.image, width: getWidth(context), height: 200, fit: BoxFit.cover, ), ), ); } getProducts() async { var productResponse = await ProductApi.getAllProducts(page: page); if (productResponse.statusCode == 200) { if (productResponse.object.data.isEmpty && page > 1) { ToastUi.simpleToast( context!, AppLang.local(context!).no_more_data); return; } page++; print(productResponse.object.data.length); isAllProductInitial = true; products.addAll(productResponse.object.data); notifyListeners(); } else { ToastUi.simpleToast(context!, AppLang.local(context!).something_went_wrong); } } onChangeBannerIndex(index) { currentSlider = index; notifyListeners(); } fetchBannerImages() async { homeBannerImages = []; var bannerOneResponse = await BannersApi.homeBanner(context!); if (bannerOneResponse.statusCode == 200) { bannerOneResponse.object.data.forEach((slider) { homeBannerImages.add(bannerImageSimple(slider)); }); isHomeBannerInitial = true; notifyListeners(); } } fetchTopCategories() async { var categoryResponse = await CategoryApi.topCategory(); if (categoryResponse.statusCode == 200) { topCategoryList.addAll(categoryResponse.object.data); isTopCategoryInitial = true; notifyListeners(); } } fetBestSellingProducts() async { var productResponse = await ProductApi.bestSelling(context!); if (productResponse.statusCode == 200) { bestSellingProductList.addAll(productResponse.object.data); isBestSellingProductInitial = true; notifyListeners(); } else { ToastUi.show(context!, AppLang.local(context!).something_went_wrong); } } reset() { page=1; currentSlider = 0; homeBannerImages = []; topCategoryList = []; bestSellingProductList = []; products.clear(); isAllProductInitial = false; isTopCategoryInitial = false; isHomeBannerInitial = false; isBestSellingProductInitial = false; } Future onRefresh() async { reset(); fetchAll(); } changeCurrentSlider(index) { currentSlider = index; notifyListeners(); } mainScrollListener(BuildContext context) { homeScrollController.addListener(() { //print("position: " + xcrollController.position.pixels.toString()); //print("max: " + xcrollController.position.maxScrollExtent.toString()); if (homeScrollController.position.pixels == homeScrollController.position.maxScrollExtent) { ToastUi.simpleToast(context, "Loading more..."); getProducts(); } }); } initState(BuildContext context) { mainScrollListener(context); reset(); fetchAll(); } @override void dispose() { super.dispose(); reset(); } }