import 'package:didvan/config/theme_data.dart'; import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/constants/assets.dart'; import 'package:didvan/main.dart'; import 'package:didvan/models/home_page_content/home_page_list.dart'; import 'package:didvan/models/home_page_content/swot.dart'; import 'package:didvan/routes/routes.dart'; import 'package:didvan/services/app_initalizer.dart'; import 'package:didvan/views/home/main/main_page_state.dart'; import 'package:didvan/views/home/main/widgets/banner.dart'; import 'package:didvan/views/home/main/widgets/general_item.dart'; import 'package:didvan/views/home/main/widgets/main_content.dart'; import 'package:didvan/views/home/main/widgets/podcast_item.dart'; import 'package:didvan/views/home/main/widgets/story_section.dart'; import 'package:didvan/views/widgets/didvan/slider.dart'; import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:didvan/views/widgets/state_handlers/state_handler.dart'; import 'package:didvan/views/widgets/search_field.dart'; import 'package:didvan/views/home/home_state.dart'; import 'package:didvan/utils/action_sheet.dart'; import 'package:didvan/models/view/action_sheet_data.dart'; import 'package:didvan/views/widgets/didvan/checkbox.dart'; import 'package:didvan/views/widgets/text_divider.dart'; import 'package:didvan/views/widgets/item_title.dart'; import 'package:didvan/views/widgets/date_picker_button.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; import 'package:didvan/services/network/request.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:didvan/views/home/main/widgets/swot_item_card.dart'; import 'package:flutter/foundation.dart' show kIsWeb, defaultTargetPlatform; // این پکیج فقط برای نسخه وب استفاده می‌شود import 'package:universal_html/html.dart' as html; bool isAnyMobile() { if (kIsWeb) { final userAgent = html.window.navigator.userAgent.toLowerCase(); return userAgent.contains('mobile') || userAgent.contains('android') || userAgent.contains('ios'); } return defaultTargetPlatform == TargetPlatform.android || defaultTargetPlatform == TargetPlatform.iOS; } class MainPage extends StatefulWidget { const MainPage({ super.key, }); @override State createState() => _MainPageState(); } class _MainPageState extends State { @override void initState() { super.initState(); print("DEBUG: _MainPageState initstate called"); WidgetsBinding.instance.addPostFrameCallback((_) { print("DEBUG: addPostFrameCallback called"); context.read().init(); }); super.initState(); } @override Widget build(BuildContext context) { print("DEBUG: _MainPageState build called"); return StateHandler( onRetry: () => {print("DEBUG: _MainPageState onRetry called"), context.read().init}, state: context.watch(), builder: (context, state) { print("DEBUG: FutureBuilder waiting"); print("DEBUG: FutureBuilder state.stories.isNotEmpty: ${state.stories.isNotEmpty}"); return ListView( padding: const EdgeInsets.only(top: 0, bottom: 16), children: [ Padding( padding: const EdgeInsets.fromLTRB(16, 0, 16, 16), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ SvgPicture.asset( Assets.horizontalLogoWithText, height: 60, color: Theme.of(context).colorScheme.title, ), GestureDetector( onTap: () { Navigator.pushNamed(context, Routes.profile); }, child: SizedBox( width: 44, height: 44, child: Center( child: SvgPicture.asset( 'lib/assets/icons/New_Profile.svg', width: 30, height: 30, color: Theme.of(context).colorScheme.title, ), ), ), ), ], ), ), Padding( padding: const EdgeInsets.fromLTRB(16, 0, 16, 16), child: SearchField( title: 'دیدوان', focusNode: context.read().searchFieldFocusNode, onChanged: (value) { final homeState = context.read(); homeState.search = value; if (value.length >= 3) { homeState.searchAll(page: 1); } }, onFilterButtonPressed: () => _showFilterBottomSheet(context), isFiltered: context.watch().filtering, value: context.watch().search, extraIconPath: 'lib/assets/icons/profile.svg', onExtraIconPressed: () { print('Extra icon pressed!'); }, ), ), if (state.stories.isNotEmpty) ...[ const TextDivider(text: 'دیده‌بان'), const _DidvanSignalsTitle(), Padding( padding: const EdgeInsets.symmetric(horizontal: 8), child: StorySection(stories: state.stories), ), ], const SizedBox(height: 12), const TextDivider(text: 'پیشخوان استراتژیک'), const Padding( padding: EdgeInsets.symmetric(horizontal: 16), child: MainPageMainContent(), ), ], ); }, ); } Future _showFilterBottomSheet(BuildContext context) async { final state = Provider.of(context, listen: false); ActionSheetUtils(context).showBottomSheet( data: ActionSheetData( titleIcon: DidvanIcons.filter_regular, dismissTitle: 'حذف فیلتر', confrimTitle: 'نمایش نتایج', onDismissed: () => state.resetFilters(false), onConfirmed: () => state.searchAll(page: 1), content: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ if (state.currentPageIndex != 3) ...[ ItemTitle( title: 'تاریخ ایجاد', style: Theme.of(context).textTheme.bodyMedium, icon: DidvanIcons.calendar_range_regular, ), const SizedBox(height: 8), StatefulBuilder( builder: (context, setState) => Row( children: [ DatePickerButton( initialValue: state.startDate, emptyText: 'از تاریخ', onPicked: (date) => setState(() => state.startDate = date), lastDate: state.endDate, ), const SizedBox(width: 8), DatePickerButton( initialValue: state.endDate, emptyText: 'تا تاریخ', onPicked: (date) => setState(() => state.endDate = date), firstDate: state.startDate, ), ], ), ), const SizedBox(height: 28), ], ItemTitle( title: 'دسته بندی', icon: DidvanIcons.category_regular, style: Theme.of(context).textTheme.bodyMedium, ), const SizedBox(height: 12), Wrap( children: [ for (var i = 0; i < state.categoryFilters.length; i++) if (state.categoryFilters[i].label != 'هوشان') SizedBox( width: (MediaQuery.of(context).size.width - 40) / 2, child: DidvanCheckbox( title: state.categoryFilters[i].label, value: state.selectedCats .contains(state.categoryFilters[i]), onChanged: (value) { if (value) { state.selectedCats.add(state.categoryFilters[i]); return; } state.selectedCats.remove(state.categoryFilters[i]); }, ), ), ], ), ], ), ), ); } } class _DidvanSignalsTitle extends StatelessWidget { const _DidvanSignalsTitle(); @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.only( left: 16, right: 16, bottom: 16, top: 0, ), child: Row( children: [ SvgPicture.asset( 'lib/assets/icons/voice-square.svg', color: Theme.of(context).colorScheme.title, width: 30, height: 30, ), const SizedBox(width: 5), DidvanText( "سیگنال‌های دیدوان", style: Theme.of(context).textTheme.titleMedium, color: Theme.of(context).colorScheme.title, fontSize: 13, ), ], ), ); } }