From 053f8d233b08182a10ef0005761239af1fb70f31 Mon Sep 17 00:00:00 2001 From: MohammadTaha Basiri Date: Mon, 20 Jun 2022 16:08:34 +0430 Subject: [PATCH] v2.2.2 build 20 --- lib/main.dart | 15 --------- lib/services/app_initalizer.dart | 26 ++++++++++++++- lib/services/network/request_helper.dart | 2 +- lib/views/home/home.dart | 24 -------------- .../news/news_details/news_details_state.dart | 1 + .../radar_details/radar_details_state.dart | 1 + .../studio_details/studio_details.mobile.dart | 1 + .../studio_details/studio_details.web.dart | 1 + .../studio_details/studio_details_state.dart | 33 +++++++++++++++++++ lib/views/home/studio/studio_state.dart | 2 +- .../widgets/audio/audio_player_widget.dart | 19 ++++++++--- .../home/widgets/overview/multitype.dart | 2 +- lib/views/splash/splash.dart | 2 +- lib/views/widgets/didvan/button.dart | 9 +++-- lib/views/widgets/didvan/page_view.dart | 6 +--- pubspec.lock | 26 +++++++-------- pubspec.yaml | 2 +- 17 files changed, 101 insertions(+), 71 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index c5dd3d3..b688a6b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,27 +4,12 @@ import 'package:didvan/providers/media.dart'; 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:firebase_core/firebase_core.dart'; -import 'package:firebase_messaging/firebase_messaging.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:provider/provider.dart'; void main() async { - if (!kIsWeb) { - WidgetsFlutterBinding.ensureInitialized(); - await Firebase.initializeApp(); - final initMsg = await FirebaseMessaging.instance.getInitialMessage(); - if (initMsg != null) { - AppInitializer.clickAction = initMsg.data['click_action'].replaceAll( - 'navigate-', - '', - ); - } - } runApp(const Didvan()); } diff --git a/lib/services/app_initalizer.dart b/lib/services/app_initalizer.dart index 8d04ecf..cc0bd09 100644 --- a/lib/services/app_initalizer.dart +++ b/lib/services/app_initalizer.dart @@ -1,21 +1,38 @@ import 'package:didvan/models/settings_data.dart'; +import 'package:didvan/services/media/media.dart'; import 'package:didvan/services/storage/storage.dart'; +import 'package:didvan/views/home/studio/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'; import 'package:flutter/material.dart'; import 'package:path_provider/path_provider.dart'; +import 'package:provider/provider.dart'; class AppInitializer { static String? fcmToken; static String? clickAction; - static Future setupServices() async { + static Future setupServices(BuildContext context) async { if (!kIsWeb) { StorageService.appDocsDir = (await getApplicationDocumentsDirectory()).path; StorageService.appTempsDir = (await getTemporaryDirectory()).path; } + + final studioState = context.read(); + + MediaService.audioPlayer.isPlaying.listen((event) { + if (event && + (MediaService.audioPlayerTag?.contains('podcast') ?? false)) { + studioState.handleTracking( + id: MediaService.currentPodcast!.id, + sendRequest: false, + ); + } else if (MediaService.audioPlayerTag?.contains('podcast') ?? false) { + studioState.handleTracking(id: MediaService.currentPodcast!.id); + } + }); } static Future initilizeSettings() async { @@ -82,6 +99,13 @@ class AppInitializer { } catch (e) { Firebase.app(); } + final initMsg = await FirebaseMessaging.instance.getInitialMessage(); + if (initMsg != null) { + clickAction = initMsg.data['click_action'].replaceAll( + 'navigate-', + '', + ); + } final FirebaseMessaging fcm = FirebaseMessaging.instance; fcmToken = await fcm.getToken( vapidKey: kIsWeb diff --git a/lib/services/network/request_helper.dart b/lib/services/network/request_helper.dart index 0170ce6..ab0336e 100644 --- a/lib/services/network/request_helper.dart +++ b/lib/services/network/request_helper.dart @@ -97,7 +97,7 @@ class RequestHelper { MapEntry('search', args.search), ]); - static String sudioSlider(String type) => + static String studioSlider(String type) => _baseStudioUrl + '/slider' + _urlConcatGenerator([MapEntry('type', type)]); diff --git a/lib/views/home/home.dart b/lib/views/home/home.dart index 2f08d76..aec1a56 100644 --- a/lib/views/home/home.dart +++ b/lib/views/home/home.dart @@ -1,15 +1,10 @@ import 'package:didvan/config/design_config.dart'; -import 'package:didvan/models/requests/news.dart'; -import 'package:didvan/models/requests/radar.dart'; -import 'package:didvan/models/requests/studio.dart'; -import 'package:didvan/services/app_initalizer.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/statistic/statistic.dart'; import 'package:didvan/views/home/studio/studio.dart'; -import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart'; import 'package:didvan/views/widgets/didvan/bnb.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -31,25 +26,6 @@ class _HomeState extends State with SingleTickerProviderStateMixin { _tabController.addListener(() { context.read().currentPageIndex = _tabController.index; }); - // if (AppInitializer.clickAction != null) { - // final clickAction = AppInitializer.clickAction!; - // String routeName = ''; - // if (clickAction.contains('podcast')) { - // context.read().getStudioDetails(); - // return; - // } - // Navigator.of(context).pushNamed( - // clickAction.split('-').first, - // arguments: { - // 'id': clickAction.split('-')[1], - // 'args': clickAction.contains('radar') - // ? const RadarRequestArgs(page: 0) - // : clickAction.contains('news') - // ? const NewsRequestArgs(page: 0) - // : const StudioRequestArgs(page: 0), - // }, - // ); - // } super.initState(); } diff --git a/lib/views/home/news/news_details/news_details_state.dart b/lib/views/home/news/news_details/news_details_state.dart index da3530c..2f07cd2 100644 --- a/lib/views/home/news/news_details/news_details_state.dart +++ b/lib/views/home/news/news_details/news_details_state.dart @@ -104,6 +104,7 @@ class NewsDetailsState extends CoreProvier { ); service.put(); _trackingTimerCounter = 0; + _trackingTimer.cancel(); } Future getRelatedContents() async { diff --git a/lib/views/home/radar/radar_details/radar_details_state.dart b/lib/views/home/radar/radar_details/radar_details_state.dart index 5939259..e0c9a2f 100644 --- a/lib/views/home/radar/radar_details/radar_details_state.dart +++ b/lib/views/home/radar/radar_details/radar_details_state.dart @@ -137,6 +137,7 @@ class RadarDetailsState extends CoreProvier { ); service.put(); _trackingTimerCounter = 0; + _trackingTimer.cancel(); } @override diff --git a/lib/views/home/studio/studio_details/studio_details.mobile.dart b/lib/views/home/studio/studio_details/studio_details.mobile.dart index b42266c..eeb689d 100644 --- a/lib/views/home/studio/studio_details/studio_details.mobile.dart +++ b/lib/views/home/studio/studio_details/studio_details.mobile.dart @@ -63,6 +63,7 @@ class _StudioDetailsState extends State { if (MediaService.currentPodcast != null) { state.studio = MediaService.currentPodcast!; } + state.handleTracking(id: state.studio.id); return true; }, child: SafeArea( diff --git a/lib/views/home/studio/studio_details/studio_details.web.dart b/lib/views/home/studio/studio_details/studio_details.web.dart index 95aa28f..f7f5d94 100644 --- a/lib/views/home/studio/studio_details/studio_details.web.dart +++ b/lib/views/home/studio/studio_details/studio_details.web.dart @@ -57,6 +57,7 @@ class _StudioDetailsState extends State { if (MediaService.currentPodcast != null) { state.studio = MediaService.currentPodcast!; } + state.handleTracking(id: state.studio.id); return true; }, child: SafeArea( diff --git a/lib/views/home/studio/studio_details/studio_details_state.dart b/lib/views/home/studio/studio_details/studio_details_state.dart index 1d4e994..190418e 100644 --- a/lib/views/home/studio/studio_details/studio_details_state.dart +++ b/lib/views/home/studio/studio_details/studio_details_state.dart @@ -19,6 +19,8 @@ class StudioDetailsState extends CoreProvier { final List relatedQueue = []; bool _positionListenerActivated = false; AppState alongSideState = AppState.idle; + int _trackingTimerCounter = 0; + late Timer _trackingTimer; int _selectedDetailsIndex = 0; Timer? timer; @@ -84,6 +86,9 @@ class StudioDetailsState extends CoreProvier { } stopOnPodcastEnds = false; if (service.isSuccess) { + if (args?.type == 'video') { + handleTracking(id: id, sendRequest: false); + } final result = service.result; studio = StudioDetailsData.fromJson(result['studio']); if (result['nextStudio'].isNotEmpty && this.args.page != 0) { @@ -167,4 +172,32 @@ class StudioDetailsState extends CoreProvier { studio.comments = count; notifyListeners(); } + + Future handleTracking({ + required int id, + bool sendRequest = true, + }) async { + if (!sendRequest) { + _trackingTimerCounter = 0; + _trackingTimer = Timer.periodic(const Duration(seconds: 1), (timer) { + _trackingTimerCounter++; + }); + return; + } + final service = RequestService( + RequestHelper.tracking(id, 'studio'), + body: { + 'sec': _trackingTimerCounter, + }, + ); + service.put(); + _trackingTimerCounter = 0; + _trackingTimer.cancel(); + } + + @override + void dispose() { + _trackingTimer.cancel(); + super.dispose(); + } } diff --git a/lib/views/home/studio/studio_state.dart b/lib/views/home/studio/studio_state.dart index bb5b65a..2ae68f1 100644 --- a/lib/views/home/studio/studio_state.dart +++ b/lib/views/home/studio/studio_state.dart @@ -64,7 +64,7 @@ class StudioState extends CoreProvier { Future _getSliders() async { final service = RequestService( - RequestHelper.sudioSlider(type), + RequestHelper.studioSlider(type), ); await service.httpGet(); if (service.isSuccess) { diff --git a/lib/views/home/widgets/audio/audio_player_widget.dart b/lib/views/home/widgets/audio/audio_player_widget.dart index 79d1aff..a86ff33 100644 --- a/lib/views/home/widgets/audio/audio_player_widget.dart +++ b/lib/views/home/widgets/audio/audio_player_widget.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'dart:math'; +import 'package:assets_audio_player/assets_audio_player.dart'; import 'package:didvan/config/design_config.dart'; import 'package:didvan/config/theme_data.dart'; import 'package:didvan/constants/app_icons.dart'; @@ -125,12 +126,20 @@ class AudioPlayerWidget extends StatelessWidget { ), Expanded( child: Center( - child: StreamBuilder( - stream: MediaService.audioPlayer.isPlaying, + child: StreamBuilder( + stream: MediaService.audioPlayer.onReadyToPlay, builder: (context, snapshot) { - return _PlayPouseAnimatedIcon( - audioSource: podcast.link, - id: podcast.id, + if (snapshot.data == null) { + return const CircularProgressIndicator(); + } + return StreamBuilder( + stream: MediaService.audioPlayer.isPlaying, + builder: (context, snapshot) { + return _PlayPouseAnimatedIcon( + audioSource: podcast.link, + id: podcast.id, + ); + }, ); }, ), diff --git a/lib/views/home/widgets/overview/multitype.dart b/lib/views/home/widgets/overview/multitype.dart index 136d78e..ab99a2d 100644 --- a/lib/views/home/widgets/overview/multitype.dart +++ b/lib/views/home/widgets/overview/multitype.dart @@ -166,7 +166,7 @@ class MultitypeOverview extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: const [ - ShimmerPlaceholder(height: 18, width: 200), + ShimmerPlaceholder(height: 18, width: 150), SizedBox(height: 8), ShimmerPlaceholder(height: 18, width: 100), Spacer(), diff --git a/lib/views/splash/splash.dart b/lib/views/splash/splash.dart index 7642e71..85d77f2 100644 --- a/lib/views/splash/splash.dart +++ b/lib/views/splash/splash.dart @@ -105,7 +105,7 @@ class _SplashState extends State { _isGettingThemeData = false; }), ); - await AppInitializer.setupServices(); + await AppInitializer.setupServices(context); final userProvider = context.read(); final String? token = await userProvider.setAndGetToken(); if (token != null) { diff --git a/lib/views/widgets/didvan/button.dart b/lib/views/widgets/didvan/button.dart index de7498b..c5a18c5 100644 --- a/lib/views/widgets/didvan/button.dart +++ b/lib/views/widgets/didvan/button.dart @@ -70,9 +70,12 @@ class DidvanButton extends StatelessWidget { Widget? _childBuilder(Color color, context) { if (title != null) { - return DidvanText( - title!, - color: enabled ? color : Theme.of(context).colorScheme.disabledText, + return FittedBox( + fit: BoxFit.scaleDown, + child: DidvanText( + title!, + color: enabled ? color : Theme.of(context).colorScheme.disabledText, + ), ); } return null; diff --git a/lib/views/widgets/didvan/page_view.dart b/lib/views/widgets/didvan/page_view.dart index b7ada13..6de7ca9 100644 --- a/lib/views/widgets/didvan/page_view.dart +++ b/lib/views/widgets/didvan/page_view.dart @@ -160,11 +160,7 @@ class _DidvanPageViewState extends State { i < item.relatedContents.length; i++) Padding( - padding: const EdgeInsets.only( - bottom: 8, - left: 16, - right: 16, - ), + padding: const EdgeInsets.only(bottom: 8), child: MultitypeOverview( item: item.relatedContents[i], onMarkChanged: (id, value) {}, diff --git a/pubspec.lock b/pubspec.lock index a460b0a..183760b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -168,7 +168,7 @@ packages: name: ffi url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.1" file: dependency: transitive description: @@ -182,42 +182,42 @@ packages: name: firebase_core url: "https://pub.dartlang.org" source: hosted - version: "1.17.1" + version: "1.18.0" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "4.4.0" + version: "4.4.1" firebase_core_web: dependency: transitive description: name: firebase_core_web url: "https://pub.dartlang.org" source: hosted - version: "1.6.4" + version: "1.6.5" firebase_messaging: dependency: "direct main" description: name: firebase_messaging url: "https://pub.dartlang.org" source: hosted - version: "11.4.1" + version: "11.4.2" firebase_messaging_platform_interface: dependency: transitive description: name: firebase_messaging_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "3.5.1" + version: "3.5.2" firebase_messaging_web: dependency: transitive description: name: firebase_messaging_web url: "https://pub.dartlang.org" source: hosted - version: "2.4.1" + version: "2.4.2" fl_chart: dependency: "direct main" description: @@ -250,7 +250,7 @@ packages: name: flutter_html url: "https://pub.dartlang.org" source: hosted - version: "3.0.0-alpha.3" + version: "3.0.0-alpha.5" flutter_lints: dependency: "direct dev" description: @@ -405,7 +405,7 @@ packages: name: image_picker_android url: "https://pub.dartlang.org" source: hosted - version: "0.8.5" + version: "0.8.5+1" image_picker_for_web: dependency: transitive description: @@ -524,14 +524,14 @@ packages: name: path_provider_android url: "https://pub.dartlang.org" source: hosted - version: "2.0.14" + version: "2.0.15" path_provider_ios: dependency: transitive description: name: path_provider_ios url: "https://pub.dartlang.org" source: hosted - version: "2.0.9" + version: "2.0.10" path_provider_linux: dependency: transitive description: @@ -830,14 +830,14 @@ packages: name: url_launcher_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "2.1.0" url_launcher_web: dependency: transitive description: name: url_launcher_web url: "https://pub.dartlang.org" source: hosted - version: "2.0.11" + version: "2.0.12" url_launcher_windows: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index aa3ab41..daef981 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 2.2.1+19 +version: 2.2.2+20 environment: sdk: ">=2.17.0 <3.0.0"