import 'dart:async'; import 'package:didvan/constants/assets.dart'; import 'package:didvan/models/category.dart'; import 'package:didvan/models/enums.dart'; import 'package:didvan/models/overview_data.dart'; import 'package:didvan/providers/core.dart'; import 'package:didvan/routes/routes.dart'; import 'package:didvan/services/network/request.dart'; import 'package:didvan/services/network/request_helper.dart'; import 'package:flutter/material.dart'; class MenuItemType { final String label; final String asset; final String link; MenuItemType({ required this.label, required this.asset, required this.link, }); } class HomeState extends CoreProvier { int _currentPageIndex = 0; String search = ''; String lastSearch = ''; bool _showSearchPage = false; Timer? timer; String? startDate; String? endDate; int page = 1; int lastPage = 1; final List selectedCats = []; final List results = []; late TabController tabController; int unreadCount = 0; void resetFilters(bool isInit) { startDate = null; endDate = null; selectedCats.clear(); search = ''; lastSearch = ''; if (!isInit) { searchAll(page: 1); } } set showSearchPage(bool value) { _showSearchPage = value; notifyListeners(); } bool get showSearchPage => _showSearchPage; set currentPageIndex(int value) { _currentPageIndex = value; notifyListeners(); } int get currentPageIndex => _currentPageIndex; List menuItems = []; List categories = []; bool get filtering => selectedCats.isNotEmpty || startDate != null || endDate != null || search.isNotEmpty; Future searchMarks({required int page}) async { this.page = page; if (page == 1) { results.clear(); appState = AppState.busy; } lastSearch = search; final service = RequestService( RequestHelper.searchAll( page: page, search: search, endDate: endDate, types: selectedCats.map((e) => e.id).toList(), startDate: startDate, ), ); await service.httpGet(); if (service.isSuccess) { lastPage = service.result['lastPage']; results.addAll( List.from( service.result['contents'].map( (e) => OverviewData.fromJson(e), ), ), ); lastPage = service.result['lastPage']; appState = AppState.idle; return; } appState = AppState.failed; } Future searchAll({required int page}) async { this.page = page; if (page == 1) { results.clear(); appState = AppState.busy; } lastSearch = search; final service = RequestService( RequestHelper.searchAll( page: page, search: search, endDate: endDate, types: selectedCats.map((e) => e.id).toList(), startDate: startDate, ), ); await service.httpGet(); if (service.isSuccess) { lastPage = service.result['lastPage']; unreadCount = service.result['unread']; results.addAll( List.from( service.result['contents'].map( (e) => OverviewData.fromJson(e), ), ), ); lastPage = service.result['lastPage']; appState = AppState.idle; return; } appState = AppState.failed; } void refresh() { menuItems.clear(); categories.clear(); menuItems.addAll([ MenuItemType( label: 'دنیای فولاد', asset: Assets.fooladWorld, link: Routes.news, ), MenuItemType( label: 'پویش افق', asset: Assets.ofogh, link: Routes.radars, ), MenuItemType( label: 'آمار و داده', asset: Assets.stats, link: 'tab-0', ), MenuItemType( label: 'سها', asset: Assets.saha, link: 'https://didvan.app', ), MenuItemType( label: 'رادار استارتاپ', asset: Assets.startup, link: 'https://startup.didvan.app/', ), MenuItemType( label: 'رادار روند', asset: Assets.trend, link: 'https://trend.didvan.app/', ), MenuItemType( label: 'رادار تکنولوژی', asset: Assets.tech, link: 'https://tech.didvan.app/', ), MenuItemType( label: 'رادار ریسک', asset: Assets.risk, link: 'https://risk.didvan.app/', ), MenuItemType( label: 'ویدئوکست', asset: Assets.videocast, link: Routes.videocasts, ), MenuItemType( label: 'پادکست', asset: Assets.podcast, link: Routes.podcasts, ), ]); categories.addAll([ CategoryData( id: 1, label: 'اقتصادی', asset: Assets.economicCategoryIcon, ), CategoryData( id: 2, label: 'سیاسی', asset: Assets.politicalCategoryIcon, ), CategoryData( id: 3, label: 'فناوری', asset: Assets.techCategoryIcon, ), CategoryData( id: 4, label: 'کسب و کار', asset: Assets.businessCategoryIcon, ), CategoryData( id: 5, label: 'زیست محیطی', asset: Assets.enviromentalCategoryIcon, ), CategoryData( id: 6, label: 'اجتماعی', asset: Assets.socialCategoryIcon, ), CategoryData( id: 1, label: 'اقتصادی', asset: Assets.economicCategoryIcon, ), CategoryData( id: 2, label: 'سیاسی', asset: Assets.politicalCategoryIcon, ), CategoryData( id: 3, label: 'فناوری', asset: Assets.techCategoryIcon, ), CategoryData( id: 4, label: 'کسب و کار', asset: Assets.businessCategoryIcon, ), ]); Future.delayed(Duration.zero, notifyListeners); } }