import 'dart:async'; import 'package:didvan/config/theme_data.dart'; import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/models/view/action_sheet_data.dart'; import 'package:didvan/providers/theme.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/home/main/main_page_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/logos/didvan_vertical_logo.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class LogoAppBar extends StatelessWidget implements PreferredSizeWidget { final bool canSearch; const LogoAppBar({Key? key, this.canSearch = true}) : 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: canSearch ? 144 : 100, decoration: BoxDecoration( borderRadius: const BorderRadius.only(bottomLeft: Radius.circular(20)), color: Theme.of(context).colorScheme.surface, boxShadow: state.filtering ? null : [ BoxShadow( color: const Color(0XFF1B3C59).withValues(alpha: 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: [ DidvanHorizontalLogo( key: ValueKey(context.watch().themeMode), ), Row( children: [ Consumer( builder: (_, state, __) => Stack( children: [ DidvanIconButton( icon: DidvanIcons.profile_light, size: 32, onPressed: () => Navigator.of(context) .pushNamed(Routes.profile) .then( (value) => state.init(), ), ), if (state.unread > 0) Positioned( bottom: 15, right: 12, child: Container( height: 10, width: 10, decoration: BoxDecoration( shape: BoxShape.circle, color: Theme.of(context).colorScheme.secondary, ), ), ), ], ), ), Container( height: 32, width: 1, color: Theme.of(context).colorScheme.border, ), DidvanIconButton( icon: DidvanIcons.antenna_light, size: 32, onPressed: () => Navigator.of(context).pushNamed(Routes.bookmarks), ), ], ), ], ), const SizedBox(height: 16), if (canSearch) Consumer( builder: (context, state, child) => SearchField( key: state.search.isEmpty ? ValueKey(state.search) : null, value: state.search, title: 'دیدوان', onChanged: (value) => _onChanged(value, context), focusNode: state.searchFieldFocusNode, onFilterButtonPressed: () => _showFilterBottomSheet(context), isFiltered: state.filtering, onGoBack: state.filtering ? () { state.resetFilters(false); FocusScope.of(context).unfocus(); } : null, ), ), ], ), ); } void _onChanged(String value, BuildContext context) { final state = context.read(); if (value.length >= 2) { state.onSearchChanged(value); } else if (value.isEmpty) { state.clearSearch(); } } Future _showFilterBottomSheet(BuildContext context) async { final state = context.read(); await ActionSheetUtils(context).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.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]); }, ), ), ], ), ], ), ), ); } // 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, // ), // ], // ), // ), // ); // } // }