From 4e036ad2c50d34e696665de90473dc38955347fd Mon Sep 17 00:00:00 2001 From: MohammadTaha Basiri Date: Fri, 6 Oct 2023 03:22:50 +0330 Subject: [PATCH] backup! --- ios/Podfile.lock | 42 ++--- lib/config/theme_data.dart | 7 +- lib/main.dart | 62 ++++--- lib/models/home_page_content/content.dart | 26 +++ .../home_page_content/home_page_content.dart | 22 +++ .../home_page_content/home_page_list.dart | 26 +++ lib/routes/route_generator.dart | 74 +++++--- lib/routes/routes.dart | 6 +- lib/services/app_initalizer.dart | 2 +- lib/services/network/request_helper.dart | 2 + lib/utils/date_time.dart | 5 +- lib/views/home/home.dart | 16 +- lib/views/home/home/home_page.dart | 170 ++++++++++++++++++ lib/views/home/home/home_page_state.dart | 19 ++ lib/views/home/settings/settings.dart | 139 -------------- .../widgets/audio/audio_player_widget.dart | 6 +- lib/views/home/widgets/logo_app_bar.dart | 73 ++++++-- .../home/widgets/overview/multitype.dart | 2 +- lib/views/home/widgets/overview/podcast.dart | 2 +- lib/views/home/widgets/search_field.dart | 73 +++++--- .../studio.dart => podcasts/podcasts.dart} | 26 +-- .../podcasts_state.dart} | 2 +- .../studio_details/studio_details.mobile.dart | 4 +- .../studio_details/studio_details.web.dart | 4 +- .../studio_details/studio_details_state.dart | 0 .../widgets/details_tab_bar.dart | 2 +- .../widgets/studio_details_widget.dart | 4 +- .../studio => podcasts}/widgets/slider.dart | 6 +- .../studio => podcasts}/widgets/tab_bar.dart | 4 +- .../bookmarks/bookmark_state.dart | 0 .../bookmarks/bookmarks.dart | 2 +- .../filtered_bookmark/filtered_bookmark.dart | 2 +- .../filtered_bookmarks_state.dart | 0 .../direct_list/direct_list.dart | 4 +- .../direct_list/direct_list_state.dart | 0 .../direct_list/widgets/direct_item.dart | 2 +- .../edit_profile/edit_profile.dart} | 10 +- .../edit_profile}/widgets/profile_photo.dart | 1 - .../general_settings/settings.dart | 2 +- .../general_settings/settings_state.dart | 0 lib/views/profile/profile.dart | 131 ++++++++++++++ lib/views/{home => }/radar/radar.dart | 2 +- .../radar/radar_details/radar_details.dart | 2 +- .../radar_details/radar_details_state.dart | 0 lib/views/{home => }/radar/radar_state.dart | 0 lib/views/widgets/didvan/app_bar.dart | 5 +- lib/views/widgets/didvan/bnb.dart | 46 ++--- .../widgets/logos/didvan_vertical_logo.dart | 2 +- pubspec.lock | 104 +++++------ pubspec.yaml | 4 +- 50 files changed, 745 insertions(+), 400 deletions(-) create mode 100644 lib/models/home_page_content/content.dart create mode 100644 lib/models/home_page_content/home_page_content.dart create mode 100644 lib/models/home_page_content/home_page_list.dart create mode 100644 lib/views/home/home/home_page.dart create mode 100644 lib/views/home/home/home_page_state.dart delete mode 100644 lib/views/home/settings/settings.dart rename lib/views/{home/studio/studio.dart => podcasts/podcasts.dart} (93%) rename lib/views/{home/studio/studio_state.dart => podcasts/podcasts_state.dart} (98%) rename lib/views/{home/studio => podcasts}/studio_details/studio_details.mobile.dart (96%) rename lib/views/{home/studio => podcasts}/studio_details/studio_details.web.dart (95%) rename lib/views/{home/studio => podcasts}/studio_details/studio_details_state.dart (100%) rename lib/views/{home/studio => podcasts}/studio_details/widgets/details_tab_bar.dart (97%) rename lib/views/{home/studio => podcasts}/studio_details/widgets/studio_details_widget.dart (98%) rename lib/views/{home/studio => podcasts}/widgets/slider.dart (97%) rename lib/views/{home/studio => podcasts}/widgets/tab_bar.dart (96%) rename lib/views/{home/settings => profile}/bookmarks/bookmark_state.dart (100%) rename lib/views/{home/settings => profile}/bookmarks/bookmarks.dart (98%) rename lib/views/{home/settings => profile}/bookmarks/filtered_bookmark/filtered_bookmark.dart (97%) rename lib/views/{home/settings => profile}/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart (100%) rename lib/views/{home/settings => profile}/direct_list/direct_list.dart (95%) rename lib/views/{home/settings => profile}/direct_list/direct_list_state.dart (100%) rename lib/views/{home/settings => profile}/direct_list/widgets/direct_item.dart (97%) rename lib/views/{home/settings/profile/profile.dart => profile/edit_profile/edit_profile.dart} (95%) rename lib/views/{home/settings/profile => profile/edit_profile}/widgets/profile_photo.dart (99%) rename lib/views/{home/settings => profile}/general_settings/settings.dart (99%) rename lib/views/{home/settings => profile}/general_settings/settings_state.dart (100%) create mode 100644 lib/views/profile/profile.dart rename lib/views/{home => }/radar/radar.dart (99%) rename lib/views/{home => }/radar/radar_details/radar_details.dart (97%) rename lib/views/{home => }/radar/radar_details/radar_details_state.dart (100%) rename lib/views/{home => }/radar/radar_state.dart (100%) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index d8b059b..a93c229 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -10,30 +10,30 @@ PODS: - HLSCachingReverseProxyServer - PINCache - Cache (6.0.0) - - Firebase/CoreOnly (10.12.0): - - FirebaseCore (= 10.12.0) - - Firebase/Messaging (10.12.0): + - Firebase/CoreOnly (10.15.0): + - FirebaseCore (= 10.15.0) + - Firebase/Messaging (10.15.0): - Firebase/CoreOnly - - FirebaseMessaging (~> 10.12.0) - - firebase_core (2.15.1): - - Firebase/CoreOnly (= 10.12.0) + - FirebaseMessaging (~> 10.15.0) + - firebase_core (2.17.0): + - Firebase/CoreOnly (= 10.15.0) - Flutter - - firebase_messaging (14.6.7): - - Firebase/Messaging (= 10.12.0) + - firebase_messaging (14.6.9): + - Firebase/Messaging (= 10.15.0) - firebase_core - Flutter - - FirebaseCore (10.12.0): + - FirebaseCore (10.15.0): - FirebaseCoreInternal (~> 10.0) - GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/Logger (~> 7.8) - - FirebaseCoreInternal (10.14.0): + - FirebaseCoreInternal (10.16.0): - "GoogleUtilities/NSData+zlib (~> 7.8)" - - FirebaseInstallations (10.14.0): + - FirebaseInstallations (10.16.0): - FirebaseCore (~> 10.0) - GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/UserDefaults (~> 7.8) - PromisesObjC (~> 2.1) - - FirebaseMessaging (10.12.0): + - FirebaseMessaging (10.15.0): - FirebaseCore (~> 10.0) - FirebaseInstallations (~> 10.0) - GoogleDataTransport (~> 9.2) @@ -198,13 +198,13 @@ SPEC CHECKSUMS: assets_audio_player_web: 19826380c44375761aa0b9053665c1e3fbc3b86b better_player: 2406bfe8175203c7a46fa15f9d778d73b12e1646 Cache: 4ca7e00363fca5455f26534e5607634c820ffc2d - Firebase: 07150e75d142fb9399f6777fa56a187b17f833a0 - firebase_core: 4a3246a02f828a01c74a2c26427037786d90f17f - firebase_messaging: 0b4f7997f491343b90d9300af54fe55c72135833 - FirebaseCore: f86a1394906b97ac445ae49c92552a9425831bed - FirebaseCoreInternal: d558159ee6cc4b823c2296ecc193de9f6d9a5bb3 - FirebaseInstallations: f672b1eda64e6381c21d424a2f680a943fd83f3b - FirebaseMessaging: bb2c4f6422a753038fe137d90ae7c1af57251316 + Firebase: 66043bd4579e5b73811f96829c694c7af8d67435 + firebase_core: 28e84c2a4fcf6a50ef83f47b145ded8c1fa331e4 + firebase_messaging: 91ec967913a5d144f951b3c3ac17a57796d38735 + FirebaseCore: 2cec518b43635f96afe7ac3a9c513e47558abd2e + FirebaseCoreInternal: 26233f705cc4531236818a07ac84d20c333e505a + FirebaseInstallations: b822f91a61f7d1ba763e5ccc9d4f2e6f2ed3b3ee + FirebaseMessaging: 0c0ae1eb722ef0c07f7801e5ded8dccd1357d6d4 Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be flutter_vibrate: 9f4c2ab57008965f78969472367c329dd77eb801 @@ -222,7 +222,7 @@ SPEC CHECKSUMS: PINOperation: daa34d4aa1d8449089be7d405b9d974abc4724c6 PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 record: cae05d8dd3cdb1dea3511b20e5a5811a1ae00d0d - rive_common: 60ae7896ab40f9513974f36f015de33f70d2c5c5 + rive_common: 8a159d68033a8b073e5853acc50f03aa486a2888 sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863 url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4 @@ -231,4 +231,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 2a309ea1fa3eb1d2ce822efc9e742b46b0932a95 -COCOAPODS: 1.11.3 +COCOAPODS: 1.13.0 diff --git a/lib/config/theme_data.dart b/lib/config/theme_data.dart index fbebcb1..0b5415b 100644 --- a/lib/config/theme_data.dart +++ b/lib/config/theme_data.dart @@ -8,6 +8,7 @@ class LightThemeConfig { static const Color _background = Color(0xFFF8F8FA); static ThemeData get themeData => ThemeData( + useMaterial3: true, scaffoldBackgroundColor: _background, textTheme: _TextThemeData.data, cardColor: _colorScheme.surface, @@ -19,7 +20,8 @@ class LightThemeConfig { ), iconTheme: IconThemeData( color: _colorScheme.text, - ), colorScheme: _colorScheme.copyWith(background: _background), + ), + colorScheme: _colorScheme.copyWith(background: _background), ); static const ColorScheme _colorScheme = ColorScheme( @@ -57,7 +59,8 @@ class DarkThemeConfig { borderRadius: BorderRadius.circular(4), ), ), - cardColor: _colorScheme.surface, colorScheme: _colorScheme.copyWith(background: _background), + cardColor: _colorScheme.surface, + colorScheme: _colorScheme.copyWith(background: _background), ); static const ColorScheme _colorScheme = ColorScheme( diff --git a/lib/main.dart b/lib/main.dart index cf57c36..6ccb5f7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -7,7 +7,7 @@ import 'package:didvan/providers/theme.dart'; import 'package:didvan/providers/user.dart'; import 'package:didvan/routes/route_generator.dart'; import 'package:didvan/services/app_initalizer.dart'; -import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart'; +import 'package:didvan/views/podcasts/studio_details/studio_details_state.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/foundation.dart'; @@ -71,33 +71,39 @@ class Didvan extends StatelessWidget { ), ], child: Consumer( - builder: (context, themeProvider, child) => MaterialApp( - navigatorKey: navigatorKey, - debugShowCheckedModeBanner: false, - title: 'Didvan', - theme: LightThemeConfig.themeData.copyWith( - textTheme: LightThemeConfig.themeData.textTheme.apply( - fontFamily: themeProvider.fontFamily, - )), - darkTheme: DarkThemeConfig.themeData.copyWith( - textTheme: DarkThemeConfig.themeData.textTheme.apply( - fontFamily: themeProvider.fontFamily, - )), - color: LightThemeConfig.themeData.primaryColor, - themeMode: themeProvider.themeMode, - onGenerateRoute: (settings) => RouteGenerator.generateRoute(settings), - builder: BotToastInit(), //1. call BotToastInit - navigatorObservers: [BotToastNavigatorObserver()], - initialRoute: '/', - localizationsDelegates: const [ - GlobalCupertinoLocalizations.delegate, - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - ], - supportedLocales: const [ - Locale("fa", "IR"), - ], - locale: const Locale("fa", "IR"), + builder: (context, themeProvider, child) => Container( + color: Theme.of(context).colorScheme.surface, + child: SafeArea( + child: MaterialApp( + navigatorKey: navigatorKey, + debugShowCheckedModeBanner: false, + title: 'Didvan', + theme: LightThemeConfig.themeData.copyWith( + textTheme: LightThemeConfig.themeData.textTheme.apply( + fontFamily: themeProvider.fontFamily, + )), + darkTheme: DarkThemeConfig.themeData.copyWith( + textTheme: DarkThemeConfig.themeData.textTheme.apply( + fontFamily: themeProvider.fontFamily, + )), + color: LightThemeConfig.themeData.primaryColor, + themeMode: themeProvider.themeMode, + onGenerateRoute: (settings) => + RouteGenerator.generateRoute(settings), + builder: BotToastInit(), //1. call BotToastInit + navigatorObservers: [BotToastNavigatorObserver()], + initialRoute: '/', + localizationsDelegates: const [ + GlobalCupertinoLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ], + supportedLocales: const [ + Locale("fa", "IR"), + ], + locale: const Locale("fa", "IR"), + ), + ), ), ), ); diff --git a/lib/models/home_page_content/content.dart b/lib/models/home_page_content/content.dart new file mode 100644 index 0000000..010245a --- /dev/null +++ b/lib/models/home_page_content/content.dart @@ -0,0 +1,26 @@ +class Content { + final int? id; + final String title; + final String image; + final String link; + final bool marked; + final List subtitles; + + const Content({ + required this.id, + required this.title, + required this.image, + required this.link, + required this.marked, + required this.subtitles, + }); + + factory Content.fromJson(Map json) => Content( + id: json['id'], + title: json['title'], + image: json['image'], + link: json['link'], + marked: json['marked'], + subtitles: List.from(json['subtitles']), + ); +} diff --git a/lib/models/home_page_content/home_page_content.dart b/lib/models/home_page_content/home_page_content.dart new file mode 100644 index 0000000..b270668 --- /dev/null +++ b/lib/models/home_page_content/home_page_content.dart @@ -0,0 +1,22 @@ +import 'home_page_list.dart'; + +class HomePageContent { + final List banners; + final List lists; + final int unread; + + const HomePageContent( + {required this.banners, required this.lists, required this.unread}); + + factory HomePageContent.fromJson(Map json) { + return HomePageContent( + banners: json['banners'], + lists: List.from( + json['lists'].map( + (x) => HomePageList.fromJson(x), + ), + ), + unread: json['unread'], + ); + } +} diff --git a/lib/models/home_page_content/home_page_list.dart b/lib/models/home_page_content/home_page_list.dart new file mode 100644 index 0000000..9efa979 --- /dev/null +++ b/lib/models/home_page_content/home_page_list.dart @@ -0,0 +1,26 @@ +import 'content.dart'; + +class HomePageList { + final String type; + final String header; + final String more; + final String link; + final List contents; + + const HomePageList({ + required this.type, + required this.header, + required this.more, + required this.link, + required this.contents, + }); + + factory HomePageList.fromJson(Map json) => HomePageList( + type: json['type'], + header: json['header'], + more: json['more'], + link: json['link'], + contents: List.from(json['contents'].map( + (x) => Content.fromJson(x), + ))); +} diff --git a/lib/routes/route_generator.dart b/lib/routes/route_generator.dart index 5a881c6..1c363cc 100644 --- a/lib/routes/route_generator.dart +++ b/lib/routes/route_generator.dart @@ -7,29 +7,34 @@ import 'package:didvan/views/home/direct/direct_state.dart'; import 'package:didvan/views/home/hashtag/hashtag.dart'; import 'package:didvan/views/home/hashtag/hashtag_state.dart'; import 'package:didvan/views/home/home.dart'; +import 'package:didvan/views/home/home/home_page_state.dart'; import 'package:didvan/views/home/home_state.dart'; +import 'package:didvan/views/home/news/news.dart'; import 'package:didvan/views/home/news/news_details/news_details.dart'; import 'package:didvan/views/home/news/news_details/news_details_state.dart'; import 'package:didvan/views/home/news/news_state.dart'; -import 'package:didvan/views/home/radar/radar_details/radar_details.dart'; -import 'package:didvan/views/home/radar/radar_details/radar_details_state.dart'; -import 'package:didvan/views/home/radar/radar_state.dart'; -import 'package:didvan/views/home/settings/bookmarks/bookmarks.dart'; -import 'package:didvan/views/home/settings/bookmarks/bookmark_state.dart'; -import 'package:didvan/views/home/settings/bookmarks/filtered_bookmark/filtered_bookmark.dart'; -import 'package:didvan/views/home/settings/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart'; -import 'package:didvan/views/home/settings/direct_list/direct_list.dart'; -import 'package:didvan/views/home/settings/direct_list/direct_list_state.dart'; -import 'package:didvan/views/home/settings/general_settings/settings.dart'; -import 'package:didvan/views/home/settings/general_settings/settings_state.dart'; -import 'package:didvan/views/home/settings/profile/profile.dart'; +import 'package:didvan/views/podcasts/podcasts.dart'; +import 'package:didvan/views/profile/profile.dart'; +import 'package:didvan/views/radar/radar.dart'; +import 'package:didvan/views/radar/radar_details/radar_details.dart'; +import 'package:didvan/views/radar/radar_details/radar_details_state.dart'; +import 'package:didvan/views/radar/radar_state.dart'; +import 'package:didvan/views/profile/bookmarks/bookmarks.dart'; +import 'package:didvan/views/profile/bookmarks/bookmark_state.dart'; +import 'package:didvan/views/profile/bookmarks/filtered_bookmark/filtered_bookmark.dart'; +import 'package:didvan/views/profile/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart'; +import 'package:didvan/views/profile/direct_list/direct_list.dart'; +import 'package:didvan/views/profile/direct_list/direct_list_state.dart'; +import 'package:didvan/views/profile/general_settings/settings.dart'; +import 'package:didvan/views/profile/general_settings/settings_state.dart'; +import 'package:didvan/views/profile/edit_profile/edit_profile.dart'; import 'package:didvan/views/home/statistic/statistic_details/statistic_details.dart'; import 'package:didvan/views/home/statistic/statistic_details/statistic_details_state.dart'; import 'package:didvan/views/home/statistic/statistic_state.dart'; -import 'package:didvan/views/home/studio/studio_details/studio_details.mobile.dart' - if (dart.library.io) 'package:didvan/views/home/studio/studio_details/studio_details.mobile.dart' - if (dart.library.html) 'package:didvan/views/home/studio/studio_details/studio_details.web.dart'; -import 'package:didvan/views/home/studio/studio_state.dart'; +import 'package:didvan/views/podcasts/studio_details/studio_details.mobile.dart' + if (dart.library.io) 'package:didvan/views/podcasts/studio_details/studio_details.mobile.dart' + if (dart.library.html) 'package:didvan/views/podcasts/studio_details/studio_details.web.dart'; +import 'package:didvan/views/podcasts/podcasts_state.dart'; import 'package:didvan/views/splash/splash.dart'; import 'package:didvan/routes/routes.dart'; import 'package:flutter/foundation.dart'; @@ -57,14 +62,8 @@ class RouteGenerator { ChangeNotifierProvider( create: (context) => HomeState(), ), - ChangeNotifierProvider( - create: (context) => RadarState(), - ), - ChangeNotifierProvider( - create: (context) => NewsState(), - ), - ChangeNotifierProvider( - create: (context) => StudioState(), + ChangeNotifierProvider( + create: (context) => HomePageState(), ), ChangeNotifierProvider( create: (context) => StatisticState(), @@ -73,9 +72,13 @@ class RouteGenerator { child: const Home(), ), ); + case Routes.editProfile: + return _createRoute( + const EditProfile(), + ); case Routes.profile: return _createRoute( - const Profile(), + const ProfilePage(), ); case Routes.generalSettings: return _createRoute( @@ -84,6 +87,27 @@ class RouteGenerator { child: const GeneralSettings(), ), ); + case Routes.podcasts: + return _createRoute( + ChangeNotifierProvider( + create: (context) => PodcastsState(), + child: const Podcasts(), + ), + ); + case Routes.radars: + return _createRoute( + ChangeNotifierProvider( + create: (context) => RadarState(), + child: const Radar(), + ), + ); + case Routes.news: + return _createRoute( + ChangeNotifierProvider( + create: (context) => NewsState(), + child: const News(), + ), + ); case Routes.radarDetails: return _createRoute( ChangeNotifierProvider( diff --git a/lib/routes/routes.dart b/lib/routes/routes.dart index 23657ab..5003eb3 100644 --- a/lib/routes/routes.dart +++ b/lib/routes/routes.dart @@ -1,14 +1,18 @@ class Routes { static const String splash = '/'; static const String home = '/home'; + static const String radars = '/radars'; + static const String news = '/news'; + static const String podcasts = '/podcasts'; static const String aboutUs = '/about-us'; static const String authenticaion = '/authentication'; static const String profile = '/profile'; + static const String editProfile = '/edit-profile'; static const String settings = '/settings'; static const String generalSettings = '/general-settings'; static const String radarDetails = '/radar-details'; static const String newsDetails = '/news-details'; - static const String studioDetails = '/studio-details'; + static const String studioDetails = '/podcast-details'; static const String statisticDetails = '/statistic-details'; static const String directList = '/direct-list'; static const String direct = '/direct'; diff --git a/lib/services/app_initalizer.dart b/lib/services/app_initalizer.dart index e98e752..d7e6893 100644 --- a/lib/services/app_initalizer.dart +++ b/lib/services/app_initalizer.dart @@ -7,7 +7,7 @@ import 'package:didvan/routes/routes.dart'; import 'package:didvan/services/media/media.dart'; import 'package:didvan/services/storage/storage.dart'; import 'package:didvan/views/home/home_state.dart'; -import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart'; +import 'package:didvan/views/podcasts/studio_details/studio_details_state.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/foundation.dart'; diff --git a/lib/services/network/request_helper.dart b/lib/services/network/request_helper.dart index caa7d33..bab022e 100644 --- a/lib/services/network/request_helper.dart +++ b/lib/services/network/request_helper.dart @@ -11,6 +11,8 @@ class RequestHelper { static const String _baseStatisticUrl = '$baseUrl/statistic'; static const String _baseDirectUrl = '$_baseUserUrl/direct'; + static const String mainPageContent = '$baseUrl/home'; + static const String confirmUsername = '$_baseUserUrl/confirmUsername'; static const String changePassword = '$_baseUserUrl/changePassword'; static const String login = '$_baseUserUrl/login'; diff --git a/lib/utils/date_time.dart b/lib/utils/date_time.dart index bee8947..0002582 100644 --- a/lib/utils/date_time.dart +++ b/lib/utils/date_time.dart @@ -49,9 +49,8 @@ class DateTimeUtils { lastDate: lastDate, builder: (context, child) => Theme( data: Theme.of(context).copyWith( - textTheme: Theme.of(context) - .textTheme - .copyWith(headlineMedium: Theme.of(context).textTheme.displaySmall)), + textTheme: Theme.of(context).textTheme.copyWith( + headlineMedium: Theme.of(context).textTheme.displaySmall)), child: child!, ), ); diff --git a/lib/views/home/home.dart b/lib/views/home/home.dart index 41c1f44..7127ee9 100644 --- a/lib/views/home/home.dart +++ b/lib/views/home/home.dart @@ -1,11 +1,9 @@ import 'package:didvan/config/design_config.dart'; import 'package:didvan/services/app_initalizer.dart'; +import 'package:didvan/views/home/home/home_page.dart'; import 'package:didvan/views/home/home_state.dart'; -import 'package:didvan/views/home/news/news.dart'; -import 'package:didvan/views/home/radar/radar.dart'; -import 'package:didvan/views/home/settings/settings.dart'; +import 'package:didvan/views/home/widgets/logo_app_bar.dart'; import 'package:didvan/views/home/statistic/statistic.dart'; -import 'package:didvan/views/home/studio/studio.dart'; import 'package:didvan/views/widgets/didvan/bnb.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -24,7 +22,7 @@ class _HomeState extends State with SingleTickerProviderStateMixin { void initState() { final state = context.read(); DesignConfig.updateSystemUiOverlayStyle(); - _tabController = TabController(length: 5, vsync: this, initialIndex: 2); + _tabController = TabController(length: 4, vsync: this, initialIndex: 0); _tabController.addListener(() { state.currentPageIndex = _tabController.index; }); @@ -37,15 +35,15 @@ class _HomeState extends State with SingleTickerProviderStateMixin { @override Widget build(BuildContext context) { return Scaffold( + appBar: const LogoAppBar(), body: TabBarView( physics: const NeverScrollableScrollPhysics(), controller: _tabController, children: const [ - News(), + HomePage(), Statistic(), - Radar(), - Studio(), - Settings(), + SizedBox(), + SizedBox(), ], ), bottomNavigationBar: Consumer( diff --git a/lib/views/home/home/home_page.dart b/lib/views/home/home/home_page.dart new file mode 100644 index 0000000..728ef6c --- /dev/null +++ b/lib/views/home/home/home_page.dart @@ -0,0 +1,170 @@ +import 'package:carousel_slider/carousel_slider.dart'; +import 'package:didvan/config/theme_data.dart'; +import 'package:didvan/constants/app_icons.dart'; +import 'package:didvan/models/home_page_content/home_page_list.dart'; +import 'package:didvan/views/home/home/home_page_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:didvan/views/widgets/state_handlers/state_handler.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class HomePage extends StatefulWidget { + const HomePage({super.key}); + + @override + State createState() => _HomePageState(); +} + +class _HomePageState extends State { + @override + void initState() { + Future.delayed( + Duration.zero, + context.read().getMainPageContent, + ); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return StateHandler( + onRetry: () {}, + state: context.watch(), + builder: (context, state) => + ListView.builder(itemBuilder: (context, index) { + if (index == 0) { + return CarouselSlider( + items: state.content.banners + .map((e) => SkeletonImage( + imageUrl: e.imageUrl, + )) + .toList(), + options: CarouselOptions( + viewportFraction: 1.0, + ), + ); + } + return const SizedBox(); + // state.content.banners.map((e) => const SizedBox()).toList(), + // for (int i = 0; i < state.content.lists.length; i += 2) + // ...state.content.lists + // .sublist(i, i + 2) + // .map((e) => _HomePageItem(list: e)) + // .toList(), + }), + ); + } +} + +class _HomePageItem extends StatelessWidget { + final HomePageList list; + const _HomePageItem({required this.list}); + + void moreHandler(BuildContext context) { + if (list.link.startsWith('http')) { + launchUrl(Uri.parse(list.link)); + return; + } + Navigator.of(context).pushNamed(list.link); + } + + @override + Widget build(BuildContext context) { + return Column( + children: [ + Padding( + padding: const EdgeInsets.only( + left: 16, + right: 16, + bottom: 16, + top: 28, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + DidvanText( + list.header, + style: Theme.of(context).textTheme.titleMedium, + color: Theme.of(context).colorScheme.title, + ), + GestureDetector( + onTap: () => moreHandler(context), + child: Row( + children: [ + DidvanText( + list.more, + color: Theme.of(context).colorScheme.primary, + ), + Icon( + DidvanIcons.angle_left_light, + color: Theme.of(context).colorScheme.primary, + ) + ], + ), + ) + ], + ), + ), + CarouselSlider.builder( + itemCount: list.contents.length, + itemBuilder: (context, index, realIndex) => DidvanCard( + margin: const EdgeInsets.only(left: 8), + padding: EdgeInsets.zero, + child: Column( + children: [ + SkeletonImage( + imageUrl: list.contents[index].image, + height: MediaQuery.of(context).size.height / 6, + width: double.infinity, + ), + Container( + width: double.infinity, + padding: + const EdgeInsets.symmetric(horizontal: 12, vertical: 8), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + DidvanText( + list.contents[index].title, + style: Theme.of(context).textTheme.bodyLarge, + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + Row( + children: [ + const Icon( + DidvanIcons.puzzle_light, + size: 16, + ), + ...list.contents[index].subtitles.map( + (e) => Padding( + padding: const EdgeInsets.symmetric(vertical: 4), + child: DidvanText( + e, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: Theme.of(context).textTheme.bodySmall, + ), + ), + ), + ], + ) + ], + ), + ), + ], + ), + ), + options: CarouselOptions( + autoPlay: true, + padEnds: false, + viewportFraction: 0.7, + ), + ), + ], + ); + } +} diff --git a/lib/views/home/home/home_page_state.dart b/lib/views/home/home/home_page_state.dart new file mode 100644 index 0000000..544cb0b --- /dev/null +++ b/lib/views/home/home/home_page_state.dart @@ -0,0 +1,19 @@ +import 'package:didvan/models/enums.dart'; +import 'package:didvan/models/home_page_content/home_page_content.dart'; +import 'package:didvan/providers/core.dart'; +import 'package:didvan/services/network/request.dart'; +import 'package:didvan/services/network/request_helper.dart'; + +class HomePageState extends CoreProvier { + late final HomePageContent content; + Future getMainPageContent() async { + final service = RequestService(RequestHelper.mainPageContent); + await service.httpGet(); + if (service.isSuccess) { + content = HomePageContent.fromJson(service.result); + appState = AppState.idle; + return; + } + appState = AppState.failed; + } +} diff --git a/lib/views/home/settings/settings.dart b/lib/views/home/settings/settings.dart deleted file mode 100644 index 24f7813..0000000 --- a/lib/views/home/settings/settings.dart +++ /dev/null @@ -1,139 +0,0 @@ -import 'package:didvan/config/theme_data.dart'; -import 'package:didvan/constants/app_icons.dart'; -import 'package:didvan/providers/theme.dart'; -import 'package:didvan/providers/user.dart'; -import 'package:didvan/routes/routes.dart'; -import 'package:didvan/services/storage/storage.dart'; -import 'package:didvan/views/home/widgets/logo_app_bar.dart'; -import 'package:didvan/views/home/widgets/menu_item.dart'; -import 'package:didvan/views/widgets/didvan/badge.dart'; -import 'package:didvan/views/widgets/didvan/card.dart'; -import 'package:didvan/views/widgets/didvan/divider.dart'; -import 'package:didvan/views/widgets/didvan/text.dart'; -import 'package:didvan/views/widgets/item_title.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -import 'package:url_launcher/url_launcher.dart'; - -class Settings extends StatelessWidget { - const Settings({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SingleChildScrollView( - padding: const EdgeInsets.all(16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Consumer( - builder: (context, themeProvider, child) => LogoAppBar( - key: UniqueKey(), - ), - ), - const SizedBox(height: 16), - DidvanCard( - child: Column( - children: [ - Consumer( - child: Icon( - DidvanIcons.angle_left_regular, - size: 18, - color: Theme.of(context).colorScheme.title, - ), - builder: (context, state, child) => MenuOption( - title: 'پیام‌ها', - icon: DidvanIcons.message_regular, - onTap: () => - Navigator.of(context).pushNamed(Routes.directList), - trailing: Row( - children: [ - if (state.unreadMessageCount != 0) - DidvanBadge( - text: state.unreadMessageCount.toString(), - ), - child!, - ], - ), - ), - ), - const DidvanDivider(), - MenuOption( - title: 'ویرایش پروفایل', - icon: DidvanIcons.user_edit_regular, - suffix: context.watch().user.fullName, - onTap: () => Navigator.of(context).pushNamed(Routes.profile), - ), - const DidvanDivider(), - MenuOption( - title: 'تنظیمات', - icon: DidvanIcons.setting_regular, - onTap: () => - Navigator.of(context).pushNamed(Routes.generalSettings), - ), - const DidvanDivider(), - MenuOption( - title: 'نشان شده‌ها', - icon: DidvanIcons.bookmark_regular, - onTap: () => - Navigator.of(context).pushNamed(Routes.bookmarks), - ), - const DidvanDivider(), - MenuOption( - title: 'خروج از حساب کاربری', - icon: DidvanIcons.sign_out_regular, - color: Theme.of(context).colorScheme.secondary, - onTap: () async { - StorageService.delete(key: 'token'); - Navigator.of(context).pushNamedAndRemoveUntil( - Routes.splash, - (_) => false, - ); - }, - ), - ], - ), - ), - const ItemTitle( - title: 'درباره ما', - ), - DidvanCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - MenuOption( - icon: DidvanIcons.info_circle_regular, - title: 'معرفی دیدوان', - onTap: () => launchUrl(Uri.parse('https://didvan.app/#info')), - ), - const DidvanDivider(), - MenuOption( - icon: DidvanIcons.support_regular, - title: 'پیام به پشتیبانی', - onTap: () { - Navigator.of(context).pushNamed( - Routes.direct, - arguments: {'type': 'پشتیبانی اپلیکیشن'}, - ); - }, - ), - const DidvanDivider(), - MenuOption( - icon: DidvanIcons.alert_regular, - title: 'حریم خصوصی', - onTap: () => launchUrl( - Uri.parse('https://didvan.app/termsOfUse.html#privacy'), - ), - ), - ], - ), - ), - const SizedBox(height: 16), - DidvanText( - 'نسخه نرم‌افزار: 2.2.5', - style: Theme.of(context).textTheme.bodySmall, - ), - ], - ), - ); - } -} diff --git a/lib/views/home/widgets/audio/audio_player_widget.dart b/lib/views/home/widgets/audio/audio_player_widget.dart index 0df1647..40fe2c6 100644 --- a/lib/views/home/widgets/audio/audio_player_widget.dart +++ b/lib/views/home/widgets/audio/audio_player_widget.dart @@ -10,8 +10,8 @@ import 'package:didvan/models/studio_details_data.dart'; import 'package:didvan/models/view/action_sheet_data.dart'; import 'package:didvan/services/media/media.dart'; import 'package:didvan/utils/action_sheet.dart'; -import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart'; -import 'package:didvan/views/home/studio/studio_state.dart'; +import 'package:didvan/views/podcasts/studio_details/studio_details_state.dart'; +import 'package:didvan/views/podcasts/podcasts_state.dart'; import 'package:didvan/views/home/widgets/audio/audio_slider.dart'; import 'package:didvan/views/home/widgets/bookmark_button.dart'; import 'package:didvan/views/widgets/didvan/button.dart'; @@ -184,7 +184,7 @@ class AudioPlayerWidget extends StatelessWidget { color: Theme.of(context).colorScheme.title, value: podcast.marked, onMarkChanged: (value) => context - .read() + .read() .changeMark(podcast.id, value, true), ), ), diff --git a/lib/views/home/widgets/logo_app_bar.dart b/lib/views/home/widgets/logo_app_bar.dart index 358f7a5..2dd59b4 100644 --- a/lib/views/home/widgets/logo_app_bar.dart +++ b/lib/views/home/widgets/logo_app_bar.dart @@ -1,7 +1,10 @@ import 'package:didvan/config/theme_data.dart'; +import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/constants/assets.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/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'; @@ -9,25 +12,67 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:url_launcher/url_launcher_string.dart'; -class LogoAppBar extends StatelessWidget { - final String? type; - const LogoAppBar({Key? key, this.type}) : super(key: key); +class LogoAppBar extends StatelessWidget implements PreferredSizeWidget { + const LogoAppBar({Key? key}) : super(key: key); + + @override + Size get preferredSize => const Size(double.infinity, 144); @override Widget build(BuildContext context) { 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: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + child: Column( children: [ - DidvanHorizontalLogo(type: type), - DidvanIconButton( - icon: Icons.menu, - size: 32, - onPressed: () => _handleMenuOpen(context), + 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, + ), + DidvanIconButton( + icon: DidvanIcons.notification_light, + size: 32, + onPressed: () => _handleMenuOpen(context), + ), + ], + ), + ], + ), + const SizedBox(height: 16), + SearchField( + title: 'دیدوان', + onChanged: (_) {}, + focusNode: FocusNode(), + onFilterButtonPressed: () => _handleMenuOpen(context), + isFiltered: false, ), ], ), @@ -122,9 +167,11 @@ class _BottomSheetItem extends StatelessWidget { children: [ SvgPicture.asset( icon, - color: enabled - ? Theme.of(context).colorScheme.title - : Theme.of(context).colorScheme.disabledText, + theme: SvgTheme( + currentColor: enabled + ? Theme.of(context).colorScheme.title + : Theme.of(context).colorScheme.disabledText, + ), ), const SizedBox(width: 8), DidvanText( diff --git a/lib/views/home/widgets/overview/multitype.dart b/lib/views/home/widgets/overview/multitype.dart index 2713cfb..453f135 100644 --- a/lib/views/home/widgets/overview/multitype.dart +++ b/lib/views/home/widgets/overview/multitype.dart @@ -6,7 +6,7 @@ import 'package:didvan/models/requests/radar.dart'; import 'package:didvan/models/requests/studio.dart'; import 'package:didvan/routes/routes.dart'; import 'package:didvan/utils/date_time.dart'; -import 'package:didvan/views/home/studio/studio_details/studio_details_state.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/shimmer_placeholder.dart'; diff --git a/lib/views/home/widgets/overview/podcast.dart b/lib/views/home/widgets/overview/podcast.dart index 1331a4b..7890e7e 100644 --- a/lib/views/home/widgets/overview/podcast.dart +++ b/lib/views/home/widgets/overview/podcast.dart @@ -5,7 +5,7 @@ import 'package:didvan/models/overview_data.dart'; import 'package:didvan/models/requests/studio.dart'; import 'package:didvan/providers/media.dart'; import 'package:didvan/utils/date_time.dart'; -import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart'; +import 'package:didvan/views/podcasts/studio_details/studio_details_state.dart'; import 'package:didvan/views/home/widgets/bookmark_button.dart'; import 'package:didvan/views/home/widgets/duration_widget.dart'; import 'package:didvan/views/widgets/didvan/card.dart'; diff --git a/lib/views/home/widgets/search_field.dart b/lib/views/home/widgets/search_field.dart index 691e4c6..1643ae8 100644 --- a/lib/views/home/widgets/search_field.dart +++ b/lib/views/home/widgets/search_field.dart @@ -51,6 +51,54 @@ class _SearchFieldState extends State { keyboardType: TextInputType.text, textInputAction: TextInputAction.search, decoration: InputDecoration( + suffixIcon: widget.onFilterButtonPressed != null + ? SizedBox( + width: 48, + child: Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: const EdgeInsets.only(left: 8), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + margin: const EdgeInsets.only(left: 4), + height: 24, + width: 1, + color: Theme.of(context).colorScheme.border, + ), + Stack( + children: [ + DidvanIconButton( + onPressed: + widget.onFilterButtonPressed!, + icon: widget.isFiltered! + ? DidvanIcons.filter_solid + : DidvanIcons.filter_regular, + size: 24, + gestureSize: 24, + ), + if (widget.isFiltered!) + Positioned( + child: Container( + width: 10, + height: 10, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Theme.of(context) + .colorScheme + .secondary, + ), + ), + ), + ], + ), + ], + ), + ), + ), + ) + : null, focusedBorder: OutlineInputBorder( borderRadius: const BorderRadius.all( Radius.circular(4), @@ -86,31 +134,6 @@ class _SearchFieldState extends State { ), ), ), - if (widget.onFilterButtonPressed != null) const SizedBox(width: 8), - if (widget.onFilterButtonPressed != null) - Stack( - children: [ - DidvanIconButton( - onPressed: widget.onFilterButtonPressed!, - icon: widget.isFiltered! - ? DidvanIcons.filter_solid - : DidvanIcons.filter_regular, - size: 32, - gestureSize: 32, - ), - if (widget.isFiltered!) - Positioned( - child: Container( - width: 10, - height: 10, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: Theme.of(context).colorScheme.secondary, - ), - ), - ), - ], - ), ], ), ); diff --git a/lib/views/home/studio/studio.dart b/lib/views/podcasts/podcasts.dart similarity index 93% rename from lib/views/home/studio/studio.dart rename to lib/views/podcasts/podcasts.dart index 7e13e10..cb8d888 100644 --- a/lib/views/home/studio/studio.dart +++ b/lib/views/podcasts/podcasts.dart @@ -6,9 +6,9 @@ import 'package:didvan/models/enums.dart'; import 'package:didvan/models/requests/studio.dart'; import 'package:didvan/models/view/action_sheet_data.dart'; import 'package:didvan/utils/action_sheet.dart'; -import 'package:didvan/views/home/studio/studio_state.dart'; -import 'package:didvan/views/home/studio/widgets/slider.dart'; -import 'package:didvan/views/home/studio/widgets/tab_bar.dart'; +import 'package:didvan/views/podcasts/podcasts_state.dart'; +import 'package:didvan/views/podcasts/widgets/slider.dart'; +import 'package:didvan/views/podcasts/widgets/tab_bar.dart'; import 'package:didvan/views/home/widgets/date_picker_button.dart'; import 'package:didvan/views/home/widgets/logo_app_bar.dart'; import 'package:didvan/views/home/widgets/overview/podcast.dart'; @@ -24,26 +24,26 @@ import 'package:didvan/views/widgets/state_handlers/sliver_state_handler.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -class Studio extends StatefulWidget { - const Studio({Key? key}) : super(key: key); +class Podcasts extends StatefulWidget { + const Podcasts({Key? key}) : super(key: key); @override - State createState() => _StudioState(); + State createState() => _PodcastsState(); } -class _StudioState extends State { +class _PodcastsState extends State { final _focusNode = FocusNode(); Timer? _timer; @override void initState() { - context.read().init(); + context.read().init(); super.initState(); } @override Widget build(BuildContext context) { - return Consumer( + return Consumer( builder: (context, state, child) => CustomScrollView( slivers: [ const SliverToBoxAdapter(child: LogoAppBar()), @@ -101,7 +101,7 @@ class _StudioState extends State { ), ), ), - SliverStateHandler( + SliverStateHandler( state: state, itemPadding: const EdgeInsets.only( bottom: 8, @@ -149,7 +149,7 @@ class _StudioState extends State { } void _onChanged(String value) { - final state = context.read(); + final state = context.read(); if (value.length < 3 && value.isNotEmpty || state.lastSearch == value) { return; } @@ -161,7 +161,7 @@ class _StudioState extends State { } void _showSortDialog() { - final state = context.read(); + final state = context.read(); ActionSheetUtils.showBottomSheet( data: ActionSheetData( content: StatefulBuilder( @@ -211,7 +211,7 @@ class _StudioState extends State { } Future _showFilterBottomSheet() async { - final state = context.read(); + final state = context.read(); await ActionSheetUtils.showBottomSheet( data: ActionSheetData( title: 'فیلتر جستجو', diff --git a/lib/views/home/studio/studio_state.dart b/lib/views/podcasts/podcasts_state.dart similarity index 98% rename from lib/views/home/studio/studio_state.dart rename to lib/views/podcasts/podcasts_state.dart index 3d2c643..2512646 100644 --- a/lib/views/home/studio/studio_state.dart +++ b/lib/views/podcasts/podcasts_state.dart @@ -9,7 +9,7 @@ import 'package:didvan/services/app_initalizer.dart'; import 'package:didvan/services/network/request.dart'; import 'package:didvan/services/network/request_helper.dart'; -class StudioState extends CoreProvier { +class PodcastsState extends CoreProvier { final List studios = []; final List sliders = []; diff --git a/lib/views/home/studio/studio_details/studio_details.mobile.dart b/lib/views/podcasts/studio_details/studio_details.mobile.dart similarity index 96% rename from lib/views/home/studio/studio_details/studio_details.mobile.dart rename to lib/views/podcasts/studio_details/studio_details.mobile.dart index deb7a97..a7f3c2c 100644 --- a/lib/views/home/studio/studio_details/studio_details.mobile.dart +++ b/lib/views/podcasts/studio_details/studio_details.mobile.dart @@ -3,8 +3,8 @@ import 'package:better_player/better_player.dart'; import 'package:didvan/models/view/app_bar_data.dart'; import 'package:didvan/services/media/media.dart'; -import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart'; -import 'package:didvan/views/home/studio/studio_details/widgets/studio_details_widget.dart'; +import 'package:didvan/views/podcasts/studio_details/studio_details_state.dart'; +import 'package:didvan/views/podcasts/studio_details/widgets/studio_details_widget.dart'; import 'package:didvan/views/home/widgets/bookmark_button.dart'; import 'package:didvan/views/widgets/didvan/app_bar.dart'; import 'package:didvan/views/widgets/state_handlers/state_handler.dart'; diff --git a/lib/views/home/studio/studio_details/studio_details.web.dart b/lib/views/podcasts/studio_details/studio_details.web.dart similarity index 95% rename from lib/views/home/studio/studio_details/studio_details.web.dart rename to lib/views/podcasts/studio_details/studio_details.web.dart index 92786ff..90e56ed 100644 --- a/lib/views/home/studio/studio_details/studio_details.web.dart +++ b/lib/views/podcasts/studio_details/studio_details.web.dart @@ -2,8 +2,8 @@ import 'dart:ui' as ui; import 'package:didvan/models/view/app_bar_data.dart'; import 'package:didvan/services/media/media.dart'; -import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart'; -import 'package:didvan/views/home/studio/studio_details/widgets/studio_details_widget.dart'; +import 'package:didvan/views/podcasts/studio_details/studio_details_state.dart'; +import 'package:didvan/views/podcasts/studio_details/widgets/studio_details_widget.dart'; import 'package:didvan/views/home/widgets/bookmark_button.dart'; import 'package:didvan/views/widgets/didvan/app_bar.dart'; import 'package:didvan/views/widgets/state_handlers/state_handler.dart'; diff --git a/lib/views/home/studio/studio_details/studio_details_state.dart b/lib/views/podcasts/studio_details/studio_details_state.dart similarity index 100% rename from lib/views/home/studio/studio_details/studio_details_state.dart rename to lib/views/podcasts/studio_details/studio_details_state.dart diff --git a/lib/views/home/studio/studio_details/widgets/details_tab_bar.dart b/lib/views/podcasts/studio_details/widgets/details_tab_bar.dart similarity index 97% rename from lib/views/home/studio/studio_details/widgets/details_tab_bar.dart rename to lib/views/podcasts/studio_details/widgets/details_tab_bar.dart index b257817..0383812 100644 --- a/lib/views/home/studio/studio_details/widgets/details_tab_bar.dart +++ b/lib/views/podcasts/studio_details/widgets/details_tab_bar.dart @@ -1,7 +1,7 @@ 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/studio/studio_details/studio_details_state.dart'; +import 'package:didvan/views/podcasts/studio_details/studio_details_state.dart'; import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; diff --git a/lib/views/home/studio/studio_details/widgets/studio_details_widget.dart b/lib/views/podcasts/studio_details/widgets/studio_details_widget.dart similarity index 98% rename from lib/views/home/studio/studio_details/widgets/studio_details_widget.dart rename to lib/views/podcasts/studio_details/widgets/studio_details_widget.dart index 28372e1..aa7e09f 100644 --- a/lib/views/home/studio/studio_details/widgets/studio_details_widget.dart +++ b/lib/views/podcasts/studio_details/widgets/studio_details_widget.dart @@ -6,8 +6,8 @@ import 'package:didvan/models/enums.dart'; import 'package:didvan/models/studio_details_data.dart'; import 'package:didvan/views/home/comments/comments.dart'; import 'package:didvan/views/home/comments/comments_state.dart'; -import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart'; -import 'package:didvan/views/home/studio/studio_details/widgets/details_tab_bar.dart'; +import 'package:didvan/views/podcasts/studio_details/studio_details_state.dart'; +import 'package:didvan/views/podcasts/studio_details/widgets/details_tab_bar.dart'; import 'package:didvan/views/home/widgets/overview/multitype.dart'; import 'package:didvan/views/home/widgets/tag_item.dart'; import 'package:didvan/views/widgets/didvan/text.dart'; diff --git a/lib/views/home/studio/widgets/slider.dart b/lib/views/podcasts/widgets/slider.dart similarity index 97% rename from lib/views/home/studio/widgets/slider.dart rename to lib/views/podcasts/widgets/slider.dart index 783f891..71d08fe 100644 --- a/lib/views/home/studio/widgets/slider.dart +++ b/lib/views/podcasts/widgets/slider.dart @@ -5,8 +5,8 @@ import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/models/enums.dart'; import 'package:didvan/models/requests/studio.dart'; import 'package:didvan/routes/routes.dart'; -import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart'; -import 'package:didvan/views/home/studio/studio_state.dart'; +import 'package:didvan/views/podcasts/studio_details/studio_details_state.dart'; +import 'package:didvan/views/podcasts/podcasts_state.dart'; import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:didvan/views/widgets/shimmer_placeholder.dart'; import 'package:didvan/views/widgets/skeleton_image.dart'; @@ -25,7 +25,7 @@ class _StudioSliderState extends State { @override Widget build(BuildContext context) { - final state = context.watch(); + final state = context.watch(); return Column( children: [ CarouselSlider( diff --git a/lib/views/home/studio/widgets/tab_bar.dart b/lib/views/podcasts/widgets/tab_bar.dart similarity index 96% rename from lib/views/home/studio/widgets/tab_bar.dart rename to lib/views/podcasts/widgets/tab_bar.dart index 849f348..c210091 100644 --- a/lib/views/home/studio/widgets/tab_bar.dart +++ b/lib/views/podcasts/widgets/tab_bar.dart @@ -1,7 +1,7 @@ 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/studio/studio_state.dart'; +import 'package:didvan/views/podcasts/podcasts_state.dart'; import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -13,7 +13,7 @@ class StudioTabBar extends StatelessWidget { @override Widget build(BuildContext context) { - final state = context.watch(); + final state = context.watch(); return AnimatedContainer( duration: DesignConfig.lowAnimationDuration, margin: const EdgeInsets.symmetric(horizontal: 16), diff --git a/lib/views/home/settings/bookmarks/bookmark_state.dart b/lib/views/profile/bookmarks/bookmark_state.dart similarity index 100% rename from lib/views/home/settings/bookmarks/bookmark_state.dart rename to lib/views/profile/bookmarks/bookmark_state.dart diff --git a/lib/views/home/settings/bookmarks/bookmarks.dart b/lib/views/profile/bookmarks/bookmarks.dart similarity index 98% rename from lib/views/home/settings/bookmarks/bookmarks.dart rename to lib/views/profile/bookmarks/bookmarks.dart index 27289e9..f904301 100644 --- a/lib/views/home/settings/bookmarks/bookmarks.dart +++ b/lib/views/profile/bookmarks/bookmarks.dart @@ -4,7 +4,7 @@ import 'package:didvan/config/design_config.dart'; import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/models/view/app_bar_data.dart'; import 'package:didvan/routes/routes.dart'; -import 'package:didvan/views/home/settings/bookmarks/bookmark_state.dart'; +import 'package:didvan/views/profile/bookmarks/bookmark_state.dart'; import 'package:didvan/views/home/widgets/menu_item.dart'; import 'package:didvan/views/home/widgets/overview/multitype.dart'; import 'package:didvan/views/home/widgets/search_field.dart'; diff --git a/lib/views/home/settings/bookmarks/filtered_bookmark/filtered_bookmark.dart b/lib/views/profile/bookmarks/filtered_bookmark/filtered_bookmark.dart similarity index 97% rename from lib/views/home/settings/bookmarks/filtered_bookmark/filtered_bookmark.dart rename to lib/views/profile/bookmarks/filtered_bookmark/filtered_bookmark.dart index 7a78de1..539341c 100644 --- a/lib/views/home/settings/bookmarks/filtered_bookmark/filtered_bookmark.dart +++ b/lib/views/profile/bookmarks/filtered_bookmark/filtered_bookmark.dart @@ -1,6 +1,6 @@ import 'package:didvan/models/requests/studio.dart'; import 'package:didvan/models/view/app_bar_data.dart'; -import 'package:didvan/views/home/settings/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart'; +import 'package:didvan/views/profile/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart'; import 'package:didvan/views/home/widgets/overview/news.dart'; import 'package:didvan/views/home/widgets/overview/podcast.dart'; import 'package:didvan/views/home/widgets/overview/radar.dart'; diff --git a/lib/views/home/settings/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart b/lib/views/profile/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart similarity index 100% rename from lib/views/home/settings/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart rename to lib/views/profile/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart diff --git a/lib/views/home/settings/direct_list/direct_list.dart b/lib/views/profile/direct_list/direct_list.dart similarity index 95% rename from lib/views/home/settings/direct_list/direct_list.dart rename to lib/views/profile/direct_list/direct_list.dart index 30647e2..4b2a81b 100644 --- a/lib/views/home/settings/direct_list/direct_list.dart +++ b/lib/views/profile/direct_list/direct_list.dart @@ -1,7 +1,7 @@ import 'package:didvan/constants/assets.dart'; import 'package:didvan/models/view/app_bar_data.dart'; -import 'package:didvan/views/home/settings/direct_list/direct_list_state.dart'; -import 'package:didvan/views/home/settings/direct_list/widgets/direct_item.dart'; +import 'package:didvan/views/profile/direct_list/direct_list_state.dart'; +import 'package:didvan/views/profile/direct_list/widgets/direct_item.dart'; import 'package:didvan/views/widgets/didvan/badge.dart'; import 'package:didvan/views/widgets/didvan/divider.dart'; import 'package:didvan/views/widgets/didvan/scaffold.dart'; diff --git a/lib/views/home/settings/direct_list/direct_list_state.dart b/lib/views/profile/direct_list/direct_list_state.dart similarity index 100% rename from lib/views/home/settings/direct_list/direct_list_state.dart rename to lib/views/profile/direct_list/direct_list_state.dart diff --git a/lib/views/home/settings/direct_list/widgets/direct_item.dart b/lib/views/profile/direct_list/widgets/direct_item.dart similarity index 97% rename from lib/views/home/settings/direct_list/widgets/direct_item.dart rename to lib/views/profile/direct_list/widgets/direct_item.dart index 4b15423..abd622b 100644 --- a/lib/views/home/settings/direct_list/widgets/direct_item.dart +++ b/lib/views/profile/direct_list/widgets/direct_item.dart @@ -4,7 +4,7 @@ import 'package:didvan/models/chat_room/chat_room.dart'; import 'package:didvan/providers/user.dart'; import 'package:didvan/routes/routes.dart'; import 'package:didvan/utils/date_time.dart'; -import 'package:didvan/views/home/settings/direct_list/direct_list_state.dart'; +import 'package:didvan/views/profile/direct_list/direct_list_state.dart'; import 'package:didvan/views/widgets/didvan/badge.dart'; import 'package:didvan/views/widgets/didvan/divider.dart'; import 'package:didvan/views/widgets/didvan/text.dart'; diff --git a/lib/views/home/settings/profile/profile.dart b/lib/views/profile/edit_profile/edit_profile.dart similarity index 95% rename from lib/views/home/settings/profile/profile.dart rename to lib/views/profile/edit_profile/edit_profile.dart index 82f8aca..9cd52c1 100644 --- a/lib/views/home/settings/profile/profile.dart +++ b/lib/views/profile/edit_profile/edit_profile.dart @@ -4,7 +4,7 @@ import 'package:didvan/config/design_config.dart'; import 'package:didvan/models/view/app_bar_data.dart'; import 'package:didvan/providers/user.dart'; import 'package:didvan/routes/routes.dart'; -import 'package:didvan/views/home/settings/profile/widgets/profile_photo.dart'; +import 'package:didvan/views/profile/edit_profile/widgets/profile_photo.dart'; import 'package:didvan/views/home/widgets/menu_item.dart'; import 'package:didvan/views/widgets/animated_visibility.dart'; import 'package:didvan/views/widgets/didvan/button.dart'; @@ -16,14 +16,14 @@ import 'package:didvan/views/widgets/didvan/text_field.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -class Profile extends StatefulWidget { - const Profile({Key? key}) : super(key: key); +class EditProfile extends StatefulWidget { + const EditProfile({Key? key}) : super(key: key); @override - State createState() => _ProfileState(); + State createState() => _EditProfileState(); } -class _ProfileState extends State { +class _EditProfileState extends State { Timer? _timer; late String fullName; diff --git a/lib/views/home/settings/profile/widgets/profile_photo.dart b/lib/views/profile/edit_profile/widgets/profile_photo.dart similarity index 99% rename from lib/views/home/settings/profile/widgets/profile_photo.dart rename to lib/views/profile/edit_profile/widgets/profile_photo.dart index 5a1e01d..9be4341 100644 --- a/lib/views/home/settings/profile/widgets/profile_photo.dart +++ b/lib/views/profile/edit_profile/widgets/profile_photo.dart @@ -1,4 +1,3 @@ - import 'package:didvan/config/theme_data.dart'; import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/models/enums.dart'; diff --git a/lib/views/home/settings/general_settings/settings.dart b/lib/views/profile/general_settings/settings.dart similarity index 99% rename from lib/views/home/settings/general_settings/settings.dart rename to lib/views/profile/general_settings/settings.dart index 169b095..e33e63e 100644 --- a/lib/views/home/settings/general_settings/settings.dart +++ b/lib/views/profile/general_settings/settings.dart @@ -10,7 +10,7 @@ import 'package:didvan/models/view/app_bar_data.dart'; import 'package:didvan/providers/theme.dart'; import 'package:didvan/utils/action_sheet.dart'; import 'package:didvan/utils/date_time.dart'; -import 'package:didvan/views/home/settings/general_settings/settings_state.dart'; +import 'package:didvan/views/profile/general_settings/settings_state.dart'; import 'package:didvan/views/home/widgets/menu_item.dart'; import 'package:didvan/views/widgets/didvan/card.dart'; import 'package:didvan/views/widgets/didvan/divider.dart'; diff --git a/lib/views/home/settings/general_settings/settings_state.dart b/lib/views/profile/general_settings/settings_state.dart similarity index 100% rename from lib/views/home/settings/general_settings/settings_state.dart rename to lib/views/profile/general_settings/settings_state.dart diff --git a/lib/views/profile/profile.dart b/lib/views/profile/profile.dart new file mode 100644 index 0000000..6e7f4ce --- /dev/null +++ b/lib/views/profile/profile.dart @@ -0,0 +1,131 @@ +import 'package:didvan/config/theme_data.dart'; +import 'package:didvan/constants/app_icons.dart'; +import 'package:didvan/models/view/app_bar_data.dart'; +import 'package:didvan/providers/user.dart'; +import 'package:didvan/routes/routes.dart'; +import 'package:didvan/services/storage/storage.dart'; +import 'package:didvan/views/home/widgets/menu_item.dart'; +import 'package:didvan/views/widgets/didvan/badge.dart'; +import 'package:didvan/views/widgets/didvan/card.dart'; +import 'package:didvan/views/widgets/didvan/divider.dart'; +import 'package:didvan/views/widgets/didvan/scaffold.dart'; +import 'package:didvan/views/widgets/didvan/text.dart'; +import 'package:didvan/views/widgets/item_title.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class ProfilePage extends StatelessWidget { + const ProfilePage({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return DidvanScaffold( + appBarData: AppBarData( + title: 'تنظیمات', + ), + children: [ + DidvanCard( + child: Column( + children: [ + Consumer( + child: Icon( + DidvanIcons.angle_left_regular, + size: 18, + color: Theme.of(context).colorScheme.title, + ), + builder: (context, state, child) => MenuOption( + title: 'پیام‌ها', + icon: DidvanIcons.message_regular, + onTap: () => + Navigator.of(context).pushNamed(Routes.directList), + trailing: Row( + children: [ + if (state.unreadMessageCount != 0) + DidvanBadge( + text: state.unreadMessageCount.toString(), + ), + child!, + ], + ), + ), + ), + const DidvanDivider(), + MenuOption( + title: 'ویرایش پروفایل', + icon: DidvanIcons.user_edit_regular, + suffix: context.watch().user.fullName, + onTap: () => Navigator.of(context).pushNamed(Routes.profile), + ), + const DidvanDivider(), + MenuOption( + title: 'تنظیمات', + icon: DidvanIcons.setting_regular, + onTap: () => + Navigator.of(context).pushNamed(Routes.generalSettings), + ), + const DidvanDivider(), + MenuOption( + title: 'نشان شده‌ها', + icon: DidvanIcons.bookmark_regular, + onTap: () => Navigator.of(context).pushNamed(Routes.bookmarks), + ), + const DidvanDivider(), + MenuOption( + title: 'خروج از حساب کاربری', + icon: DidvanIcons.sign_out_regular, + color: Theme.of(context).colorScheme.secondary, + onTap: () async { + StorageService.delete(key: 'token'); + Navigator.of(context).pushNamedAndRemoveUntil( + Routes.splash, + (_) => false, + ); + }, + ), + ], + ), + ), + const ItemTitle( + title: 'درباره ما', + ), + DidvanCard( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + MenuOption( + icon: DidvanIcons.info_circle_regular, + title: 'معرفی دیدوان', + onTap: () => launchUrl(Uri.parse('https://didvan.app/#info')), + ), + const DidvanDivider(), + MenuOption( + icon: DidvanIcons.support_regular, + title: 'پیام به پشتیبانی', + onTap: () { + Navigator.of(context).pushNamed( + Routes.direct, + arguments: {'type': 'پشتیبانی اپلیکیشن'}, + ); + }, + ), + const DidvanDivider(), + MenuOption( + icon: DidvanIcons.alert_regular, + title: 'حریم خصوصی', + onTap: () => launchUrl( + Uri.parse('https://didvan.app/termsOfUse.html#privacy'), + ), + ), + ], + ), + ), + const SizedBox(height: 16), + DidvanText( + 'نسخه نرم‌افزار: 2.2.5', + style: Theme.of(context).textTheme.bodySmall, + ), + ], + ); + } +} diff --git a/lib/views/home/radar/radar.dart b/lib/views/radar/radar.dart similarity index 99% rename from lib/views/home/radar/radar.dart rename to lib/views/radar/radar.dart index c547731..1a778ce 100644 --- a/lib/views/home/radar/radar.dart +++ b/lib/views/radar/radar.dart @@ -8,7 +8,7 @@ import 'package:didvan/models/category.dart'; import 'package:didvan/models/enums.dart'; import 'package:didvan/models/requests/radar.dart'; import 'package:didvan/models/view/action_sheet_data.dart'; -import 'package:didvan/views/home/radar/radar_state.dart'; +import 'package:didvan/views/radar/radar_state.dart'; import 'package:didvan/views/home/widgets/categories_gird.dart'; import 'package:didvan/views/home/widgets/categories_list.dart'; import 'package:didvan/views/home/widgets/date_picker_button.dart'; diff --git a/lib/views/home/radar/radar_details/radar_details.dart b/lib/views/radar/radar_details/radar_details.dart similarity index 97% rename from lib/views/home/radar/radar_details/radar_details.dart rename to lib/views/radar/radar_details/radar_details.dart index 5626d3a..d31343d 100644 --- a/lib/views/home/radar/radar_details/radar_details.dart +++ b/lib/views/radar/radar_details/radar_details.dart @@ -1,5 +1,5 @@ import 'package:didvan/models/requests/radar.dart'; -import 'package:didvan/views/home/radar/radar_details/radar_details_state.dart'; +import 'package:didvan/views/radar/radar_details/radar_details_state.dart'; import 'package:didvan/views/home/widgets/floating_navigation_bar.dart'; import 'package:didvan/views/widgets/didvan/page_view.dart'; import 'package:didvan/views/widgets/state_handlers/state_handler.dart'; diff --git a/lib/views/home/radar/radar_details/radar_details_state.dart b/lib/views/radar/radar_details/radar_details_state.dart similarity index 100% rename from lib/views/home/radar/radar_details/radar_details_state.dart rename to lib/views/radar/radar_details/radar_details_state.dart diff --git a/lib/views/home/radar/radar_state.dart b/lib/views/radar/radar_state.dart similarity index 100% rename from lib/views/home/radar/radar_state.dart rename to lib/views/radar/radar_state.dart diff --git a/lib/views/widgets/didvan/app_bar.dart b/lib/views/widgets/didvan/app_bar.dart index 99627bf..163768f 100644 --- a/lib/views/widgets/didvan/app_bar.dart +++ b/lib/views/widgets/didvan/app_bar.dart @@ -4,7 +4,7 @@ import 'package:didvan/models/view/app_bar_data.dart'; import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:flutter/material.dart'; -class DidvanAppBar extends StatelessWidget { +class DidvanAppBar extends StatelessWidget implements PreferredSizeWidget { final AppBarData appBarData; final bool hasBorder; final Color? backgroundColor; @@ -15,6 +15,9 @@ class DidvanAppBar extends StatelessWidget { this.backgroundColor = Colors.transparent, }) : super(key: key); + @override + Size get preferredSize => const Size(double.infinity, kToolbarHeight); + @override Widget build(BuildContext context) { return Container( diff --git a/lib/views/widgets/didvan/bnb.dart b/lib/views/widgets/didvan/bnb.dart index d344bc2..76b6daa 100644 --- a/lib/views/widgets/didvan/bnb.dart +++ b/lib/views/widgets/didvan/bnb.dart @@ -4,13 +4,12 @@ import 'package:didvan/config/theme_data.dart'; import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/models/enums.dart'; import 'package:didvan/models/requests/radar.dart'; -import 'package:didvan/providers/user.dart'; import 'package:didvan/routes/routes.dart'; import 'package:didvan/services/media/media.dart'; import 'package:didvan/utils/action_sheet.dart'; -import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart'; -import 'package:didvan/views/home/studio/studio_details/widgets/studio_details_widget.dart'; -import 'package:didvan/views/home/studio/studio_state.dart'; +import 'package:didvan/views/podcasts/studio_details/studio_details_state.dart'; +import 'package:didvan/views/podcasts/studio_details/widgets/studio_details_widget.dart'; +import 'package:didvan/views/podcasts/podcasts_state.dart'; import 'package:didvan/views/home/widgets/audio/audio_player_widget.dart'; import 'package:didvan/views/home/widgets/audio/audio_slider.dart'; import 'package:didvan/views/widgets/didvan/icon_button.dart'; @@ -58,41 +57,32 @@ class DidvanBNB extends StatelessWidget { children: [ _NavBarItem( isSelected: currentTabIndex == 0, - title: 'اخبار', - selectedIcon: DidvanIcons.news_solid, - unselectedIcon: DidvanIcons.news_light, + title: 'خانه', + selectedIcon: Icons.home, + unselectedIcon: Icons.home_outlined, onTap: () => onTabChanged(0), ), _NavBarItem( isSelected: currentTabIndex == 1, - title: 'آمار', - selectedIcon: DidvanIcons.chart_solid, - unselectedIcon: DidvanIcons.chart_light, + title: 'آمار و اطلاعات', + selectedIcon: DidvanIcons.news_solid, + unselectedIcon: DidvanIcons.news_light, onTap: () => onTabChanged(1), ), _NavBarItem( isSelected: currentTabIndex == 2, - title: 'رادار', - selectedIcon: DidvanIcons.radar_solid, - unselectedIcon: DidvanIcons.radar_light, + title: 'دسته‌بندی', + selectedIcon: Icons.window, + unselectedIcon: Icons.window_outlined, onTap: () => onTabChanged(2), ), _NavBarItem( isSelected: currentTabIndex == 3, - title: 'استودیو', - selectedIcon: DidvanIcons.play_circle_solid, - unselectedIcon: DidvanIcons.play_circle_light, + title: 'رصدهای من', + selectedIcon: DidvanIcons.radar_solid, + unselectedIcon: DidvanIcons.radar_light, onTap: () => onTabChanged(3), ), - _NavBarItem( - hasBadge: - context.watch().unreadMessageCount != 0, - isSelected: currentTabIndex == 4, - title: 'تنظیمات', - selectedIcon: DidvanIcons.setting_solid, - unselectedIcon: DidvanIcons.setting_light, - onTap: () => onTabChanged(4), - ), ], ), ), @@ -292,7 +282,7 @@ class _PlayerNavBar extends StatelessWidget { fetchOnly: true, ); } - final state = context.read(); + final state = context.read(); showModalBottomSheet( constraints: BoxConstraints( maxWidth: ActionSheetUtils.mediaQueryData.size.width, @@ -300,7 +290,7 @@ class _PlayerNavBar extends StatelessWidget { backgroundColor: Colors.transparent, context: context, isScrollControlled: true, - builder: (context) => ChangeNotifierProvider.value( + builder: (context) => ChangeNotifierProvider.value( value: state, child: Consumer( builder: (context, state, child) => MediaQuery( @@ -361,7 +351,7 @@ class _PlayerNavBar extends StatelessWidget { ) : StudioDetailsWidget( onMarkChanged: (id, value) => context - .read() + .read() .changeMark(id, value, true), ), ), diff --git a/lib/views/widgets/logos/didvan_vertical_logo.dart b/lib/views/widgets/logos/didvan_vertical_logo.dart index 875cb81..01b8f9e 100644 --- a/lib/views/widgets/logos/didvan_vertical_logo.dart +++ b/lib/views/widgets/logos/didvan_vertical_logo.dart @@ -12,7 +12,7 @@ class DidvanHorizontalLogo extends StatelessWidget { padding: EdgeInsets.only(bottom: type == 'studio' ? 0 : 4), child: SvgPicture.asset( _asset, - height: 76, + height: 48, ), ); } diff --git a/pubspec.lock b/pubspec.lock index 9f9724f..5bd1bfc 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: "1a5e13736d59235ce0139621b4bbe29bc89839e202409081bc667eb3cd20674c" + sha256: d84d98f1992976775f83083523a34c5d22fea191eec3abb2bd09537fb623c2e0 url: "https://pub.dev" source: hosted - version: "1.3.5" + version: "1.3.7" args: dependency: transitive description: @@ -70,34 +70,34 @@ packages: dependency: "direct main" description: name: bot_toast - sha256: db6950851aab00ef04b386eb3c76c83739eaffcb6b80d0dc42a675ef7584623b + sha256: "6b93030a99a98335b8827ecd83021e92e885ffc61d261d3825ffdecdd17f3bdf" url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "4.1.3" cached_network_image: dependency: "direct main" description: name: cached_network_image - sha256: fd3d0dc1d451f9a252b32d95d3f0c3c487bc41a75eba2e6097cb0b9c71491b15 + sha256: f98972704692ba679db144261172a8e20feb145636c617af0eb4022132a6797f url: "https://pub.dev" source: hosted - version: "3.2.3" + version: "3.3.0" cached_network_image_platform_interface: dependency: transitive description: name: cached_network_image_platform_interface - sha256: bb2b8403b4ccdc60ef5f25c70dead1f3d32d24b9d6117cfc087f496b178594a7 + sha256: "56aa42a7a01e3c9db8456d9f3f999931f1e05535b5a424271e9a38cabf066613" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "3.0.0" cached_network_image_web: dependency: transitive description: name: cached_network_image_web - sha256: b8eb814ebfcb4dea049680f8c1ffb2df399e4d03bf7a352c775e26fa06e02fa0 + sha256: "759b9a9f8f6ccbb66c185df805fac107f05730b1dab9c64626d1008cca532257" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.1.0" carousel_slider: dependency: "direct main" description: @@ -230,10 +230,10 @@ packages: dependency: transitive description: name: file_selector_macos - sha256: "182c3f8350cee659f7b115e956047ee3dc672a96665883a545e81581b9a82c72" + sha256: b15c3da8bd4908b9918111fa486903f5808e388b8d1c559949f584725a6594d6 url: "https://pub.dev" source: hosted - version: "0.9.3+2" + version: "0.9.3+3" file_selector_platform_interface: dependency: transitive description: @@ -254,10 +254,10 @@ packages: dependency: "direct main" description: name: firebase_core - sha256: c78132175edda4bc532a71e01a32964e4b4fcf53de7853a422d96dac3725f389 + sha256: "95580fa07c8ca3072a2bb1fecd792616a33f8683477d25b7d29d3a6a399e6ece" url: "https://pub.dev" source: hosted - version: "2.15.1" + version: "2.17.0" firebase_core_platform_interface: dependency: transitive description: @@ -270,34 +270,34 @@ packages: dependency: transitive description: name: firebase_core_web - sha256: "4cf4d2161530332ddc3c562f19823fb897ff37a9a774090d28df99f47370e973" + sha256: e8c408923cd3a25bd342c576a114f2126769cd1a57106a4edeaa67ea4a84e962 url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "2.8.0" firebase_messaging: dependency: "direct main" description: name: firebase_messaging - sha256: "6c1a2a047d6f165b7c5f947467ac5138731a2af82c7af1c12d691dbb834f6b73" + sha256: "67f9d7c87457e71ad78ee81e332f232b8a24f7d5e338f8c958fa7d6e9e0e3636" url: "https://pub.dev" source: hosted - version: "14.6.7" + version: "14.6.9" firebase_messaging_platform_interface: dependency: transitive description: name: firebase_messaging_platform_interface - sha256: bcba58d28f8cda607a323240c6d314c2c62b62ebfbb0f2d704ebefef07b52b5f + sha256: "8c7ced3201886ad7ba37f344c1468ccfc08abb3023922e0e5a016eaf38abb96c" url: "https://pub.dev" source: hosted - version: "4.5.6" + version: "4.5.8" firebase_messaging_web: dependency: transitive description: name: firebase_messaging_web - sha256: "962d09ec9dfa486cbbc218258ad41e8ec7997a2eba46919049496e1cafd960c5" + sha256: b601322bdb44e2fefe4cc7b85ef0dbb7a2479d4a7653a51340821cf8d60696b5 url: "https://pub.dev" source: hosted - version: "3.5.6" + version: "3.5.8" fl_chart: dependency: "direct main" description: @@ -311,14 +311,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_blurhash: - dependency: transitive - description: - name: flutter_blurhash - sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6" - url: "https://pub.dev" - source: hosted - version: "0.7.0" flutter_cache_manager: dependency: transitive description: @@ -522,18 +514,18 @@ packages: dependency: transitive description: name: image_picker_android - sha256: d32a997bcc4ee135aebca8e272b7c517927aa65a74b9c60a81a2764ef1a0462d + sha256: "0c7b83bbe2980c8a8e36e974f055e11e51675784e13a4762889feed0f3937ff2" url: "https://pub.dev" source: hosted - version: "0.8.7+5" + version: "0.8.8+1" image_picker_for_web: dependency: transitive description: name: image_picker_for_web - sha256: "869fe8a64771b7afbc99fc433a5f7be2fea4d1cb3d7c11a48b6b579eb9c797f0" + sha256: "50bc9ae6a77eea3a8b11af5eb6c661eeb858fdd2f734c2a4fd17086922347ef7" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "3.0.1" image_picker_ios: dependency: transitive description: @@ -658,10 +650,10 @@ packages: dependency: transitive description: name: octo_image - sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143" + sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "2.0.0" path: dependency: transitive description: @@ -730,18 +722,18 @@ packages: dependency: "direct main" description: name: permission_handler - sha256: "63e5216aae014a72fe9579ccd027323395ce7a98271d9defa9d57320d001af81" + sha256: "284a66179cabdf942f838543e10413246f06424d960c92ba95c84439154fcac8" url: "https://pub.dev" source: hosted - version: "10.4.3" + version: "11.0.1" permission_handler_android: dependency: transitive description: name: permission_handler_android - sha256: d74e77a5ecd38649905db0a7d05ef16bed42ff263b9efb73ed794317c5764ec3 + sha256: ace7d15a3d1a4a0b91c041d01e5405df221edb9de9116525efc773c74e6fc790 url: "https://pub.dev" source: hosted - version: "10.3.4" + version: "11.0.5" permission_handler_apple: dependency: transitive description: @@ -754,10 +746,10 @@ packages: dependency: transitive description: name: permission_handler_platform_interface - sha256: "7c6b1500385dd1d2ca61bb89e2488ca178e274a69144d26bbd65e33eae7c02a9" + sha256: f2343e9fa9c22ae4fd92d4732755bfe452214e7189afcc097380950cf567b4b2 url: "https://pub.dev" source: hosted - version: "3.11.3" + version: "3.11.5" permission_handler_windows: dependency: transitive description: @@ -874,18 +866,18 @@ packages: dependency: "direct main" description: name: rive - sha256: b7780ebdc56320da1f02a39a18f050a6079cad60c0cb92003c0801cc4eec6673 + sha256: f2117a96a189758bc79bf7933865625c7a44a420ae537d2a8f6c492900136a71 url: "https://pub.dev" source: hosted - version: "0.11.14" + version: "0.11.17" rive_common: dependency: transitive description: name: rive_common - sha256: "1431b99c9f361234cc6fa9aee7987b20030622df25ff64343a4010f9446b275e" + sha256: e41f12917cb58e0c9376836490ebaa431e12744da0c67e19dad8d4bee9fedd46 url: "https://pub.dev" source: hosted - version: "0.2.6" + version: "0.2.7" rxdart: dependency: transitive description: @@ -991,10 +983,10 @@ packages: dependency: "direct main" description: name: universal_html - sha256: a5cc5a84188e5d3e58f3ed77fe3dd4575dc1f68aa7c89e51b5b4105b9aab3b9d + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.2.4" universal_io: dependency: transitive description: @@ -1167,34 +1159,34 @@ packages: dependency: "direct main" description: name: webview_flutter - sha256: "82f6787d5df55907aa01e49bd9644f4ed1cc82af7a8257dd9947815959d2e755" + sha256: c1ab9b81090705c6069197d9fdc1625e587b52b8d70cdde2339d177ad0dbb98e url: "https://pub.dev" source: hosted - version: "4.2.4" + version: "4.4.1" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - sha256: "0d8f5ac96a155e672129bf94c7abf625de01241d44d269dbaff083f1b4deb1aa" + sha256: b0cd33dd7d3dd8e5f664e11a19e17ba12c352647269921a3b568406b001f1dff url: "https://pub.dev" source: hosted - version: "3.9.5" + version: "3.12.0" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - sha256: "9d32a63a5ee111b37482cb3eac3379b9f0992afd27a52ee30279dbf06f41918b" + sha256: "6d9213c65f1060116757a7c473247c60f3f7f332cac33dc417c9e362a9a13e4f" url: "https://pub.dev" source: hosted - version: "2.5.1" + version: "2.6.0" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - sha256: d2f7241849582da80b79acb03bb936422412ce5c0c79fb5f6a1de5421a5aecc4 + sha256: "30b9af6bdd457b44c08748b9190d23208b5165357cc2eb57914fee1366c42974" url: "https://pub.dev" source: hosted - version: "3.7.4" + version: "3.9.1" win32: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 125d29f..02c9ae6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 2.6.2+2024 +version: 3.0.0+3000 environment: sdk: ">=2.17.0 <3.0.0" @@ -62,7 +62,7 @@ dependencies: firebase_core: ^2.3.0 webview_flutter: ^4.2.0 expandable_bottom_sheet: ^1.1.1+1 - permission_handler: ^10.2.0 + permission_handler: ^11.0.0 better_player: git: url: https://github.com/tintran-dev/betterplayer.git