import 'dart:async'; import 'package:didvan/config/theme_data.dart'; import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/models/category.dart'; import 'package:didvan/models/view/action_sheet_data.dart'; import 'package:didvan/routes/routes.dart'; import 'package:didvan/utils/action_sheet.dart'; import 'package:didvan/views/home/home_state.dart'; import 'package:didvan/views/widgets/date_picker_button.dart'; import 'package:didvan/views/widgets/didvan/checkbox.dart'; import 'package:didvan/views/widgets/item_title.dart'; import 'package:didvan/views/widgets/search_field.dart'; import 'package:didvan/views/widgets/didvan/icon_button.dart'; import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:didvan/views/widgets/logos/didvan_vertical_logo.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:provider/provider.dart'; class LogoAppBar extends StatelessWidget implements PreferredSizeWidget { LogoAppBar({Key? key}) : super(key: key); @override Size get preferredSize => const Size(double.infinity, 144); @override Widget build(BuildContext context) { final state = context.read(); final MediaQueryData d = MediaQuery.of(context); return Container( height: 144, decoration: BoxDecoration( borderRadius: const BorderRadius.only(bottomLeft: Radius.circular(20)), color: Theme.of(context).colorScheme.surface, boxShadow: [ BoxShadow( color: const Color(0XFF1B3C59).withOpacity(0.15), blurRadius: 8, spreadRadius: 0, offset: const Offset(0, 8), ) ], ), margin: EdgeInsets.only(top: d.padding.top), padding: const EdgeInsets.all(16), alignment: Alignment.centerRight, child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ const DidvanHorizontalLogo(), Row( children: [ DidvanIconButton( icon: DidvanIcons.profile_light, size: 32, onPressed: () => Navigator.of(context).pushNamed(Routes.profile), ), Container( height: 32, width: 1, color: Theme.of(context).colorScheme.border, ), Stack( children: [ DidvanIconButton( icon: state.unreadCount == 0 ? DidvanIcons.message_light : DidvanIcons.message_solid, size: 32, onPressed: () => Navigator.of(context).pushNamed(Routes.direct), ), if (state.unreadCount != 0) Positioned( top: 8, right: 4, child: Container( height: 12, width: 12, decoration: BoxDecoration( shape: BoxShape.circle, color: Theme.of(context).colorScheme.secondary, ), ), ), ], ), ], ), ], ), const SizedBox(height: 16), Consumer( builder: (context, state, child) => SearchField( title: state.currentPageIndex == 3 ? 'رصدهای من' : 'دیدوان', onChanged: (value) => _onChanged(value, context), focusNode: FocusNode(), onFilterButtonPressed: () => _showFilterBottomSheet(context), isFiltered: state.filtering && state.search == '', ), ), ], ), ); } void _onChanged(String value, BuildContext context) { final state = context.read(); if (value.length < 3 && value.isNotEmpty || state.lastSearch == value) { return; } state.timer?.cancel(); state.timer = Timer(const Duration(seconds: 1), () { state.search = value; if (state.currentPageIndex == 3) { state.searchMarks(page: 1); } else { state.searchAll(page: 1); } }); } final categoryFilters = [ CategoryData(id: 1, label: 'پویش افق'), CategoryData(id: 2, label: 'دنیای فولاد'), CategoryData(id: 3, label: 'ویدئوکست'), CategoryData(id: 4, label: 'پادکست'), CategoryData(id: 1, label: 'تحلیل‌های راداری'), CategoryData(id: 1, label: 'سها'), ]; Future _showFilterBottomSheet(BuildContext context) async { final state = context.read(); await ActionSheetUtils.showBottomSheet( data: ActionSheetData( title: 'فیلتر جستجو', smallDismissButton: true, 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.radar_regular, style: Theme.of(context).textTheme.bodyMedium, ), const SizedBox(height: 12), Wrap( children: [ for (var i = 0; i < categoryFilters.length; i++) SizedBox( width: (MediaQuery.of(context).size.width - 40) / 2, child: DidvanCheckbox( title: categoryFilters[i].label, value: state.selectedCats.contains(state.categories[i]), onChanged: (value) { if (value) { state.selectedCats.add(state.categories[i]); return; } state.selectedCats.remove(state.categories[i]); }, ), ), ], ), ], ), ), ); } // void _handleMenuOpen(BuildContext context) { // ActionSheetUtils.showBottomSheet( // data: ActionSheetData( // content: Column( // children: [ // Row( // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // SvgPicture.asset( // Assets.strategicRadarIcon, // width: 48, // height: 48, // ), // const SizedBox(width: 4), // DidvanText( // 'سامانه رادارهای استراتژیک', // style: Theme.of(context).textTheme.titleMedium, // ), // ], // ), // const SizedBox(height: 16), // _BottomSheetItem( // icon: Assets.progressRadarIcon, // title: 'رادار روند', // enabled: true, // onTap: () { // launchUrlString( // 'https://trend.didvan.app/', // mode: LaunchMode.inAppWebView, // ); // }, // ), // const SizedBox(height: 16), // _BottomSheetItem( // icon: Assets.techRadarIcon, // title: 'رادار تکنولوژی', // onTap: () {}, // ), // const SizedBox(height: 16), // _BottomSheetItem( // icon: Assets.riskRadarIcon, // title: 'رادار ریسک', // enabled: true, // onTap: () { // launchUrlString( // 'https://risk.didvan.app/', // mode: LaunchMode.inAppWebView, // ); // }, // ), // const SizedBox(height: 16), // _BottomSheetItem( // icon: Assets.startupRadarIcon, // title: 'رادار استارت‌آپ', // onTap: () {}, // ), // ], // ), // hasConfirmButton: false, // hasDismissButton: false, // ), // ); // } } class _BottomSheetItem extends StatelessWidget { final String icon; final String title; final bool enabled; final VoidCallback onTap; const _BottomSheetItem({ required this.icon, required this.title, this.enabled = false, required this.onTap, }); @override Widget build(BuildContext context) { return GestureDetector( onTap: enabled ? onTap : null, child: Container( color: Colors.transparent, child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ SvgPicture.asset( icon, theme: SvgTheme( currentColor: enabled ? Theme.of(context).colorScheme.title : Theme.of(context).colorScheme.disabledText, ), ), const SizedBox(width: 8), DidvanText( title, color: enabled ? Theme.of(context).colorScheme.title : Theme.of(context).colorScheme.disabledText, ), ], ), ), ); } }