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