import 'package:didvan/config/design_config.dart'; import 'package:didvan/config/theme_data.dart'; import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/models/news_details_data.dart'; import 'package:didvan/models/radar_details_data.dart'; import 'package:didvan/models/view/action_sheet_data.dart'; import 'package:didvan/pages/home/profile/widgets/menu_item.dart'; import 'package:didvan/routes/routes.dart'; import 'package:didvan/utils/action_sheet.dart'; import 'package:didvan/widgets/bookmark_button.dart'; import 'package:didvan/widgets/didvan/divider.dart'; import 'package:didvan/widgets/didvan/icon_button.dart'; import 'package:didvan/widgets/didvan/text.dart'; import 'package:flutter/material.dart'; class FloatingNavigationBar extends StatefulWidget { final RadarDetailsData? radar; final NewsDetailsData? news; final ScrollController scrollController; final VoidCallback onMark; final VoidCallback onUnmark; const FloatingNavigationBar({ Key? key, this.radar, this.news, required this.scrollController, required this.onMark, required this.onUnmark, }) : super(key: key); @override State createState() => _FloatingNavigationBarState(); } class _FloatingNavigationBarState extends State { bool get _isRadar => widget.radar != null; bool _isScrolled = false; get _item => widget.radar ?? widget.news; @override void initState() { widget.scrollController.addListener(() { final position = widget.scrollController.position.pixels; if (position > 300 && !_isScrolled) { setState(() { _isScrolled = true; }); } else if (position < 300 && _isScrolled) { setState(() { _isScrolled = false; }); } }); super.initState(); } @override Widget build(BuildContext context) { final Color foregroundColor = DesignConfig.isDark ? Theme.of(context).colorScheme.focusedBorder : Theme.of(context).colorScheme.focused; return Container( margin: const EdgeInsets.only(left: 32, right: 32, bottom: 20), padding: const EdgeInsets.symmetric(horizontal: 12), width: double.infinity, height: 48, decoration: BoxDecoration( color: Theme.of(context).colorScheme.navigation, borderRadius: BorderRadius.circular(24), border: Border.all( color: Theme.of(context).colorScheme.cardBorder, ), ), child: Theme( data: Theme.of(context).copyWith( iconTheme: IconThemeData( color: foregroundColor, ), ), child: Row( children: [ DidvanIconButton( onPressed: () { if (_isScrolled) { widget.scrollController.animateTo( 0, duration: DesignConfig.lowAnimationDuration, curve: Curves.easeIn, ); return; } Navigator.of(context).pop(); }, icon: _isScrolled ? DidvanIcons.arrow_up_regular : DidvanIcons.back_regular, ), const Spacer(), if (_isRadar) BookmarkButton( value: _item.marked, onMark: widget.onMark, onUnmark: widget.onUnmark, ), // if (_isRadar) // IconButton( // onPressed: () {}, // icon: const Icon( // DidvanIcons.evaluation_regular, // ), // ), SizedBox( width: 48, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ if (_item.comments != 0) DidvanText( _item.comments.toString(), color: foregroundColor, ), const SizedBox(width: 4), DidvanIconButton( gestureSize: 32, onPressed: () => Navigator.of(context).pushNamed( Routes.comments, arguments: {'id': _item.id, 'isRadar': _isRadar}, ), icon: DidvanIcons.chats_regular, ), ], ), ), if (!_isRadar) const SizedBox(width: 12), if (!_isRadar) BookmarkButton( value: _item.marked, onMark: widget.onMark, onUnmark: widget.onUnmark, ), if (_isRadar) DidvanIconButton( gestureSize: 32, onPressed: _showMoreOptions, icon: DidvanIcons.menu_regular, ), ], ), ), ); } void _showMoreOptions() { ActionSheetUtils.showBottomSheet( data: ActionSheetData( content: Column( children: [ MenuItem( title: 'ارتباط با سردبیر', onTap: () {}, icon: DidvanIcons.profile_regular, ), const DidvanDivider(), MenuItem( title: 'گزارش اشکال', onTap: () {}, icon: DidvanIcons.description_regular, ), ], ), title: 'موارد بیشتر', withoutButtonMode: true, ), ); } }