import 'package:didvan/constants/assets.dart'; import 'package:didvan/models/enums.dart'; import 'package:didvan/models/requests/radar.dart'; import 'package:didvan/models/view/radar_category.dart'; import 'package:didvan/models/radar_overview.dart'; import 'package:didvan/providers/core_provider.dart'; import 'package:didvan/providers/user_provider.dart'; import 'package:didvan/services/network/request.dart'; import 'package:didvan/services/network/request_helper.dart'; class RadarState extends CoreProvier { String search = ''; String lastSearch = ''; String? startDate; String? endDate; int page = 1; bool isScrolled = false; bool shouldColapse = false; final List selectedCats = []; List categories = []; final List radars = []; bool get filtering => selectedCats.length > 1 || startDate != null || endDate != null; bool get searching => search.isNotEmpty; bool get isColapsed => (selectedCats.length == 1 && !filtering && isScrolled) || isScrolled; bool get isCategorySelected => selectedCats.length == 1 && !filtering; void resetFilters(bool isInit) { startDate = null; endDate = null; selectedCats.clear(); search = ''; lastSearch = ''; isScrolled = false; if (!isInit) { notifyListeners(); } } Future getRadarOverviewDatas({ required int page, }) async { if (this.page == page) { radars.clear(); } this.page = page; lastSearch = search; appState = AppState.busy; final RequestService service = RequestService( RequestHelper.radarOverviews( args: RadarRequestArgs( page: page, startDate: startDate?.split(' ').first, endDate: endDate?.split(' ').first, search: search == '' ? null : search, categories: selectedCats.map((e) => e.id).toList(), ), ), ); await service.httpGet(); if (service.isSuccess) { for (var i = 0; i < service.result['radars'].length; i++) { radars.add(RadarOverviewData.fromJson(service.result['radars'][i])); } if (searching || filtering || isColapsed || isCategorySelected) { shouldColapse = true; } appState = AppState.idle; return; } appState = AppState.failed; } Future changeMark(int id, bool value) async { radars.firstWhere((element) => element.id == id).marked = value; notifyListeners(); UserProvider.changeRadarMark(id, value); } void onCommentsChanged(int id, int count) { radars.firstWhere((radar) => radar.id == id).comments = count; notifyListeners(); } void init() { resetFilters(true); Future.delayed(Duration.zero, () { getRadarOverviewDatas(page: 1); }); categories = [ RadarCategory( id: 1, title: 'اقتصادی', asset: Assets.economicCategoryIcon, ), RadarCategory( id: 2, title: 'سیاسی', asset: Assets.politicalCategoryIcon, ), RadarCategory( id: 3, title: 'فناوری', asset: Assets.techCategoryIcon, ), RadarCategory( id: 4, title: 'کسب و کار', asset: Assets.businessCategoryIcon, ), RadarCategory( id: 5, title: 'زیست محیطی', asset: Assets.enviromentalCategoryIcon, ), RadarCategory( id: 6, title: 'اجتماعی', asset: Assets.socialCategoryIcon, ), ]; } }