backup!
This commit is contained in:
parent
c94f043f3f
commit
4e036ad2c5
|
|
@ -10,30 +10,30 @@ PODS:
|
||||||
- HLSCachingReverseProxyServer
|
- HLSCachingReverseProxyServer
|
||||||
- PINCache
|
- PINCache
|
||||||
- Cache (6.0.0)
|
- Cache (6.0.0)
|
||||||
- Firebase/CoreOnly (10.12.0):
|
- Firebase/CoreOnly (10.15.0):
|
||||||
- FirebaseCore (= 10.12.0)
|
- FirebaseCore (= 10.15.0)
|
||||||
- Firebase/Messaging (10.12.0):
|
- Firebase/Messaging (10.15.0):
|
||||||
- Firebase/CoreOnly
|
- Firebase/CoreOnly
|
||||||
- FirebaseMessaging (~> 10.12.0)
|
- FirebaseMessaging (~> 10.15.0)
|
||||||
- firebase_core (2.15.1):
|
- firebase_core (2.17.0):
|
||||||
- Firebase/CoreOnly (= 10.12.0)
|
- Firebase/CoreOnly (= 10.15.0)
|
||||||
- Flutter
|
- Flutter
|
||||||
- firebase_messaging (14.6.7):
|
- firebase_messaging (14.6.9):
|
||||||
- Firebase/Messaging (= 10.12.0)
|
- Firebase/Messaging (= 10.15.0)
|
||||||
- firebase_core
|
- firebase_core
|
||||||
- Flutter
|
- Flutter
|
||||||
- FirebaseCore (10.12.0):
|
- FirebaseCore (10.15.0):
|
||||||
- FirebaseCoreInternal (~> 10.0)
|
- FirebaseCoreInternal (~> 10.0)
|
||||||
- GoogleUtilities/Environment (~> 7.8)
|
- GoogleUtilities/Environment (~> 7.8)
|
||||||
- GoogleUtilities/Logger (~> 7.8)
|
- GoogleUtilities/Logger (~> 7.8)
|
||||||
- FirebaseCoreInternal (10.14.0):
|
- FirebaseCoreInternal (10.16.0):
|
||||||
- "GoogleUtilities/NSData+zlib (~> 7.8)"
|
- "GoogleUtilities/NSData+zlib (~> 7.8)"
|
||||||
- FirebaseInstallations (10.14.0):
|
- FirebaseInstallations (10.16.0):
|
||||||
- FirebaseCore (~> 10.0)
|
- FirebaseCore (~> 10.0)
|
||||||
- GoogleUtilities/Environment (~> 7.8)
|
- GoogleUtilities/Environment (~> 7.8)
|
||||||
- GoogleUtilities/UserDefaults (~> 7.8)
|
- GoogleUtilities/UserDefaults (~> 7.8)
|
||||||
- PromisesObjC (~> 2.1)
|
- PromisesObjC (~> 2.1)
|
||||||
- FirebaseMessaging (10.12.0):
|
- FirebaseMessaging (10.15.0):
|
||||||
- FirebaseCore (~> 10.0)
|
- FirebaseCore (~> 10.0)
|
||||||
- FirebaseInstallations (~> 10.0)
|
- FirebaseInstallations (~> 10.0)
|
||||||
- GoogleDataTransport (~> 9.2)
|
- GoogleDataTransport (~> 9.2)
|
||||||
|
|
@ -198,13 +198,13 @@ SPEC CHECKSUMS:
|
||||||
assets_audio_player_web: 19826380c44375761aa0b9053665c1e3fbc3b86b
|
assets_audio_player_web: 19826380c44375761aa0b9053665c1e3fbc3b86b
|
||||||
better_player: 2406bfe8175203c7a46fa15f9d778d73b12e1646
|
better_player: 2406bfe8175203c7a46fa15f9d778d73b12e1646
|
||||||
Cache: 4ca7e00363fca5455f26534e5607634c820ffc2d
|
Cache: 4ca7e00363fca5455f26534e5607634c820ffc2d
|
||||||
Firebase: 07150e75d142fb9399f6777fa56a187b17f833a0
|
Firebase: 66043bd4579e5b73811f96829c694c7af8d67435
|
||||||
firebase_core: 4a3246a02f828a01c74a2c26427037786d90f17f
|
firebase_core: 28e84c2a4fcf6a50ef83f47b145ded8c1fa331e4
|
||||||
firebase_messaging: 0b4f7997f491343b90d9300af54fe55c72135833
|
firebase_messaging: 91ec967913a5d144f951b3c3ac17a57796d38735
|
||||||
FirebaseCore: f86a1394906b97ac445ae49c92552a9425831bed
|
FirebaseCore: 2cec518b43635f96afe7ac3a9c513e47558abd2e
|
||||||
FirebaseCoreInternal: d558159ee6cc4b823c2296ecc193de9f6d9a5bb3
|
FirebaseCoreInternal: 26233f705cc4531236818a07ac84d20c333e505a
|
||||||
FirebaseInstallations: f672b1eda64e6381c21d424a2f680a943fd83f3b
|
FirebaseInstallations: b822f91a61f7d1ba763e5ccc9d4f2e6f2ed3b3ee
|
||||||
FirebaseMessaging: bb2c4f6422a753038fe137d90ae7c1af57251316
|
FirebaseMessaging: 0c0ae1eb722ef0c07f7801e5ded8dccd1357d6d4
|
||||||
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
|
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
|
||||||
flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be
|
flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be
|
||||||
flutter_vibrate: 9f4c2ab57008965f78969472367c329dd77eb801
|
flutter_vibrate: 9f4c2ab57008965f78969472367c329dd77eb801
|
||||||
|
|
@ -222,7 +222,7 @@ SPEC CHECKSUMS:
|
||||||
PINOperation: daa34d4aa1d8449089be7d405b9d974abc4724c6
|
PINOperation: daa34d4aa1d8449089be7d405b9d974abc4724c6
|
||||||
PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4
|
PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4
|
||||||
record: cae05d8dd3cdb1dea3511b20e5a5811a1ae00d0d
|
record: cae05d8dd3cdb1dea3511b20e5a5811a1ae00d0d
|
||||||
rive_common: 60ae7896ab40f9513974f36f015de33f70d2c5c5
|
rive_common: 8a159d68033a8b073e5853acc50f03aa486a2888
|
||||||
sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a
|
sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a
|
||||||
TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863
|
TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863
|
||||||
url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4
|
url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4
|
||||||
|
|
@ -231,4 +231,4 @@ SPEC CHECKSUMS:
|
||||||
|
|
||||||
PODFILE CHECKSUM: 2a309ea1fa3eb1d2ce822efc9e742b46b0932a95
|
PODFILE CHECKSUM: 2a309ea1fa3eb1d2ce822efc9e742b46b0932a95
|
||||||
|
|
||||||
COCOAPODS: 1.11.3
|
COCOAPODS: 1.13.0
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ class LightThemeConfig {
|
||||||
static const Color _background = Color(0xFFF8F8FA);
|
static const Color _background = Color(0xFFF8F8FA);
|
||||||
|
|
||||||
static ThemeData get themeData => ThemeData(
|
static ThemeData get themeData => ThemeData(
|
||||||
|
useMaterial3: true,
|
||||||
scaffoldBackgroundColor: _background,
|
scaffoldBackgroundColor: _background,
|
||||||
textTheme: _TextThemeData.data,
|
textTheme: _TextThemeData.data,
|
||||||
cardColor: _colorScheme.surface,
|
cardColor: _colorScheme.surface,
|
||||||
|
|
@ -19,7 +20,8 @@ class LightThemeConfig {
|
||||||
),
|
),
|
||||||
iconTheme: IconThemeData(
|
iconTheme: IconThemeData(
|
||||||
color: _colorScheme.text,
|
color: _colorScheme.text,
|
||||||
), colorScheme: _colorScheme.copyWith(background: _background),
|
),
|
||||||
|
colorScheme: _colorScheme.copyWith(background: _background),
|
||||||
);
|
);
|
||||||
|
|
||||||
static const ColorScheme _colorScheme = ColorScheme(
|
static const ColorScheme _colorScheme = ColorScheme(
|
||||||
|
|
@ -57,7 +59,8 @@ class DarkThemeConfig {
|
||||||
borderRadius: BorderRadius.circular(4),
|
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(
|
static const ColorScheme _colorScheme = ColorScheme(
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import 'package:didvan/providers/theme.dart';
|
||||||
import 'package:didvan/providers/user.dart';
|
import 'package:didvan/providers/user.dart';
|
||||||
import 'package:didvan/routes/route_generator.dart';
|
import 'package:didvan/routes/route_generator.dart';
|
||||||
import 'package:didvan/services/app_initalizer.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_core/firebase_core.dart';
|
||||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
|
|
@ -71,7 +71,10 @@ class Didvan extends StatelessWidget {
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
child: Consumer<ThemeProvider>(
|
child: Consumer<ThemeProvider>(
|
||||||
builder: (context, themeProvider, child) => MaterialApp(
|
builder: (context, themeProvider, child) => Container(
|
||||||
|
color: Theme.of(context).colorScheme.surface,
|
||||||
|
child: SafeArea(
|
||||||
|
child: MaterialApp(
|
||||||
navigatorKey: navigatorKey,
|
navigatorKey: navigatorKey,
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
title: 'Didvan',
|
title: 'Didvan',
|
||||||
|
|
@ -85,7 +88,8 @@ class Didvan extends StatelessWidget {
|
||||||
)),
|
)),
|
||||||
color: LightThemeConfig.themeData.primaryColor,
|
color: LightThemeConfig.themeData.primaryColor,
|
||||||
themeMode: themeProvider.themeMode,
|
themeMode: themeProvider.themeMode,
|
||||||
onGenerateRoute: (settings) => RouteGenerator.generateRoute(settings),
|
onGenerateRoute: (settings) =>
|
||||||
|
RouteGenerator.generateRoute(settings),
|
||||||
builder: BotToastInit(), //1. call BotToastInit
|
builder: BotToastInit(), //1. call BotToastInit
|
||||||
navigatorObservers: [BotToastNavigatorObserver()],
|
navigatorObservers: [BotToastNavigatorObserver()],
|
||||||
initialRoute: '/',
|
initialRoute: '/',
|
||||||
|
|
@ -100,6 +104,8 @@ class Didvan extends StatelessWidget {
|
||||||
locale: const Locale("fa", "IR"),
|
locale: const Locale("fa", "IR"),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
class Content {
|
||||||
|
final int? id;
|
||||||
|
final String title;
|
||||||
|
final String image;
|
||||||
|
final String link;
|
||||||
|
final bool marked;
|
||||||
|
final List<String> 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<String, dynamic> json) => Content(
|
||||||
|
id: json['id'],
|
||||||
|
title: json['title'],
|
||||||
|
image: json['image'],
|
||||||
|
link: json['link'],
|
||||||
|
marked: json['marked'],
|
||||||
|
subtitles: List<String>.from(json['subtitles']),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
import 'home_page_list.dart';
|
||||||
|
|
||||||
|
class HomePageContent {
|
||||||
|
final List<dynamic> banners;
|
||||||
|
final List<HomePageList> lists;
|
||||||
|
final int unread;
|
||||||
|
|
||||||
|
const HomePageContent(
|
||||||
|
{required this.banners, required this.lists, required this.unread});
|
||||||
|
|
||||||
|
factory HomePageContent.fromJson(Map<String, dynamic> json) {
|
||||||
|
return HomePageContent(
|
||||||
|
banners: json['banners'],
|
||||||
|
lists: List<HomePageList>.from(
|
||||||
|
json['lists'].map(
|
||||||
|
(x) => HomePageList.fromJson(x),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
unread: json['unread'],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
import 'content.dart';
|
||||||
|
|
||||||
|
class HomePageList {
|
||||||
|
final String type;
|
||||||
|
final String header;
|
||||||
|
final String more;
|
||||||
|
final String link;
|
||||||
|
final List<Content> contents;
|
||||||
|
|
||||||
|
const HomePageList({
|
||||||
|
required this.type,
|
||||||
|
required this.header,
|
||||||
|
required this.more,
|
||||||
|
required this.link,
|
||||||
|
required this.contents,
|
||||||
|
});
|
||||||
|
|
||||||
|
factory HomePageList.fromJson(Map<String, dynamic> json) => HomePageList(
|
||||||
|
type: json['type'],
|
||||||
|
header: json['header'],
|
||||||
|
more: json['more'],
|
||||||
|
link: json['link'],
|
||||||
|
contents: List<Content>.from(json['contents'].map(
|
||||||
|
(x) => Content.fromJson(x),
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
|
@ -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.dart';
|
||||||
import 'package:didvan/views/home/hashtag/hashtag_state.dart';
|
import 'package:didvan/views/home/hashtag/hashtag_state.dart';
|
||||||
import 'package:didvan/views/home/home.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/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.dart';
|
||||||
import 'package:didvan/views/home/news/news_details/news_details_state.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/news/news_state.dart';
|
||||||
import 'package:didvan/views/home/radar/radar_details/radar_details.dart';
|
import 'package:didvan/views/podcasts/podcasts.dart';
|
||||||
import 'package:didvan/views/home/radar/radar_details/radar_details_state.dart';
|
import 'package:didvan/views/profile/profile.dart';
|
||||||
import 'package:didvan/views/home/radar/radar_state.dart';
|
import 'package:didvan/views/radar/radar.dart';
|
||||||
import 'package:didvan/views/home/settings/bookmarks/bookmarks.dart';
|
import 'package:didvan/views/radar/radar_details/radar_details.dart';
|
||||||
import 'package:didvan/views/home/settings/bookmarks/bookmark_state.dart';
|
import 'package:didvan/views/radar/radar_details/radar_details_state.dart';
|
||||||
import 'package:didvan/views/home/settings/bookmarks/filtered_bookmark/filtered_bookmark.dart';
|
import 'package:didvan/views/radar/radar_state.dart';
|
||||||
import 'package:didvan/views/home/settings/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart';
|
import 'package:didvan/views/profile/bookmarks/bookmarks.dart';
|
||||||
import 'package:didvan/views/home/settings/direct_list/direct_list.dart';
|
import 'package:didvan/views/profile/bookmarks/bookmark_state.dart';
|
||||||
import 'package:didvan/views/home/settings/direct_list/direct_list_state.dart';
|
import 'package:didvan/views/profile/bookmarks/filtered_bookmark/filtered_bookmark.dart';
|
||||||
import 'package:didvan/views/home/settings/general_settings/settings.dart';
|
import 'package:didvan/views/profile/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart';
|
||||||
import 'package:didvan/views/home/settings/general_settings/settings_state.dart';
|
import 'package:didvan/views/profile/direct_list/direct_list.dart';
|
||||||
import 'package:didvan/views/home/settings/profile/profile.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.dart';
|
||||||
import 'package:didvan/views/home/statistic/statistic_details/statistic_details_state.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/statistic/statistic_state.dart';
|
||||||
import 'package:didvan/views/home/studio/studio_details/studio_details.mobile.dart'
|
import 'package:didvan/views/podcasts/studio_details/studio_details.mobile.dart'
|
||||||
if (dart.library.io) 'package:didvan/views/home/studio/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/home/studio/studio_details/studio_details.web.dart';
|
if (dart.library.html) 'package:didvan/views/podcasts/studio_details/studio_details.web.dart';
|
||||||
import 'package:didvan/views/home/studio/studio_state.dart';
|
import 'package:didvan/views/podcasts/podcasts_state.dart';
|
||||||
import 'package:didvan/views/splash/splash.dart';
|
import 'package:didvan/views/splash/splash.dart';
|
||||||
import 'package:didvan/routes/routes.dart';
|
import 'package:didvan/routes/routes.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
|
|
@ -57,14 +62,8 @@ class RouteGenerator {
|
||||||
ChangeNotifierProvider<HomeState>(
|
ChangeNotifierProvider<HomeState>(
|
||||||
create: (context) => HomeState(),
|
create: (context) => HomeState(),
|
||||||
),
|
),
|
||||||
ChangeNotifierProvider<RadarState>(
|
ChangeNotifierProvider<HomePageState>(
|
||||||
create: (context) => RadarState(),
|
create: (context) => HomePageState(),
|
||||||
),
|
|
||||||
ChangeNotifierProvider<NewsState>(
|
|
||||||
create: (context) => NewsState(),
|
|
||||||
),
|
|
||||||
ChangeNotifierProvider<StudioState>(
|
|
||||||
create: (context) => StudioState(),
|
|
||||||
),
|
),
|
||||||
ChangeNotifierProvider<StatisticState>(
|
ChangeNotifierProvider<StatisticState>(
|
||||||
create: (context) => StatisticState(),
|
create: (context) => StatisticState(),
|
||||||
|
|
@ -73,9 +72,13 @@ class RouteGenerator {
|
||||||
child: const Home(),
|
child: const Home(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
case Routes.editProfile:
|
||||||
|
return _createRoute(
|
||||||
|
const EditProfile(),
|
||||||
|
);
|
||||||
case Routes.profile:
|
case Routes.profile:
|
||||||
return _createRoute(
|
return _createRoute(
|
||||||
const Profile(),
|
const ProfilePage(),
|
||||||
);
|
);
|
||||||
case Routes.generalSettings:
|
case Routes.generalSettings:
|
||||||
return _createRoute(
|
return _createRoute(
|
||||||
|
|
@ -84,6 +87,27 @@ class RouteGenerator {
|
||||||
child: const GeneralSettings(),
|
child: const GeneralSettings(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
case Routes.podcasts:
|
||||||
|
return _createRoute(
|
||||||
|
ChangeNotifierProvider<PodcastsState>(
|
||||||
|
create: (context) => PodcastsState(),
|
||||||
|
child: const Podcasts(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
case Routes.radars:
|
||||||
|
return _createRoute(
|
||||||
|
ChangeNotifierProvider<RadarState>(
|
||||||
|
create: (context) => RadarState(),
|
||||||
|
child: const Radar(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
case Routes.news:
|
||||||
|
return _createRoute(
|
||||||
|
ChangeNotifierProvider<NewsState>(
|
||||||
|
create: (context) => NewsState(),
|
||||||
|
child: const News(),
|
||||||
|
),
|
||||||
|
);
|
||||||
case Routes.radarDetails:
|
case Routes.radarDetails:
|
||||||
return _createRoute(
|
return _createRoute(
|
||||||
ChangeNotifierProvider<RadarDetailsState>(
|
ChangeNotifierProvider<RadarDetailsState>(
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,18 @@
|
||||||
class Routes {
|
class Routes {
|
||||||
static const String splash = '/';
|
static const String splash = '/';
|
||||||
static const String home = '/home';
|
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 aboutUs = '/about-us';
|
||||||
static const String authenticaion = '/authentication';
|
static const String authenticaion = '/authentication';
|
||||||
static const String profile = '/profile';
|
static const String profile = '/profile';
|
||||||
|
static const String editProfile = '/edit-profile';
|
||||||
static const String settings = '/settings';
|
static const String settings = '/settings';
|
||||||
static const String generalSettings = '/general-settings';
|
static const String generalSettings = '/general-settings';
|
||||||
static const String radarDetails = '/radar-details';
|
static const String radarDetails = '/radar-details';
|
||||||
static const String newsDetails = '/news-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 statisticDetails = '/statistic-details';
|
||||||
static const String directList = '/direct-list';
|
static const String directList = '/direct-list';
|
||||||
static const String direct = '/direct';
|
static const String direct = '/direct';
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import 'package:didvan/routes/routes.dart';
|
||||||
import 'package:didvan/services/media/media.dart';
|
import 'package:didvan/services/media/media.dart';
|
||||||
import 'package:didvan/services/storage/storage.dart';
|
import 'package:didvan/services/storage/storage.dart';
|
||||||
import 'package:didvan/views/home/home_state.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_core/firebase_core.dart';
|
||||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ class RequestHelper {
|
||||||
static const String _baseStatisticUrl = '$baseUrl/statistic';
|
static const String _baseStatisticUrl = '$baseUrl/statistic';
|
||||||
static const String _baseDirectUrl = '$_baseUserUrl/direct';
|
static const String _baseDirectUrl = '$_baseUserUrl/direct';
|
||||||
|
|
||||||
|
static const String mainPageContent = '$baseUrl/home';
|
||||||
|
|
||||||
static const String confirmUsername = '$_baseUserUrl/confirmUsername';
|
static const String confirmUsername = '$_baseUserUrl/confirmUsername';
|
||||||
static const String changePassword = '$_baseUserUrl/changePassword';
|
static const String changePassword = '$_baseUserUrl/changePassword';
|
||||||
static const String login = '$_baseUserUrl/login';
|
static const String login = '$_baseUserUrl/login';
|
||||||
|
|
|
||||||
|
|
@ -49,9 +49,8 @@ class DateTimeUtils {
|
||||||
lastDate: lastDate,
|
lastDate: lastDate,
|
||||||
builder: (context, child) => Theme(
|
builder: (context, child) => Theme(
|
||||||
data: Theme.of(context).copyWith(
|
data: Theme.of(context).copyWith(
|
||||||
textTheme: Theme.of(context)
|
textTheme: Theme.of(context).textTheme.copyWith(
|
||||||
.textTheme
|
headlineMedium: Theme.of(context).textTheme.displaySmall)),
|
||||||
.copyWith(headlineMedium: Theme.of(context).textTheme.displaySmall)),
|
|
||||||
child: child!,
|
child: child!,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,9 @@
|
||||||
import 'package:didvan/config/design_config.dart';
|
import 'package:didvan/config/design_config.dart';
|
||||||
import 'package:didvan/services/app_initalizer.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/home_state.dart';
|
||||||
import 'package:didvan/views/home/news/news.dart';
|
import 'package:didvan/views/home/widgets/logo_app_bar.dart';
|
||||||
import 'package:didvan/views/home/radar/radar.dart';
|
|
||||||
import 'package:didvan/views/home/settings/settings.dart';
|
|
||||||
import 'package:didvan/views/home/statistic/statistic.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:didvan/views/widgets/didvan/bnb.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
@ -24,7 +22,7 @@ class _HomeState extends State<Home> with SingleTickerProviderStateMixin {
|
||||||
void initState() {
|
void initState() {
|
||||||
final state = context.read<HomeState>();
|
final state = context.read<HomeState>();
|
||||||
DesignConfig.updateSystemUiOverlayStyle();
|
DesignConfig.updateSystemUiOverlayStyle();
|
||||||
_tabController = TabController(length: 5, vsync: this, initialIndex: 2);
|
_tabController = TabController(length: 4, vsync: this, initialIndex: 0);
|
||||||
_tabController.addListener(() {
|
_tabController.addListener(() {
|
||||||
state.currentPageIndex = _tabController.index;
|
state.currentPageIndex = _tabController.index;
|
||||||
});
|
});
|
||||||
|
|
@ -37,15 +35,15 @@ class _HomeState extends State<Home> with SingleTickerProviderStateMixin {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
|
appBar: const LogoAppBar(),
|
||||||
body: TabBarView(
|
body: TabBarView(
|
||||||
physics: const NeverScrollableScrollPhysics(),
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
controller: _tabController,
|
controller: _tabController,
|
||||||
children: const [
|
children: const [
|
||||||
News(),
|
HomePage(),
|
||||||
Statistic(),
|
Statistic(),
|
||||||
Radar(),
|
SizedBox(),
|
||||||
Studio(),
|
SizedBox(),
|
||||||
Settings(),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
bottomNavigationBar: Consumer<HomeState>(
|
bottomNavigationBar: Consumer<HomeState>(
|
||||||
|
|
|
||||||
|
|
@ -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<HomePage> createState() => _HomePageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _HomePageState extends State<HomePage> {
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
Future.delayed(
|
||||||
|
Duration.zero,
|
||||||
|
context.read<HomePageState>().getMainPageContent,
|
||||||
|
);
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return StateHandler<HomePageState>(
|
||||||
|
onRetry: () {},
|
||||||
|
state: context.watch<HomePageState>(),
|
||||||
|
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,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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<void> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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<ThemeProvider>(
|
|
||||||
builder: (context, themeProvider, child) => LogoAppBar(
|
|
||||||
key: UniqueKey(),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const SizedBox(height: 16),
|
|
||||||
DidvanCard(
|
|
||||||
child: Column(
|
|
||||||
children: [
|
|
||||||
Consumer<UserProvider>(
|
|
||||||
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<UserProvider>().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,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -10,8 +10,8 @@ import 'package:didvan/models/studio_details_data.dart';
|
||||||
import 'package:didvan/models/view/action_sheet_data.dart';
|
import 'package:didvan/models/view/action_sheet_data.dart';
|
||||||
import 'package:didvan/services/media/media.dart';
|
import 'package:didvan/services/media/media.dart';
|
||||||
import 'package:didvan/utils/action_sheet.dart';
|
import 'package:didvan/utils/action_sheet.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/studio/studio_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/audio/audio_slider.dart';
|
||||||
import 'package:didvan/views/home/widgets/bookmark_button.dart';
|
import 'package:didvan/views/home/widgets/bookmark_button.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/button.dart';
|
import 'package:didvan/views/widgets/didvan/button.dart';
|
||||||
|
|
@ -184,7 +184,7 @@ class AudioPlayerWidget extends StatelessWidget {
|
||||||
color: Theme.of(context).colorScheme.title,
|
color: Theme.of(context).colorScheme.title,
|
||||||
value: podcast.marked,
|
value: podcast.marked,
|
||||||
onMarkChanged: (value) => context
|
onMarkChanged: (value) => context
|
||||||
.read<StudioState>()
|
.read<PodcastsState>()
|
||||||
.changeMark(podcast.id, value, true),
|
.changeMark(podcast.id, value, true),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,10 @@
|
||||||
import 'package:didvan/config/theme_data.dart';
|
import 'package:didvan/config/theme_data.dart';
|
||||||
|
import 'package:didvan/constants/app_icons.dart';
|
||||||
import 'package:didvan/constants/assets.dart';
|
import 'package:didvan/constants/assets.dart';
|
||||||
import 'package:didvan/models/view/action_sheet_data.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/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/icon_button.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/text.dart';
|
import 'package:didvan/views/widgets/didvan/text.dart';
|
||||||
import 'package:didvan/views/widgets/logos/didvan_vertical_logo.dart';
|
import 'package:didvan/views/widgets/logos/didvan_vertical_logo.dart';
|
||||||
|
|
@ -9,28 +12,70 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/svg.dart';
|
import 'package:flutter_svg/svg.dart';
|
||||||
import 'package:url_launcher/url_launcher_string.dart';
|
import 'package:url_launcher/url_launcher_string.dart';
|
||||||
|
|
||||||
class LogoAppBar extends StatelessWidget {
|
class LogoAppBar extends StatelessWidget implements PreferredSizeWidget {
|
||||||
final String? type;
|
const LogoAppBar({Key? key}) : super(key: key);
|
||||||
const LogoAppBar({Key? key, this.type}) : super(key: key);
|
|
||||||
|
@override
|
||||||
|
Size get preferredSize => const Size(double.infinity, 144);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final MediaQueryData d = MediaQuery.of(context);
|
final MediaQueryData d = MediaQuery.of(context);
|
||||||
return Container(
|
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),
|
margin: EdgeInsets.only(top: d.padding.top),
|
||||||
padding: const EdgeInsets.all(16),
|
padding: const EdgeInsets.all(16),
|
||||||
alignment: Alignment.centerRight,
|
alignment: Alignment.centerRight,
|
||||||
child: Row(
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
DidvanHorizontalLogo(type: type),
|
const DidvanHorizontalLogo(),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
DidvanIconButton(
|
DidvanIconButton(
|
||||||
icon: Icons.menu,
|
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,
|
size: 32,
|
||||||
onPressed: () => _handleMenuOpen(context),
|
onPressed: () => _handleMenuOpen(context),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
SearchField(
|
||||||
|
title: 'دیدوان',
|
||||||
|
onChanged: (_) {},
|
||||||
|
focusNode: FocusNode(),
|
||||||
|
onFilterButtonPressed: () => _handleMenuOpen(context),
|
||||||
|
isFiltered: false,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -122,10 +167,12 @@ class _BottomSheetItem extends StatelessWidget {
|
||||||
children: [
|
children: [
|
||||||
SvgPicture.asset(
|
SvgPicture.asset(
|
||||||
icon,
|
icon,
|
||||||
color: enabled
|
theme: SvgTheme(
|
||||||
|
currentColor: enabled
|
||||||
? Theme.of(context).colorScheme.title
|
? Theme.of(context).colorScheme.title
|
||||||
: Theme.of(context).colorScheme.disabledText,
|
: Theme.of(context).colorScheme.disabledText,
|
||||||
),
|
),
|
||||||
|
),
|
||||||
const SizedBox(width: 8),
|
const SizedBox(width: 8),
|
||||||
DidvanText(
|
DidvanText(
|
||||||
title,
|
title,
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import 'package:didvan/models/requests/radar.dart';
|
||||||
import 'package:didvan/models/requests/studio.dart';
|
import 'package:didvan/models/requests/studio.dart';
|
||||||
import 'package:didvan/routes/routes.dart';
|
import 'package:didvan/routes/routes.dart';
|
||||||
import 'package:didvan/utils/date_time.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/card.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/text.dart';
|
import 'package:didvan/views/widgets/didvan/text.dart';
|
||||||
import 'package:didvan/views/widgets/shimmer_placeholder.dart';
|
import 'package:didvan/views/widgets/shimmer_placeholder.dart';
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import 'package:didvan/models/overview_data.dart';
|
||||||
import 'package:didvan/models/requests/studio.dart';
|
import 'package:didvan/models/requests/studio.dart';
|
||||||
import 'package:didvan/providers/media.dart';
|
import 'package:didvan/providers/media.dart';
|
||||||
import 'package:didvan/utils/date_time.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/bookmark_button.dart';
|
||||||
import 'package:didvan/views/home/widgets/duration_widget.dart';
|
import 'package:didvan/views/home/widgets/duration_widget.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/card.dart';
|
import 'package:didvan/views/widgets/didvan/card.dart';
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,54 @@ class _SearchFieldState extends State<SearchField> {
|
||||||
keyboardType: TextInputType.text,
|
keyboardType: TextInputType.text,
|
||||||
textInputAction: TextInputAction.search,
|
textInputAction: TextInputAction.search,
|
||||||
decoration: InputDecoration(
|
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(
|
focusedBorder: OutlineInputBorder(
|
||||||
borderRadius: const BorderRadius.all(
|
borderRadius: const BorderRadius.all(
|
||||||
Radius.circular(4),
|
Radius.circular(4),
|
||||||
|
|
@ -86,31 +134,6 @@ class _SearchFieldState extends State<SearchField> {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
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,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,9 @@ import 'package:didvan/models/enums.dart';
|
||||||
import 'package:didvan/models/requests/studio.dart';
|
import 'package:didvan/models/requests/studio.dart';
|
||||||
import 'package:didvan/models/view/action_sheet_data.dart';
|
import 'package:didvan/models/view/action_sheet_data.dart';
|
||||||
import 'package:didvan/utils/action_sheet.dart';
|
import 'package:didvan/utils/action_sheet.dart';
|
||||||
import 'package:didvan/views/home/studio/studio_state.dart';
|
import 'package:didvan/views/podcasts/podcasts_state.dart';
|
||||||
import 'package:didvan/views/home/studio/widgets/slider.dart';
|
import 'package:didvan/views/podcasts/widgets/slider.dart';
|
||||||
import 'package:didvan/views/home/studio/widgets/tab_bar.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/date_picker_button.dart';
|
||||||
import 'package:didvan/views/home/widgets/logo_app_bar.dart';
|
import 'package:didvan/views/home/widgets/logo_app_bar.dart';
|
||||||
import 'package:didvan/views/home/widgets/overview/podcast.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:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class Studio extends StatefulWidget {
|
class Podcasts extends StatefulWidget {
|
||||||
const Studio({Key? key}) : super(key: key);
|
const Podcasts({Key? key}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<Studio> createState() => _StudioState();
|
State<Podcasts> createState() => _PodcastsState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _StudioState extends State<Studio> {
|
class _PodcastsState extends State<Podcasts> {
|
||||||
final _focusNode = FocusNode();
|
final _focusNode = FocusNode();
|
||||||
Timer? _timer;
|
Timer? _timer;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
context.read<StudioState>().init();
|
context.read<PodcastsState>().init();
|
||||||
super.initState();
|
super.initState();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Consumer<StudioState>(
|
return Consumer<PodcastsState>(
|
||||||
builder: (context, state, child) => CustomScrollView(
|
builder: (context, state, child) => CustomScrollView(
|
||||||
slivers: [
|
slivers: [
|
||||||
const SliverToBoxAdapter(child: LogoAppBar()),
|
const SliverToBoxAdapter(child: LogoAppBar()),
|
||||||
|
|
@ -101,7 +101,7 @@ class _StudioState extends State<Studio> {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
SliverStateHandler<StudioState>(
|
SliverStateHandler<PodcastsState>(
|
||||||
state: state,
|
state: state,
|
||||||
itemPadding: const EdgeInsets.only(
|
itemPadding: const EdgeInsets.only(
|
||||||
bottom: 8,
|
bottom: 8,
|
||||||
|
|
@ -149,7 +149,7 @@ class _StudioState extends State<Studio> {
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onChanged(String value) {
|
void _onChanged(String value) {
|
||||||
final state = context.read<StudioState>();
|
final state = context.read<PodcastsState>();
|
||||||
if (value.length < 3 && value.isNotEmpty || state.lastSearch == value) {
|
if (value.length < 3 && value.isNotEmpty || state.lastSearch == value) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -161,7 +161,7 @@ class _StudioState extends State<Studio> {
|
||||||
}
|
}
|
||||||
|
|
||||||
void _showSortDialog() {
|
void _showSortDialog() {
|
||||||
final state = context.read<StudioState>();
|
final state = context.read<PodcastsState>();
|
||||||
ActionSheetUtils.showBottomSheet(
|
ActionSheetUtils.showBottomSheet(
|
||||||
data: ActionSheetData(
|
data: ActionSheetData(
|
||||||
content: StatefulBuilder(
|
content: StatefulBuilder(
|
||||||
|
|
@ -211,7 +211,7 @@ class _StudioState extends State<Studio> {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _showFilterBottomSheet() async {
|
Future<void> _showFilterBottomSheet() async {
|
||||||
final state = context.read<StudioState>();
|
final state = context.read<PodcastsState>();
|
||||||
await ActionSheetUtils.showBottomSheet(
|
await ActionSheetUtils.showBottomSheet(
|
||||||
data: ActionSheetData(
|
data: ActionSheetData(
|
||||||
title: 'فیلتر جستجو',
|
title: 'فیلتر جستجو',
|
||||||
|
|
@ -9,7 +9,7 @@ import 'package:didvan/services/app_initalizer.dart';
|
||||||
import 'package:didvan/services/network/request.dart';
|
import 'package:didvan/services/network/request.dart';
|
||||||
import 'package:didvan/services/network/request_helper.dart';
|
import 'package:didvan/services/network/request_helper.dart';
|
||||||
|
|
||||||
class StudioState extends CoreProvier {
|
class PodcastsState extends CoreProvier {
|
||||||
final List<OverviewData> studios = [];
|
final List<OverviewData> studios = [];
|
||||||
final List<SliderData> sliders = [];
|
final List<SliderData> sliders = [];
|
||||||
|
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
import 'package:better_player/better_player.dart';
|
import 'package:better_player/better_player.dart';
|
||||||
import 'package:didvan/models/view/app_bar_data.dart';
|
import 'package:didvan/models/view/app_bar_data.dart';
|
||||||
import 'package:didvan/services/media/media.dart';
|
import 'package:didvan/services/media/media.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/studio/studio_details/widgets/studio_details_widget.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/home/widgets/bookmark_button.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/app_bar.dart';
|
import 'package:didvan/views/widgets/didvan/app_bar.dart';
|
||||||
import 'package:didvan/views/widgets/state_handlers/state_handler.dart';
|
import 'package:didvan/views/widgets/state_handlers/state_handler.dart';
|
||||||
|
|
@ -2,8 +2,8 @@ import 'dart:ui' as ui;
|
||||||
|
|
||||||
import 'package:didvan/models/view/app_bar_data.dart';
|
import 'package:didvan/models/view/app_bar_data.dart';
|
||||||
import 'package:didvan/services/media/media.dart';
|
import 'package:didvan/services/media/media.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/studio/studio_details/widgets/studio_details_widget.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/home/widgets/bookmark_button.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/app_bar.dart';
|
import 'package:didvan/views/widgets/didvan/app_bar.dart';
|
||||||
import 'package:didvan/views/widgets/state_handlers/state_handler.dart';
|
import 'package:didvan/views/widgets/state_handlers/state_handler.dart';
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import 'package:didvan/config/design_config.dart';
|
import 'package:didvan/config/design_config.dart';
|
||||||
import 'package:didvan/config/theme_data.dart';
|
import 'package:didvan/config/theme_data.dart';
|
||||||
import 'package:didvan/constants/app_icons.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:didvan/views/widgets/didvan/text.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
@ -6,8 +6,8 @@ import 'package:didvan/models/enums.dart';
|
||||||
import 'package:didvan/models/studio_details_data.dart';
|
import 'package:didvan/models/studio_details_data.dart';
|
||||||
import 'package:didvan/views/home/comments/comments.dart';
|
import 'package:didvan/views/home/comments/comments.dart';
|
||||||
import 'package:didvan/views/home/comments/comments_state.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/podcasts/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/widgets/details_tab_bar.dart';
|
||||||
import 'package:didvan/views/home/widgets/overview/multitype.dart';
|
import 'package:didvan/views/home/widgets/overview/multitype.dart';
|
||||||
import 'package:didvan/views/home/widgets/tag_item.dart';
|
import 'package:didvan/views/home/widgets/tag_item.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/text.dart';
|
import 'package:didvan/views/widgets/didvan/text.dart';
|
||||||
|
|
@ -5,8 +5,8 @@ import 'package:didvan/constants/app_icons.dart';
|
||||||
import 'package:didvan/models/enums.dart';
|
import 'package:didvan/models/enums.dart';
|
||||||
import 'package:didvan/models/requests/studio.dart';
|
import 'package:didvan/models/requests/studio.dart';
|
||||||
import 'package:didvan/routes/routes.dart';
|
import 'package:didvan/routes/routes.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/studio/studio_state.dart';
|
import 'package:didvan/views/podcasts/podcasts_state.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/text.dart';
|
import 'package:didvan/views/widgets/didvan/text.dart';
|
||||||
import 'package:didvan/views/widgets/shimmer_placeholder.dart';
|
import 'package:didvan/views/widgets/shimmer_placeholder.dart';
|
||||||
import 'package:didvan/views/widgets/skeleton_image.dart';
|
import 'package:didvan/views/widgets/skeleton_image.dart';
|
||||||
|
|
@ -25,7 +25,7 @@ class _StudioSliderState extends State<StudioSlider> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final state = context.watch<StudioState>();
|
final state = context.watch<PodcastsState>();
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
CarouselSlider(
|
CarouselSlider(
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import 'package:didvan/config/design_config.dart';
|
import 'package:didvan/config/design_config.dart';
|
||||||
import 'package:didvan/config/theme_data.dart';
|
import 'package:didvan/config/theme_data.dart';
|
||||||
import 'package:didvan/constants/app_icons.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:didvan/views/widgets/didvan/text.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
@ -13,7 +13,7 @@ class StudioTabBar extends StatelessWidget {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final state = context.watch<StudioState>();
|
final state = context.watch<PodcastsState>();
|
||||||
return AnimatedContainer(
|
return AnimatedContainer(
|
||||||
duration: DesignConfig.lowAnimationDuration,
|
duration: DesignConfig.lowAnimationDuration,
|
||||||
margin: const EdgeInsets.symmetric(horizontal: 16),
|
margin: const EdgeInsets.symmetric(horizontal: 16),
|
||||||
|
|
@ -4,7 +4,7 @@ import 'package:didvan/config/design_config.dart';
|
||||||
import 'package:didvan/constants/app_icons.dart';
|
import 'package:didvan/constants/app_icons.dart';
|
||||||
import 'package:didvan/models/view/app_bar_data.dart';
|
import 'package:didvan/models/view/app_bar_data.dart';
|
||||||
import 'package:didvan/routes/routes.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/menu_item.dart';
|
||||||
import 'package:didvan/views/home/widgets/overview/multitype.dart';
|
import 'package:didvan/views/home/widgets/overview/multitype.dart';
|
||||||
import 'package:didvan/views/home/widgets/search_field.dart';
|
import 'package:didvan/views/home/widgets/search_field.dart';
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import 'package:didvan/models/requests/studio.dart';
|
import 'package:didvan/models/requests/studio.dart';
|
||||||
import 'package:didvan/models/view/app_bar_data.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/news.dart';
|
||||||
import 'package:didvan/views/home/widgets/overview/podcast.dart';
|
import 'package:didvan/views/home/widgets/overview/podcast.dart';
|
||||||
import 'package:didvan/views/home/widgets/overview/radar.dart';
|
import 'package:didvan/views/home/widgets/overview/radar.dart';
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import 'package:didvan/constants/assets.dart';
|
import 'package:didvan/constants/assets.dart';
|
||||||
import 'package:didvan/models/view/app_bar_data.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/profile/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/widgets/direct_item.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/badge.dart';
|
import 'package:didvan/views/widgets/didvan/badge.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/divider.dart';
|
import 'package:didvan/views/widgets/didvan/divider.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/scaffold.dart';
|
import 'package:didvan/views/widgets/didvan/scaffold.dart';
|
||||||
|
|
@ -4,7 +4,7 @@ import 'package:didvan/models/chat_room/chat_room.dart';
|
||||||
import 'package:didvan/providers/user.dart';
|
import 'package:didvan/providers/user.dart';
|
||||||
import 'package:didvan/routes/routes.dart';
|
import 'package:didvan/routes/routes.dart';
|
||||||
import 'package:didvan/utils/date_time.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/badge.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/divider.dart';
|
import 'package:didvan/views/widgets/didvan/divider.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/text.dart';
|
import 'package:didvan/views/widgets/didvan/text.dart';
|
||||||
|
|
@ -4,7 +4,7 @@ import 'package:didvan/config/design_config.dart';
|
||||||
import 'package:didvan/models/view/app_bar_data.dart';
|
import 'package:didvan/models/view/app_bar_data.dart';
|
||||||
import 'package:didvan/providers/user.dart';
|
import 'package:didvan/providers/user.dart';
|
||||||
import 'package:didvan/routes/routes.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/home/widgets/menu_item.dart';
|
||||||
import 'package:didvan/views/widgets/animated_visibility.dart';
|
import 'package:didvan/views/widgets/animated_visibility.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/button.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:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class Profile extends StatefulWidget {
|
class EditProfile extends StatefulWidget {
|
||||||
const Profile({Key? key}) : super(key: key);
|
const EditProfile({Key? key}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<Profile> createState() => _ProfileState();
|
State<EditProfile> createState() => _EditProfileState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _ProfileState extends State<Profile> {
|
class _EditProfileState extends State<EditProfile> {
|
||||||
Timer? _timer;
|
Timer? _timer;
|
||||||
|
|
||||||
late String fullName;
|
late String fullName;
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
import 'package:didvan/config/theme_data.dart';
|
import 'package:didvan/config/theme_data.dart';
|
||||||
import 'package:didvan/constants/app_icons.dart';
|
import 'package:didvan/constants/app_icons.dart';
|
||||||
import 'package:didvan/models/enums.dart';
|
import 'package:didvan/models/enums.dart';
|
||||||
|
|
@ -10,7 +10,7 @@ import 'package:didvan/models/view/app_bar_data.dart';
|
||||||
import 'package:didvan/providers/theme.dart';
|
import 'package:didvan/providers/theme.dart';
|
||||||
import 'package:didvan/utils/action_sheet.dart';
|
import 'package:didvan/utils/action_sheet.dart';
|
||||||
import 'package:didvan/utils/date_time.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/home/widgets/menu_item.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/card.dart';
|
import 'package:didvan/views/widgets/didvan/card.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/divider.dart';
|
import 'package:didvan/views/widgets/didvan/divider.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<UserProvider>(
|
||||||
|
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<UserProvider>().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,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -8,7 +8,7 @@ import 'package:didvan/models/category.dart';
|
||||||
import 'package:didvan/models/enums.dart';
|
import 'package:didvan/models/enums.dart';
|
||||||
import 'package:didvan/models/requests/radar.dart';
|
import 'package:didvan/models/requests/radar.dart';
|
||||||
import 'package:didvan/models/view/action_sheet_data.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_gird.dart';
|
||||||
import 'package:didvan/views/home/widgets/categories_list.dart';
|
import 'package:didvan/views/home/widgets/categories_list.dart';
|
||||||
import 'package:didvan/views/home/widgets/date_picker_button.dart';
|
import 'package:didvan/views/home/widgets/date_picker_button.dart';
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import 'package:didvan/models/requests/radar.dart';
|
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/home/widgets/floating_navigation_bar.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/page_view.dart';
|
import 'package:didvan/views/widgets/didvan/page_view.dart';
|
||||||
import 'package:didvan/views/widgets/state_handlers/state_handler.dart';
|
import 'package:didvan/views/widgets/state_handlers/state_handler.dart';
|
||||||
|
|
@ -4,7 +4,7 @@ import 'package:didvan/models/view/app_bar_data.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/text.dart';
|
import 'package:didvan/views/widgets/didvan/text.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class DidvanAppBar extends StatelessWidget {
|
class DidvanAppBar extends StatelessWidget implements PreferredSizeWidget {
|
||||||
final AppBarData appBarData;
|
final AppBarData appBarData;
|
||||||
final bool hasBorder;
|
final bool hasBorder;
|
||||||
final Color? backgroundColor;
|
final Color? backgroundColor;
|
||||||
|
|
@ -15,6 +15,9 @@ class DidvanAppBar extends StatelessWidget {
|
||||||
this.backgroundColor = Colors.transparent,
|
this.backgroundColor = Colors.transparent,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Size get preferredSize => const Size(double.infinity, kToolbarHeight);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Container(
|
return Container(
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,12 @@ import 'package:didvan/config/theme_data.dart';
|
||||||
import 'package:didvan/constants/app_icons.dart';
|
import 'package:didvan/constants/app_icons.dart';
|
||||||
import 'package:didvan/models/enums.dart';
|
import 'package:didvan/models/enums.dart';
|
||||||
import 'package:didvan/models/requests/radar.dart';
|
import 'package:didvan/models/requests/radar.dart';
|
||||||
import 'package:didvan/providers/user.dart';
|
|
||||||
import 'package:didvan/routes/routes.dart';
|
import 'package:didvan/routes/routes.dart';
|
||||||
import 'package:didvan/services/media/media.dart';
|
import 'package:didvan/services/media/media.dart';
|
||||||
import 'package:didvan/utils/action_sheet.dart';
|
import 'package:didvan/utils/action_sheet.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/studio/studio_details/widgets/studio_details_widget.dart';
|
import 'package:didvan/views/podcasts/studio_details/widgets/studio_details_widget.dart';
|
||||||
import 'package:didvan/views/home/studio/studio_state.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_player_widget.dart';
|
||||||
import 'package:didvan/views/home/widgets/audio/audio_slider.dart';
|
import 'package:didvan/views/home/widgets/audio/audio_slider.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/icon_button.dart';
|
import 'package:didvan/views/widgets/didvan/icon_button.dart';
|
||||||
|
|
@ -58,41 +57,32 @@ class DidvanBNB extends StatelessWidget {
|
||||||
children: [
|
children: [
|
||||||
_NavBarItem(
|
_NavBarItem(
|
||||||
isSelected: currentTabIndex == 0,
|
isSelected: currentTabIndex == 0,
|
||||||
title: 'اخبار',
|
title: 'خانه',
|
||||||
selectedIcon: DidvanIcons.news_solid,
|
selectedIcon: Icons.home,
|
||||||
unselectedIcon: DidvanIcons.news_light,
|
unselectedIcon: Icons.home_outlined,
|
||||||
onTap: () => onTabChanged(0),
|
onTap: () => onTabChanged(0),
|
||||||
),
|
),
|
||||||
_NavBarItem(
|
_NavBarItem(
|
||||||
isSelected: currentTabIndex == 1,
|
isSelected: currentTabIndex == 1,
|
||||||
title: 'آمار',
|
title: 'آمار و اطلاعات',
|
||||||
selectedIcon: DidvanIcons.chart_solid,
|
selectedIcon: DidvanIcons.news_solid,
|
||||||
unselectedIcon: DidvanIcons.chart_light,
|
unselectedIcon: DidvanIcons.news_light,
|
||||||
onTap: () => onTabChanged(1),
|
onTap: () => onTabChanged(1),
|
||||||
),
|
),
|
||||||
_NavBarItem(
|
_NavBarItem(
|
||||||
isSelected: currentTabIndex == 2,
|
isSelected: currentTabIndex == 2,
|
||||||
title: 'رادار',
|
title: 'دستهبندی',
|
||||||
selectedIcon: DidvanIcons.radar_solid,
|
selectedIcon: Icons.window,
|
||||||
unselectedIcon: DidvanIcons.radar_light,
|
unselectedIcon: Icons.window_outlined,
|
||||||
onTap: () => onTabChanged(2),
|
onTap: () => onTabChanged(2),
|
||||||
),
|
),
|
||||||
_NavBarItem(
|
_NavBarItem(
|
||||||
isSelected: currentTabIndex == 3,
|
isSelected: currentTabIndex == 3,
|
||||||
title: 'استودیو',
|
title: 'رصدهای من',
|
||||||
selectedIcon: DidvanIcons.play_circle_solid,
|
selectedIcon: DidvanIcons.radar_solid,
|
||||||
unselectedIcon: DidvanIcons.play_circle_light,
|
unselectedIcon: DidvanIcons.radar_light,
|
||||||
onTap: () => onTabChanged(3),
|
onTap: () => onTabChanged(3),
|
||||||
),
|
),
|
||||||
_NavBarItem(
|
|
||||||
hasBadge:
|
|
||||||
context.watch<UserProvider>().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,
|
fetchOnly: true,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
final state = context.read<StudioState>();
|
final state = context.read<PodcastsState>();
|
||||||
showModalBottomSheet(
|
showModalBottomSheet(
|
||||||
constraints: BoxConstraints(
|
constraints: BoxConstraints(
|
||||||
maxWidth: ActionSheetUtils.mediaQueryData.size.width,
|
maxWidth: ActionSheetUtils.mediaQueryData.size.width,
|
||||||
|
|
@ -300,7 +290,7 @@ class _PlayerNavBar extends StatelessWidget {
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
context: context,
|
context: context,
|
||||||
isScrollControlled: true,
|
isScrollControlled: true,
|
||||||
builder: (context) => ChangeNotifierProvider<StudioState>.value(
|
builder: (context) => ChangeNotifierProvider<PodcastsState>.value(
|
||||||
value: state,
|
value: state,
|
||||||
child: Consumer<StudioDetailsState>(
|
child: Consumer<StudioDetailsState>(
|
||||||
builder: (context, state, child) => MediaQuery(
|
builder: (context, state, child) => MediaQuery(
|
||||||
|
|
@ -361,7 +351,7 @@ class _PlayerNavBar extends StatelessWidget {
|
||||||
)
|
)
|
||||||
: StudioDetailsWidget(
|
: StudioDetailsWidget(
|
||||||
onMarkChanged: (id, value) => context
|
onMarkChanged: (id, value) => context
|
||||||
.read<StudioState>()
|
.read<PodcastsState>()
|
||||||
.changeMark(id, value, true),
|
.changeMark(id, value, true),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ class DidvanHorizontalLogo extends StatelessWidget {
|
||||||
padding: EdgeInsets.only(bottom: type == 'studio' ? 0 : 4),
|
padding: EdgeInsets.only(bottom: type == 'studio' ? 0 : 4),
|
||||||
child: SvgPicture.asset(
|
child: SvgPicture.asset(
|
||||||
_asset,
|
_asset,
|
||||||
height: 76,
|
height: 48,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
104
pubspec.lock
104
pubspec.lock
|
|
@ -5,10 +5,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: _flutterfire_internals
|
name: _flutterfire_internals
|
||||||
sha256: "1a5e13736d59235ce0139621b4bbe29bc89839e202409081bc667eb3cd20674c"
|
sha256: d84d98f1992976775f83083523a34c5d22fea191eec3abb2bd09537fb623c2e0
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.5"
|
version: "1.3.7"
|
||||||
args:
|
args:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -70,34 +70,34 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: bot_toast
|
name: bot_toast
|
||||||
sha256: db6950851aab00ef04b386eb3c76c83739eaffcb6b80d0dc42a675ef7584623b
|
sha256: "6b93030a99a98335b8827ecd83021e92e885ffc61d261d3825ffdecdd17f3bdf"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.4"
|
version: "4.1.3"
|
||||||
cached_network_image:
|
cached_network_image:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: cached_network_image
|
name: cached_network_image
|
||||||
sha256: fd3d0dc1d451f9a252b32d95d3f0c3c487bc41a75eba2e6097cb0b9c71491b15
|
sha256: f98972704692ba679db144261172a8e20feb145636c617af0eb4022132a6797f
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.2.3"
|
version: "3.3.0"
|
||||||
cached_network_image_platform_interface:
|
cached_network_image_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: cached_network_image_platform_interface
|
name: cached_network_image_platform_interface
|
||||||
sha256: bb2b8403b4ccdc60ef5f25c70dead1f3d32d24b9d6117cfc087f496b178594a7
|
sha256: "56aa42a7a01e3c9db8456d9f3f999931f1e05535b5a424271e9a38cabf066613"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "3.0.0"
|
||||||
cached_network_image_web:
|
cached_network_image_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: cached_network_image_web
|
name: cached_network_image_web
|
||||||
sha256: b8eb814ebfcb4dea049680f8c1ffb2df399e4d03bf7a352c775e26fa06e02fa0
|
sha256: "759b9a9f8f6ccbb66c185df805fac107f05730b1dab9c64626d1008cca532257"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "1.1.0"
|
||||||
carousel_slider:
|
carousel_slider:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -230,10 +230,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: file_selector_macos
|
name: file_selector_macos
|
||||||
sha256: "182c3f8350cee659f7b115e956047ee3dc672a96665883a545e81581b9a82c72"
|
sha256: b15c3da8bd4908b9918111fa486903f5808e388b8d1c559949f584725a6594d6
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.9.3+2"
|
version: "0.9.3+3"
|
||||||
file_selector_platform_interface:
|
file_selector_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -254,10 +254,10 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: firebase_core
|
name: firebase_core
|
||||||
sha256: c78132175edda4bc532a71e01a32964e4b4fcf53de7853a422d96dac3725f389
|
sha256: "95580fa07c8ca3072a2bb1fecd792616a33f8683477d25b7d29d3a6a399e6ece"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.15.1"
|
version: "2.17.0"
|
||||||
firebase_core_platform_interface:
|
firebase_core_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -270,34 +270,34 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: firebase_core_web
|
name: firebase_core_web
|
||||||
sha256: "4cf4d2161530332ddc3c562f19823fb897ff37a9a774090d28df99f47370e973"
|
sha256: e8c408923cd3a25bd342c576a114f2126769cd1a57106a4edeaa67ea4a84e962
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.7.0"
|
version: "2.8.0"
|
||||||
firebase_messaging:
|
firebase_messaging:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: firebase_messaging
|
name: firebase_messaging
|
||||||
sha256: "6c1a2a047d6f165b7c5f947467ac5138731a2af82c7af1c12d691dbb834f6b73"
|
sha256: "67f9d7c87457e71ad78ee81e332f232b8a24f7d5e338f8c958fa7d6e9e0e3636"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "14.6.7"
|
version: "14.6.9"
|
||||||
firebase_messaging_platform_interface:
|
firebase_messaging_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: firebase_messaging_platform_interface
|
name: firebase_messaging_platform_interface
|
||||||
sha256: bcba58d28f8cda607a323240c6d314c2c62b62ebfbb0f2d704ebefef07b52b5f
|
sha256: "8c7ced3201886ad7ba37f344c1468ccfc08abb3023922e0e5a016eaf38abb96c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.5.6"
|
version: "4.5.8"
|
||||||
firebase_messaging_web:
|
firebase_messaging_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: firebase_messaging_web
|
name: firebase_messaging_web
|
||||||
sha256: "962d09ec9dfa486cbbc218258ad41e8ec7997a2eba46919049496e1cafd960c5"
|
sha256: b601322bdb44e2fefe4cc7b85ef0dbb7a2479d4a7653a51340821cf8d60696b5
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.5.6"
|
version: "3.5.8"
|
||||||
fl_chart:
|
fl_chart:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -311,14 +311,6 @@ packages:
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
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:
|
flutter_cache_manager:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -522,18 +514,18 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: image_picker_android
|
name: image_picker_android
|
||||||
sha256: d32a997bcc4ee135aebca8e272b7c517927aa65a74b9c60a81a2764ef1a0462d
|
sha256: "0c7b83bbe2980c8a8e36e974f055e11e51675784e13a4762889feed0f3937ff2"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.8.7+5"
|
version: "0.8.8+1"
|
||||||
image_picker_for_web:
|
image_picker_for_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: image_picker_for_web
|
name: image_picker_for_web
|
||||||
sha256: "869fe8a64771b7afbc99fc433a5f7be2fea4d1cb3d7c11a48b6b579eb9c797f0"
|
sha256: "50bc9ae6a77eea3a8b11af5eb6c661eeb858fdd2f734c2a4fd17086922347ef7"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.0"
|
version: "3.0.1"
|
||||||
image_picker_ios:
|
image_picker_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -658,10 +650,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: octo_image
|
name: octo_image
|
||||||
sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143"
|
sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "2.0.0"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -730,18 +722,18 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: permission_handler
|
name: permission_handler
|
||||||
sha256: "63e5216aae014a72fe9579ccd027323395ce7a98271d9defa9d57320d001af81"
|
sha256: "284a66179cabdf942f838543e10413246f06424d960c92ba95c84439154fcac8"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.4.3"
|
version: "11.0.1"
|
||||||
permission_handler_android:
|
permission_handler_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler_android
|
name: permission_handler_android
|
||||||
sha256: d74e77a5ecd38649905db0a7d05ef16bed42ff263b9efb73ed794317c5764ec3
|
sha256: ace7d15a3d1a4a0b91c041d01e5405df221edb9de9116525efc773c74e6fc790
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.3.4"
|
version: "11.0.5"
|
||||||
permission_handler_apple:
|
permission_handler_apple:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -754,10 +746,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler_platform_interface
|
name: permission_handler_platform_interface
|
||||||
sha256: "7c6b1500385dd1d2ca61bb89e2488ca178e274a69144d26bbd65e33eae7c02a9"
|
sha256: f2343e9fa9c22ae4fd92d4732755bfe452214e7189afcc097380950cf567b4b2
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.11.3"
|
version: "3.11.5"
|
||||||
permission_handler_windows:
|
permission_handler_windows:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -874,18 +866,18 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: rive
|
name: rive
|
||||||
sha256: b7780ebdc56320da1f02a39a18f050a6079cad60c0cb92003c0801cc4eec6673
|
sha256: f2117a96a189758bc79bf7933865625c7a44a420ae537d2a8f6c492900136a71
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.11.14"
|
version: "0.11.17"
|
||||||
rive_common:
|
rive_common:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: rive_common
|
name: rive_common
|
||||||
sha256: "1431b99c9f361234cc6fa9aee7987b20030622df25ff64343a4010f9446b275e"
|
sha256: e41f12917cb58e0c9376836490ebaa431e12744da0c67e19dad8d4bee9fedd46
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.2.6"
|
version: "0.2.7"
|
||||||
rxdart:
|
rxdart:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -991,10 +983,10 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: universal_html
|
name: universal_html
|
||||||
sha256: a5cc5a84188e5d3e58f3ed77fe3dd4575dc1f68aa7c89e51b5b4105b9aab3b9d
|
sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.3"
|
version: "2.2.4"
|
||||||
universal_io:
|
universal_io:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -1167,34 +1159,34 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: webview_flutter
|
name: webview_flutter
|
||||||
sha256: "82f6787d5df55907aa01e49bd9644f4ed1cc82af7a8257dd9947815959d2e755"
|
sha256: c1ab9b81090705c6069197d9fdc1625e587b52b8d70cdde2339d177ad0dbb98e
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.2.4"
|
version: "4.4.1"
|
||||||
webview_flutter_android:
|
webview_flutter_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: webview_flutter_android
|
name: webview_flutter_android
|
||||||
sha256: "0d8f5ac96a155e672129bf94c7abf625de01241d44d269dbaff083f1b4deb1aa"
|
sha256: b0cd33dd7d3dd8e5f664e11a19e17ba12c352647269921a3b568406b001f1dff
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.9.5"
|
version: "3.12.0"
|
||||||
webview_flutter_platform_interface:
|
webview_flutter_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: webview_flutter_platform_interface
|
name: webview_flutter_platform_interface
|
||||||
sha256: "9d32a63a5ee111b37482cb3eac3379b9f0992afd27a52ee30279dbf06f41918b"
|
sha256: "6d9213c65f1060116757a7c473247c60f3f7f332cac33dc417c9e362a9a13e4f"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.5.1"
|
version: "2.6.0"
|
||||||
webview_flutter_wkwebview:
|
webview_flutter_wkwebview:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: webview_flutter_wkwebview
|
name: webview_flutter_wkwebview
|
||||||
sha256: d2f7241849582da80b79acb03bb936422412ce5c0c79fb5f6a1de5421a5aecc4
|
sha256: "30b9af6bdd457b44c08748b9190d23208b5165357cc2eb57914fee1366c42974"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.7.4"
|
version: "3.9.1"
|
||||||
win32:
|
win32:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
||||||
|
|
@ -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.
|
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
||||||
# Read more about iOS versioning at
|
# Read more about iOS versioning at
|
||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
version: 2.6.2+2024
|
version: 3.0.0+3000
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=2.17.0 <3.0.0"
|
sdk: ">=2.17.0 <3.0.0"
|
||||||
|
|
@ -62,7 +62,7 @@ dependencies:
|
||||||
firebase_core: ^2.3.0
|
firebase_core: ^2.3.0
|
||||||
webview_flutter: ^4.2.0
|
webview_flutter: ^4.2.0
|
||||||
expandable_bottom_sheet: ^1.1.1+1
|
expandable_bottom_sheet: ^1.1.1+1
|
||||||
permission_handler: ^10.2.0
|
permission_handler: ^11.0.0
|
||||||
better_player:
|
better_player:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/tintran-dev/betterplayer.git
|
url: https://github.com/tintran-dev/betterplayer.git
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue