From 944409c69d3dc35f93d3c8553ced14778e1530cd Mon Sep 17 00:00:00 2001 From: MohammadTaha Basiri Date: Thu, 12 Oct 2023 15:59:38 +0330 Subject: [PATCH] bug fixes --- lib/config/theme_data.dart | 4 +- lib/models/news_details_data.dart | 2 +- lib/models/radar_details_data.dart | 2 +- lib/providers/theme.dart | 3 + lib/services/app_initalizer.dart | 21 ++- lib/views/home/home.dart | 1 + lib/views/home/home_state.dart | 7 +- lib/views/home/main/widgets/banner.dart | 71 ++++++- lib/views/home/main/widgets/podcast_item.dart | 178 ++++++++++-------- lib/views/home/search/search.dart | 6 +- lib/views/home/statistic/statistic.dart | 2 +- lib/views/news/news_details/news_details.dart | 11 +- .../radar/radar_details/radar_details.dart | 12 +- lib/views/widgets/didvan/bnb.dart | 49 ++++- lib/views/widgets/logo_app_bar.dart | 12 +- lib/views/widgets/overview/multitype.dart | 21 ++- lib/views/widgets/search_field.dart | 26 ++- 17 files changed, 292 insertions(+), 136 deletions(-) diff --git a/lib/config/theme_data.dart b/lib/config/theme_data.dart index 3fb5127..6968c24 100644 --- a/lib/config/theme_data.dart +++ b/lib/config/theme_data.dart @@ -16,7 +16,7 @@ class LightThemeConfig { if (!states.contains(MaterialState.selected)) { return Colors.transparent; } - return _colorScheme.primary; + return _colorScheme.secondary; }), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(4), @@ -62,7 +62,7 @@ class DarkThemeConfig { if (!states.contains(MaterialState.selected)) { return Colors.transparent; } - return _colorScheme.primary; + return _colorScheme.secondary; }), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(4), diff --git a/lib/models/news_details_data.dart b/lib/models/news_details_data.dart index 590ad5a..33d70a1 100644 --- a/lib/models/news_details_data.dart +++ b/lib/models/news_details_data.dart @@ -8,7 +8,7 @@ class NewsDetailsData { final String reference; final String image; final String createdAt; - final bool marked; + bool marked; int comments; final int order; final List tags; diff --git a/lib/models/radar_details_data.dart b/lib/models/radar_details_data.dart index 1bfb83c..839bebb 100644 --- a/lib/models/radar_details_data.dart +++ b/lib/models/radar_details_data.dart @@ -13,7 +13,7 @@ class RadarDetailsData { final String? podcast; final int? duration; final bool forManagers; - final bool marked; + bool marked; int comments; final List tags; final List contents; diff --git a/lib/providers/theme.dart b/lib/providers/theme.dart index 128443a..8906cc4 100644 --- a/lib/providers/theme.dart +++ b/lib/providers/theme.dart @@ -9,6 +9,9 @@ class ThemeProvider extends CoreProvier { set themeMode(ThemeMode value) { _themeMode = value; notifyListeners(); + Future.delayed( + const Duration(milliseconds: 500), + ).then((_) => notifyListeners()); } ThemeMode get themeMode => _themeMode; diff --git a/lib/services/app_initalizer.dart b/lib/services/app_initalizer.dart index d7e6893..757f5c2 100644 --- a/lib/services/app_initalizer.dart +++ b/lib/services/app_initalizer.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:didvan/main.dart'; import 'package:didvan/models/requests/news.dart'; import 'package:didvan/models/requests/radar.dart'; @@ -127,12 +129,19 @@ class AppInitializer { messagingSenderId: "935017686266", appId: "1:935017686266:web:a93f7a19bed23c51d2d543", measurementId: "G-80B4H9E8Y0") - : const FirebaseOptions( - apiKey: 'AIzaSyBp-UHjWeM0H0UHtX5yguFKG-riMzvvCzw', - appId: '1:935017686266:android:f9cbc9aba8e3d65ed2d543', - messagingSenderId: '935017686266', - projectId: 'didvan-9b7da', - ), + : Platform.isAndroid + ? const FirebaseOptions( + apiKey: 'AIzaSyBp-UHjWeM0H0UHtX5yguFKG-riMzvvCzw', + appId: '1:935017686266:android:f9cbc9aba8e3d65ed2d543', + messagingSenderId: '935017686266', + projectId: 'didvan-9b7da', + ) + : const FirebaseOptions( + apiKey: 'AIzaSyCMa-zg_uVhOfTnea5Klz6aPZlgHwVGj7U', + appId: '1:935017686266:ios:de47638bd662463fd2d543', + messagingSenderId: '935017686266', + projectId: 'didvan-9b7da', + ), ); } catch (e) { Firebase.app(); diff --git a/lib/views/home/home.dart b/lib/views/home/home.dart index 1dbea66..f3d1210 100644 --- a/lib/views/home/home.dart +++ b/lib/views/home/home.dart @@ -74,6 +74,7 @@ class _HomeState extends State with SingleTickerProviderStateMixin { onTabChanged: (index) { state.currentPageIndex = index; FocusScope.of(context).unfocus(); + state.resetFilters(false); _tabController.animateTo(index); }, ), diff --git a/lib/views/home/home_state.dart b/lib/views/home/home_state.dart index e32ad25..a81d4f7 100644 --- a/lib/views/home/home_state.dart +++ b/lib/views/home/home_state.dart @@ -35,6 +35,7 @@ class HomeState extends CoreProvier { final List results = []; late TabController tabController; int unreadCount = 0; + final FocusNode searchFieldFocusNode = FocusNode(); void resetFilters(bool isInit) { startDate = null; @@ -139,10 +140,7 @@ class HomeState extends CoreProvier { CategoryData(id: 6, label: 'سها'), ]; - void refresh() { - menuItems.clear(); - categories.clear(); - + void refresh() async { menuItems = [ MenuItemType( label: 'دنیای فولاد', @@ -248,5 +246,6 @@ class HomeState extends CoreProvier { asset: Assets.businessCategoryIcon, ), ]; + Future.delayed(Duration.zero, notifyListeners); } } diff --git a/lib/views/home/main/widgets/banner.dart b/lib/views/home/main/widgets/banner.dart index 91729b9..c96ddbe 100644 --- a/lib/views/home/main/widgets/banner.dart +++ b/lib/views/home/main/widgets/banner.dart @@ -1,5 +1,12 @@ +import 'dart:math'; + +import 'package:didvan/config/design_config.dart'; +import 'package:didvan/config/theme_data.dart'; +import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/views/home/main/main_page_state.dart'; +import 'package:didvan/views/widgets/animated_visibility.dart'; import 'package:didvan/views/widgets/didvan/slider.dart'; +import 'package:didvan/views/widgets/ink_wrapper.dart'; import 'package:didvan/views/widgets/skeleton_image.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -18,16 +25,76 @@ class MainPageBanner extends StatelessWidget { return Padding( padding: const EdgeInsets.symmetric(horizontal: 4), child: GestureDetector( - onTap: item.link == null ? null : () => launchUrlString(item.link!), + onTap: () => item.link == null || item.link!.isEmpty + ? _openInteractiveViewer(context, item.image) + : launchUrlString(item.link!, mode: LaunchMode.inAppWebView), child: SkeletonImage( imageUrl: item.image, ), ), ); }, - itemCount: state.content.banners.length, + itemCount: state.content.banners[isFirst ? 0 : 1].length, viewportFraction: 1, enableIndicator: true, ); } + + void _openInteractiveViewer(BuildContext context, String image) { + showDialog( + context: context, + builder: (context) => Stack( + children: [ + Positioned.fill( + child: InteractiveViewer( + child: Center( + child: SkeletonImage( + width: min(MediaQuery.of(context).size.width, + MediaQuery.of(context).size.height), + imageUrl: image, + ), + ), + ), + ), + const Positioned( + right: 24, + top: 24, + child: _BackButton(), + ), + ], + ), + ); + } +} + +class _BackButton extends StatefulWidget { + const _BackButton({Key? key}) : super(key: key); + + @override + __BackButtonState createState() => __BackButtonState(); +} + +class __BackButtonState extends State<_BackButton> { + @override + Widget build(BuildContext context) { + return AnimatedVisibility( + duration: DesignConfig.lowAnimationDuration, + isVisible: true, + child: InkWrapper( + borderRadius: DesignConfig.lowBorderRadius, + onPressed: Navigator.of(context).pop, + child: Container( + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.splash, + border: Border.all(color: Theme.of(context).colorScheme.border), + borderRadius: DesignConfig.lowBorderRadius, + ), + child: const Icon( + DidvanIcons.back_regular, + size: 32, + ), + ), + ), + ); + } } diff --git a/lib/views/home/main/widgets/podcast_item.dart b/lib/views/home/main/widgets/podcast_item.dart index ebaf1bd..d8bd232 100644 --- a/lib/views/home/main/widgets/podcast_item.dart +++ b/lib/views/home/main/widgets/podcast_item.dart @@ -1,12 +1,16 @@ import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/models/home_page_content/content.dart'; +import 'package:didvan/models/requests/studio.dart'; import 'package:didvan/models/studio_details_data.dart'; +import 'package:didvan/services/media/media.dart'; import 'package:didvan/views/direct/widgets/audio_widget.dart'; +import 'package:didvan/views/podcasts/studio_details/studio_details_state.dart'; import 'package:didvan/views/widgets/didvan/card.dart'; import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:didvan/views/widgets/skeleton_image.dart'; import 'package:flutter/material.dart'; import 'package:persian_number_utility/persian_number_utility.dart'; +import 'package:provider/provider.dart'; class MainPagePodcastItem extends StatelessWidget { final MainPageContentType content; @@ -14,92 +18,110 @@ class MainPagePodcastItem extends StatelessWidget { @override Widget build(BuildContext context) { - return Stack( - children: [ - const SizedBox( - height: 180, - width: double.infinity, - ), - Positioned.fill( - child: Center( - child: DidvanCard( - child: Row( - children: [ - SizedBox( - width: MediaQuery.of(context).size.width / 3, - ), - SizedBox( - width: MediaQuery.of(context).size.width * 2 / 3 - 90, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - SizedBox( - width: MediaQuery.of(context).size.width * 2 / 3 - 90, - child: AudioWidget( - id: content.id, - audioUrl: content.link, - audioMetaData: StudioDetailsData( + return GestureDetector( + onTap: () async { + final state = context.read(); + await state.getStudioDetails( + content.id, + args: const StudioRequestArgs(page: 0, type: 'podcast'), + ); + MediaService.currentPodcast = state.studio; + MediaService.handleAudioPlayback( + audioSource: content.link, + id: content.id, + isNetworkAudio: true, + isVoiceMessage: false, + ); + }, + child: Stack( + children: [ + const SizedBox( + height: 180, + width: double.infinity, + ), + Positioned.fill( + child: Center( + child: DidvanCard( + child: Row( + children: [ + SizedBox( + width: MediaQuery.of(context).size.width / 3, + ), + SizedBox( + width: MediaQuery.of(context).size.width * 2 / 3 - 90, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox( + width: + MediaQuery.of(context).size.width * 2 / 3 - 90, + child: AudioWidget( id: content.id, - duration: content.duration!, - title: content.title, - description: '', - image: content.image, - link: content.link, - iframe: null, - createdAt: '', - order: 1, - marked: content.marked, - comments: 0, - tags: [], - type: 'podcast', + audioUrl: content.link, + audioMetaData: StudioDetailsData( + id: content.id, + duration: content.duration!, + title: content.title, + description: '', + image: content.image, + link: content.link, + iframe: null, + createdAt: '', + order: 1, + marked: content.marked, + comments: 0, + tags: [], + type: 'podcast', + ), ), ), - ), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - DidvanText( - content.title, - style: Theme.of(context).textTheme.bodyLarge, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 4), - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const Icon( - DidvanIcons.calendar_day_light, - size: 16, - ), - DidvanText( - DateTime.parse(content.subtitles[0]) - .toPersianDateStr(), - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: - Theme.of(context).textTheme.bodySmall, - ), - ], + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + DidvanText( + content.title, + style: Theme.of(context).textTheme.bodyLarge, + maxLines: 1, + overflow: TextOverflow.ellipsis, ), - ) - ], - ), - ], + Padding( + padding: + const EdgeInsets.symmetric(vertical: 4), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Icon( + DidvanIcons.calendar_day_light, + size: 16, + ), + DidvanText( + DateTime.parse(content.subtitles[0]) + .toPersianDateStr(), + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: + Theme.of(context).textTheme.bodySmall, + ), + ], + ), + ) + ], + ), + ], + ), ), - ), - ], + ], + ), ), ), ), - ), - SkeletonImage( - width: MediaQuery.of(context).size.width / 3, - height: 180, - imageUrl: content.image, - ), - ], + SkeletonImage( + width: MediaQuery.of(context).size.width / 3, + height: 180, + imageUrl: content.image, + ), + ], + ), ); } } diff --git a/lib/views/home/search/search.dart b/lib/views/home/search/search.dart index 5cd3c99..b9d668f 100644 --- a/lib/views/home/search/search.dart +++ b/lib/views/home/search/search.dart @@ -3,7 +3,7 @@ import 'package:didvan/models/enums.dart'; import 'package:didvan/views/home/home_state.dart'; import 'package:didvan/views/home/search/widgets/search_result_item.dart'; import 'package:didvan/views/widgets/categories_list.dart'; -import 'package:didvan/views/widgets/state_handlers/empty_list.dart'; +import 'package:didvan/views/widgets/state_handlers/empty_result.dart'; import 'package:didvan/views/widgets/state_handlers/state_handler.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -23,7 +23,9 @@ class SearchPage extends StatelessWidget { state: state, enableEmptyState: state.appState == AppState.idle && state.results.isEmpty, - emptyState: const EmptyList(), + emptyState: EmptyResult( + onNewSearch: () => state.searchFieldFocusNode.requestFocus(), + ), onRetry: () => state.searchAll(page: state.page), builder: (context, state) => ListView.builder( padding: const EdgeInsets.all(16) diff --git a/lib/views/home/statistic/statistic.dart b/lib/views/home/statistic/statistic.dart index 5b2370b..7e3f99c 100644 --- a/lib/views/home/statistic/statistic.dart +++ b/lib/views/home/statistic/statistic.dart @@ -58,7 +58,7 @@ class _StatisticState extends State { slivers: [ if (state.appState != AppState.failed) const SliverToBoxAdapter( - child: SizedBox(height: 120), + child: SizedBox(height: 140), ), if (state.appState != AppState.failed && state.markedStatistics.isNotEmpty) diff --git a/lib/views/news/news_details/news_details.dart b/lib/views/news/news_details/news_details.dart index 4f42a54..b308040 100644 --- a/lib/views/news/news_details/news_details.dart +++ b/lib/views/news/news_details/news_details.dart @@ -66,10 +66,13 @@ class _NewsDetailsState extends State { scrollController: _scrollController, item: state.currentNews, onCommentsChanged: state.onCommentsChanged, - onMarkChanged: (value) => widget.pageData['onMarkChanged']( - state.currentNews.id, - value, - ), + onMarkChanged: (value) { + state.currentNews.marked = value; + widget.pageData['onMarkChanged']( + state.currentNews.id, + value, + ); + }, isRadar: false, ), ), diff --git a/lib/views/radar/radar_details/radar_details.dart b/lib/views/radar/radar_details/radar_details.dart index 2d5d437..ac720c2 100644 --- a/lib/views/radar/radar_details/radar_details.dart +++ b/lib/views/radar/radar_details/radar_details.dart @@ -65,11 +65,13 @@ class _RadarDetailsState extends State { widget.pageData['hasUnmarkConfirmation'] ?? false, isRadar: true, scrollController: _scrollController, - onMarkChanged: (value) => - widget.pageData['onMarkChanged']?.call( - state.currentRadar.id, - value, - ), + onMarkChanged: (value) { + state.currentRadar.marked = value; + widget.pageData['onMarkChanged']( + state.currentRadar.id, + value, + ); + }, item: state.currentRadar, onCommentsChanged: (count) { state.onCommentsChanged(count); diff --git a/lib/views/widgets/didvan/bnb.dart b/lib/views/widgets/didvan/bnb.dart index 6cb00c7..ea2cc4a 100644 --- a/lib/views/widgets/didvan/bnb.dart +++ b/lib/views/widgets/didvan/bnb.dart @@ -104,7 +104,10 @@ class _PlayerNavBar extends StatelessWidget { return StreamBuilder( stream: MediaService.audioPlayer.isPlaying, builder: (context, snapshot) => GestureDetector( - onTap: () => MediaService.currentPodcast == null || + onTap: () => (MediaService.currentPodcast == null && + (MediaService.audioPlayerTag ?? '') + .split('-')[1] + .isNotEmpty) || MediaService.currentPodcast?.description == 'radar' ? Navigator.of(context).pushNamed( Routes.radarDetails, @@ -116,7 +119,9 @@ class _PlayerNavBar extends StatelessWidget { 'hasUnmarkConfirmation': false, }, ) - : _showPlayerBottomSheet(context), + : (MediaService.audioPlayerTag ?? '').split('-')[1].isNotEmpty + ? _showPlayerBottomSheet(context) + : null, child: Consumer( builder: (context, state, child) => AnimatedContainer( padding: const EdgeInsets.only(top: 12), @@ -147,13 +152,39 @@ class _PlayerNavBar extends StatelessWidget { if (MediaService.currentPodcast == null) { return SizedBox( height: 32, - child: Center( - child: SpinKitThreeBounce( - size: 18, - color: DesignConfig.isDark - ? Theme.of(context).colorScheme.title - : Theme.of(context).colorScheme.secondCTA, - ), + child: Row( + children: [ + Padding( + padding: const EdgeInsets.only( + right: 12, + left: 16, + ), + child: DidvanIconButton( + icon: DidvanIcons.close_regular, + color: DesignConfig.isDark + ? null + : Theme.of(context).colorScheme.secondCTA, + gestureSize: 28, + onPressed: () { + MediaService.resetAudioPlayer(); + state.update(); + }, + ), + ), + Expanded( + child: Center( + child: Padding( + padding: const EdgeInsets.only(left: 48), + child: SpinKitThreeBounce( + size: 18, + color: DesignConfig.isDark + ? Theme.of(context).colorScheme.title + : Theme.of(context).colorScheme.secondCTA, + ), + ), + ), + ), + ], ), ); } diff --git a/lib/views/widgets/logo_app_bar.dart b/lib/views/widgets/logo_app_bar.dart index f9b3549..9cc6ea6 100644 --- a/lib/views/widgets/logo_app_bar.dart +++ b/lib/views/widgets/logo_app_bar.dart @@ -3,6 +3,7 @@ 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'; @@ -49,7 +50,9 @@ class LogoAppBar extends StatelessWidget implements PreferredSizeWidget { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - const DidvanHorizontalLogo(), + DidvanHorizontalLogo( + key: ValueKey(context.watch().themeMode), + ), Row( children: [ DidvanIconButton( @@ -95,12 +98,13 @@ class LogoAppBar extends StatelessWidget implements PreferredSizeWidget { const SizedBox(height: 16), Consumer( builder: (context, state, child) => SearchField( - key: ValueKey(state.search), + key: state.search.isEmpty ? ValueKey(state.search) : null, + value: state.search, title: state.currentPageIndex == 3 ? 'رصدهای من' : 'دیدوان', onChanged: (value) => _onChanged(value, context), - focusNode: FocusNode(), + focusNode: state.searchFieldFocusNode, onFilterButtonPressed: () => _showFilterBottomSheet(context), - isFiltered: state.filtering && state.search == '', + isFiltered: state.filtering, onGoBack: state.filtering ? () { state.resetFilters(false); diff --git a/lib/views/widgets/overview/multitype.dart b/lib/views/widgets/overview/multitype.dart index 6c3e155..4dc4c5b 100644 --- a/lib/views/widgets/overview/multitype.dart +++ b/lib/views/widgets/overview/multitype.dart @@ -7,6 +7,7 @@ import 'package:didvan/models/requests/studio.dart'; import 'package:didvan/providers/user.dart'; import 'package:didvan/routes/routes.dart'; import 'package:didvan/services/media/media.dart'; +import 'package:didvan/services/network/request.dart'; import 'package:didvan/utils/date_time.dart'; import 'package:didvan/views/podcasts/studio_details/studio_details_state.dart'; import 'package:didvan/views/widgets/didvan/card.dart'; @@ -17,6 +18,7 @@ import 'package:didvan/views/widgets/skeleton_image.dart'; import 'package:flutter/material.dart'; import 'package:persian_number_utility/persian_number_utility.dart'; import 'package:provider/provider.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class MultitypeOverview extends StatelessWidget { final OverviewData item; @@ -42,14 +44,20 @@ class MultitypeOverview extends StatelessWidget { return StudioRequestArgs(page: 0, type: item.type); } - String get _targetPageRouteName { + String? get _targetPageRouteName { if (item.type == 'radar') { return Routes.radarDetails; } if (item.type == 'news') { return Routes.newsDetails; } - return Routes.studioDetails; + if (item.type == 'podcast') { + return Routes.podcasts; + } + if (item.type == 'video') { + return Routes.videocasts; + } + return null; } IconData get _icon { @@ -90,8 +98,15 @@ class MultitypeOverview extends StatelessWidget { ); return; } + if (_targetPageRouteName == null && item.link != null) { + launchUrlString( + '${item.link!}?accessToken=${RequestService.token}', + mode: LaunchMode.inAppWebView, + ); + return; + } Navigator.of(context).pushNamed( - _targetPageRouteName, + _targetPageRouteName!, arguments: { 'onMarkChanged': onMarkChanged, 'id': item.id, diff --git a/lib/views/widgets/search_field.dart b/lib/views/widgets/search_field.dart index d4e4933..01859be 100644 --- a/lib/views/widgets/search_field.dart +++ b/lib/views/widgets/search_field.dart @@ -10,6 +10,7 @@ class SearchField extends StatefulWidget { final void Function(String value) onChanged; final VoidCallback? onFilterButtonPressed; final VoidCallback? onGoBack; + final String? value; const SearchField({ Key? key, @@ -19,6 +20,7 @@ class SearchField extends StatefulWidget { this.onFilterButtonPressed, this.isFiltered, this.onGoBack, + this.value, }) : super(key: key); @override @@ -46,6 +48,7 @@ class _SearchFieldState extends State { color: _fillColor(), ), child: TextFormField( + initialValue: widget.value, focusNode: widget.focusNode, style: Theme.of(context).textTheme.bodyMedium, textAlignVertical: TextAlignVertical.center, @@ -109,20 +112,15 @@ class _SearchFieldState extends State { color: Theme.of(context).colorScheme.primary, ), ), - prefix: widget.onGoBack != null - ? DidvanIconButton( - gestureSize: 32, - icon: DidvanIcons.back_light, - color: Theme.of(context).colorScheme.text, - onPressed: widget.onGoBack!, - ) - : null, - prefixIcon: widget.onGoBack == null - ? Icon( - DidvanIcons.search_regular, - color: Theme.of(context).colorScheme.text, - ) - : null, + prefixIcon: GestureDetector( + onTap: widget.onGoBack, + child: Icon( + widget.onGoBack == null + ? DidvanIcons.search_regular + : DidvanIcons.back_light, + color: Theme.of(context).colorScheme.text, + ), + ), prefixIconColor: Theme.of(context).colorScheme.inputText, enabledBorder: OutlineInputBorder( borderRadius: const BorderRadius.all(