notif fix -- rhmn

This commit is contained in:
OkaykOrhmn 2024-06-30 09:36:49 +03:30
parent c87859d46e
commit 7262ae8eb5
11 changed files with 224 additions and 148 deletions

View File

@ -5,6 +5,7 @@
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" /> <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/> <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>

View File

@ -1,3 +1,5 @@
import 'dart:io';
import 'package:android_intent_plus/android_intent.dart'; import 'package:android_intent_plus/android_intent.dart';
import 'package:bot_toast/bot_toast.dart'; import 'package:bot_toast/bot_toast.dart';
import 'package:didvan/config/theme_data.dart'; import 'package:didvan/config/theme_data.dart';
@ -9,10 +11,13 @@ import 'package:didvan/routes/route_generator.dart';
import 'package:didvan/routes/routes.dart'; import 'package:didvan/routes/routes.dart';
import 'package:didvan/services/app_home_widget/home_widget_repository.dart'; import 'package:didvan/services/app_home_widget/home_widget_repository.dart';
import 'package:didvan/services/app_initalizer.dart'; import 'package:didvan/services/app_initalizer.dart';
import 'package:didvan/services/media/media.dart';
import 'package:didvan/services/notification/awsome/awsome_notification_handler.dart'; import 'package:didvan/services/notification/awsome/awsome_notification_handler.dart';
import 'package:didvan/views/podcasts/podcasts_state.dart'; import 'package:didvan/views/podcasts/podcasts_state.dart';
import 'package:didvan/views/podcasts/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:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:home_widget/home_widget.dart'; import 'package:home_widget/home_widget.dart';
@ -23,10 +28,40 @@ final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
@pragma('vm:entry-point') @pragma('vm:entry-point')
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async { Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
await AppInitializer.initializeFirebase(); await Firebase.initializeApp(
await AwsomeNotificationHandler.startListeningNotificationEvents(); options: kIsWeb
await AwsomeNotificationHandler().show(message); ? const FirebaseOptions(
apiKey: "AIzaSyA0HZjKpRuPOi1SC3f_EZTvlS3mcj9UVo0",
authDomain: "didvan-9b7da.firebaseapp.com",
projectId: "didvan-9b7da",
storageBucket: "didvan-9b7da.appspot.com",
messagingSenderId: "935017686266",
appId: "1:935017686266:web:a93f7a19bed23c51d2d543",
measurementId: "G-80B4H9E8Y0")
: Platform.isAndroid
? const FirebaseOptions(
apiKey: 'AIzaSyBp-UHjWeM0H0UHtX5yguFKG-riMzvvCzw',
appId: '1:935017686266:android:f9cbc9aba8e3d65ed2d543',
messagingSenderId: '935017686266',
projectId: 'didvan-9b7da',
)
: const FirebaseOptions(
apiKey: 'AIzaSyCMa-zg_uVhOfTnea5Klz6aPZlgHwVGj7U',
appId: '1:935017686266:ios:de47638bd662463fd2d543',
messagingSenderId: '935017686266',
projectId: 'didvan-9b7da',
// iosBundleId: "com.didvan.didvanapp",
// storageBucket: "didvan-9b7da.appspot.com",
// iosClientId:
// "935017686266-54hu01v9cc5pqpgofo1gk2n3hegj4r2m.apps.googleusercontent.com"
),
);
print("background: ${NotificationMessage.fromJson(message.data).toJson()}");
try {
await AwsomeNotificationHandler().show(message);
} catch (e) {
rethrow;
}
return; return;
} }
@ -43,18 +78,21 @@ Future<void> _backgroundCallbackHomeWidget(Uri? uri) async {
} }
void main() async { void main() async {
WidgetsFlutterBinding.ensureInitialized();
try { try {
WidgetsFlutterBinding.ensureInitialized(); await AwsomeNotificationHandler().alarm();
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler); FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
FirebaseMessaging.onMessage.listen(
(RemoteMessage message) => AwsomeNotificationHandler().show(message));
//ignore: deprecated_member_use //ignore: deprecated_member_use
HomeWidget.registerBackgroundCallback(_backgroundCallbackHomeWidget); HomeWidget.registerBackgroundCallback(_backgroundCallbackHomeWidget);
HomeWidget.registerInteractivityCallback(_backgroundCallbackHomeWidget); HomeWidget.registerInteractivityCallback(_backgroundCallbackHomeWidget);
await AwsomeNotificationHandler().alarm();
await AppInitializer.initializeFirebase(); await AppInitializer.initializeFirebase();
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
print(
"forground: ${NotificationMessage.fromJson(message.data).toJson()}");
AwsomeNotificationHandler().show(message);
});
} catch (e) { } catch (e) {
debugPrintStack(); rethrow;
} }
runApp(const Didvan()); runApp(const Didvan());
@ -84,6 +122,7 @@ class _DidvanState extends State<Didvan> with WidgetsBindingObserver {
@override @override
void dispose() { void dispose() {
WidgetsBinding.instance.removeObserver(this); WidgetsBinding.instance.removeObserver(this);
// MediaService.audioPlayer.dispose();
super.dispose(); super.dispose();
} }

View File

@ -17,6 +17,9 @@ import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../models/notification_message.dart';
import 'notification/awsome/awsome_notification_handler.dart';
class AppInitializer { class AppInitializer {
static String? fcmToken; static String? fcmToken;
static String? clickAction; static String? clickAction;
@ -196,6 +199,7 @@ class AppInitializer {
? 'BMXHGd93t_htpS7c62ceuuLVVmia2cEDmqxp46g9Vt0B3OxNMKIqN9nupsUMtv2Vq8Yy2sQGIqgCm9FxUSKvssU' ? 'BMXHGd93t_htpS7c62ceuuLVVmia2cEDmqxp46g9Vt0B3OxNMKIqN9nupsUMtv2Vq8Yy2sQGIqgCm9FxUSKvssU'
: null, : null,
); );
print("FCM TOKEN: $fcmToken");
// await fcm.subscribeToTopic('general'); // await fcm.subscribeToTopic('general');
await fcm.requestPermission( await fcm.requestPermission(
alert: true, alert: true,
@ -206,5 +210,7 @@ class AppInitializer {
provisional: false, provisional: false,
sound: true, sound: true,
); );
} }
} }

View File

@ -81,7 +81,13 @@ class MediaService {
audioPlayerTag = null; audioPlayerTag = null;
currentPodcast = null; currentPodcast = null;
podcastPlaylistArgs = null; podcastPlaylistArgs = null;
MediaService.audioPlayer.stop(); if(MediaService.audioPlayer.isPlaying.value){
MediaService.audioPlayer.stop();
}else{
MediaService.audioPlayer.dispose();
}
} }
static Future<XFile?> pickImage({required ImageSource source}) async { static Future<XFile?> pickImage({required ImageSource source}) async {

View File

@ -122,12 +122,13 @@ class AwsomeNotificationHandler {
channelKey: 'alerts', channelKey: 'alerts',
actionType: ActionType.Default, actionType: ActionType.Default,
title: "\u200f ${message.title} \u200f", title: "\u200f ${message.title} \u200f",
// body: message.body.toString(), body: message.body.toString(),
notificationLayout: Platform.isAndroid notificationLayout: NotificationLayout.BigPicture,
? NotificationLayout.Default
: NotificationLayout.BigPicture,
largeIcon: message.image.toString(), largeIcon: message.image.toString(),
bigPicture: Platform.isAndroid ? null : message.image.toString(), bigPicture: message.image.toString(),
category: NotificationCategory.Social,
wakeUpScreen: true,
hideLargeIconOnExpand: true,
payload: message.toPayload(), payload: message.toPayload(),
color: const Color(0xFF007EA7)), color: const Color(0xFF007EA7)),
); );

View File

@ -28,6 +28,7 @@ class StudioDetailsState extends CoreProvier {
bool stopOnPodcastEnds = false; bool stopOnPodcastEnds = false;
int get selectedDetailsIndex => _selectedDetailsIndex; int get selectedDetailsIndex => _selectedDetailsIndex;
set selectedDetailsIndex(int value) { set selectedDetailsIndex(int value) {
_selectedDetailsIndex = value; _selectedDetailsIndex = value;
if (value == 2) { if (value == 2) {
@ -42,83 +43,88 @@ class StudioDetailsState extends CoreProvier {
bool? isForward, bool? isForward,
bool fetchOnly = false, bool fetchOnly = false,
}) async { }) async {
if (args != null) { try {
this.args = args; if (args != null) {
} this.args = args;
if (this.args?.type == 'podcast') {
podcastArgs = this.args;
}
if (MediaService.currentPodcast?.id == id &&
this.args?.type == 'podcast' &&
!fetchOnly) {
return;
}
_selectedDetailsIndex = 0;
if (isForward != null) {
if (isForward) {
prevStudio = studio;
studio = nextStudio!;
nextStudio = null;
} else {
nextStudio = studio;
studio = prevStudio!;
prevStudio = null;
} }
notifyListeners();
_handlePodcastPlayback(studio);
}
if (isForward == null) {
if (this.args?.type == 'podcast') { if (this.args?.type == 'podcast') {
MediaService.audioPlayerTag = podcastArgs = this.args;
'podcast-${MediaService.currentPodcast?.id ?? ''}';
} }
appState = AppState.busy; if (MediaService.currentPodcast?.id == id &&
} else { this.args?.type == 'podcast' &&
alongSideState = AppState.busy; !fetchOnly) {
notifyListeners(); return;
}
final service = RequestService(
RequestHelper.studioDetails(
id,
this.args ?? const StudioRequestArgs(page: 0),
),
);
await service.httpGet();
nextStudio = null;
prevStudio = null;
if (stopOnPodcastEnds) {
timerValue = 10;
}
stopOnPodcastEnds = false;
if (service.isSuccess) {
if (args?.type == 'video') {
handleTracking(id: id, sendRequest: false);
} }
final result = service.result; _selectedDetailsIndex = 0;
studio = StudioDetailsData.fromJson(result['studio']); if (isForward != null) {
if (args?.page == 0) { if (isForward) {
initialIndex = 0; prevStudio = studio;
studio = nextStudio!;
nextStudio = null;
} else {
nextStudio = studio;
studio = prevStudio!;
prevStudio = null;
}
notifyListeners();
_handlePodcastPlayback(studio);
}
if (isForward == null) {
if (this.args?.type == 'podcast') {
MediaService.audioPlayerTag =
'podcast-${MediaService.currentPodcast?.id ?? ''}';
}
appState = AppState.busy;
} else {
alongSideState = AppState.busy;
notifyListeners();
}
final service = RequestService(
RequestHelper.studioDetails(
id,
this.args ?? const StudioRequestArgs(page: 0),
),
);
await service.httpGet();
nextStudio = null;
prevStudio = null;
if (stopOnPodcastEnds) {
timerValue = 10;
}
stopOnPodcastEnds = false;
if (service.isSuccess) {
if (args?.type == 'video') {
handleTracking(id: id, sendRequest: false);
}
final result = service.result;
studio = StudioDetailsData.fromJson(result['studio']);
if (args?.page == 0) {
initialIndex = 0;
appState = AppState.idle;
return;
}
if (result['nextStudio'].isNotEmpty && this.args?.page != 0) {
nextStudio = StudioDetailsData.fromJson(result['nextStudio']);
}
if (result['prevStudio'].isNotEmpty && this.args?.page != 0) {
prevStudio = StudioDetailsData.fromJson(result['prevStudio']);
}
if (isForward == null && !fetchOnly) {
await _handlePodcastPlayback(studio);
}
alongSideState = AppState.idle;
appState = AppState.idle; appState = AppState.idle;
return; return;
} }
if (result['nextStudio'].isNotEmpty && this.args?.page != 0) { if (isForward == null) {
nextStudio = StudioDetailsData.fromJson(result['nextStudio']); appState = AppState.failed;
} else {
alongSideState = AppState.failed;
notifyListeners();
} }
if (result['prevStudio'].isNotEmpty && this.args?.page != 0) { } catch (e) {
prevStudio = StudioDetailsData.fromJson(result['prevStudio']); MediaService.audioPlayer.dispose();
} rethrow;
if (isForward == null && !fetchOnly) {
await _handlePodcastPlayback(studio);
}
alongSideState = AppState.idle;
appState = AppState.idle;
return;
}
if (isForward == null) {
appState = AppState.failed;
} else {
alongSideState = AppState.failed;
notifyListeners();
} }
} }
@ -157,6 +163,7 @@ class StudioDetailsState extends CoreProvier {
} }
} else { } else {
MediaService.audioPlayer.pause(); MediaService.audioPlayer.pause();
MediaService.audioPlayer.dispose();
} }
} }

View File

@ -93,10 +93,10 @@ class ProfilePage extends StatelessWidget {
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
DidvanText( DidvanText(
'نسخه نرم‌افزار: 3.2.1', 'نسخه نرم‌افزار: 3.2.2',
style: Theme.of(context).textTheme.bodySmall, style: Theme.of(context).textTheme.bodySmall,
), ),
], ],
); );
} }
} }

View File

@ -139,8 +139,9 @@ class _PlayerNavBar extends StatelessWidget {
child: Builder(builder: (context) { child: Builder(builder: (context) {
if (!_enablePlayerController(state)) return const SizedBox(); if (!_enablePlayerController(state)) return const SizedBox();
if (state.appState == AppState.failed) { if (state.appState == AppState.failed) {
Future.delayed(const Duration(seconds: 2), () { Future.delayed(const Duration(seconds: 2), () async{
MediaService.resetAudioPlayer(); await MediaService.resetAudioPlayer();
_enablePlayerController(state);
}); });
return DidvanText( return DidvanText(
'اتصال اینترنت برقرار نمی‌باشد', 'اتصال اینترنت برقرار نمی‌باشد',
@ -204,7 +205,10 @@ class _PlayerNavBar extends StatelessWidget {
? null ? null
: Theme.of(context).colorScheme.secondCTA, : Theme.of(context).colorScheme.secondCTA,
gestureSize: 28, gestureSize: 28,
onPressed: MediaService.resetAudioPlayer, onPressed: () async {
await MediaService.resetAudioPlayer();
_enablePlayerController(state);
},
), ),
), ),
SkeletonImage( SkeletonImage(
@ -399,6 +403,7 @@ class _NavBarItem extends StatelessWidget {
final String title; final String title;
final IconData selectedIcon; final IconData selectedIcon;
final IconData unselectedIcon; final IconData unselectedIcon;
const _NavBarItem({ const _NavBarItem({
Key? key, Key? key,
required this.isSelected, required this.isSelected,

View File

@ -61,6 +61,16 @@ class _DidvanScaffoldState extends State<DidvanScaffold> {
super.initState(); super.initState();
} }
@override
void dispose() {
if(!widget.hidePlayer){
if(MediaService.currentPodcast != null){
MediaService.audioPlayer.dispose();
}
}
super.dispose();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final double statusBarHeight = MediaQuery.of(context).padding.top; final double statusBarHeight = MediaQuery.of(context).padding.top;
@ -206,6 +216,7 @@ class _PlayerNavBar extends StatelessWidget {
MediaService.currentPodcast != null || MediaService.currentPodcast != null ||
(MediaService.audioPlayerTag?.contains('podcast') ?? false); (MediaService.audioPlayerTag?.contains('podcast') ?? false);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return StreamBuilder<bool>( return StreamBuilder<bool>(

View File

@ -5,26 +5,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: _flutterfire_internals name: _flutterfire_internals
sha256: e4be6711f96d3d4eebe79728897d645b7a5585bbfdd6d534878d202c171266d7 sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.34" version: "1.3.35"
android_intent_plus: android_intent_plus:
dependency: "direct main" dependency: "direct main"
description: description:
name: android_intent_plus name: android_intent_plus
sha256: bfb29839be3886fa48faa631aa0123cd8531205df1abb80ee804935c75dd3cdb sha256: "2bfdbee8d65e7c26f88b66f0a91f2863da4d3596d8a658b4162c8de5cf04b074"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.0.0" version: "5.0.2"
animated_custom_dropdown: animated_custom_dropdown:
dependency: "direct main" dependency: "direct main"
description: description:
name: animated_custom_dropdown name: animated_custom_dropdown
sha256: "9e286defa42f2e774285015d7ff29523a24260888d53f79a3635328fad5bdad7" sha256: "5a72dc209041bb53f6c7164bc2e366552d5197cdb032b1c9b2c36e3013024486"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.0" version: "3.1.1"
animated_toggle_switch: animated_toggle_switch:
dependency: "direct main" dependency: "direct main"
description: description:
@ -69,10 +69,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: audio_video_progress_bar name: audio_video_progress_bar
sha256: ccc7d7b83d2a16c52d4a7fb332faabd1baa053fb0e4c16815aefd3945ab33b81 sha256: "552b1f73c56c4c88407999e0a8507176f60c56de3e6d63bc20a0eab48467d4c9"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.2" version: "2.0.3"
awesome_notifications: awesome_notifications:
dependency: "direct main" dependency: "direct main"
description: description:
@ -302,74 +302,74 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: firebase_auth name: firebase_auth
sha256: ea95cd29e27e8ec1971af263d74b208ce85dbc7df9197d8b5eab2aa7de7cfea8 sha256: cfc2d970829202eca09e2896f0a5aa7c87302817ecc0bdfa954f026046bf10ba
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.19.6" version: "4.20.0"
firebase_auth_platform_interface: firebase_auth_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: firebase_auth_platform_interface name: firebase_auth_platform_interface
sha256: c252d2c97a02cf03fbf3595c5f7edf2a731062356b09d2c338f0b3d63567239f sha256: a0270e1db3b2098a14cb2a2342b3cd2e7e458e0c391b1f64f6f78b14296ec093
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.2.7" version: "7.3.0"
firebase_auth_web: firebase_auth_web:
dependency: transitive dependency: transitive
description: description:
name: firebase_auth_web name: firebase_auth_web
sha256: "5db2319d59b4bb08cf0cc26e0f110f9ae1cf9cf775ce516e5cc38cd6704253de" sha256: "64e067e763c6378b7e774e872f0f59f6812885e43020e25cde08f42e9459837b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.11.6" version: "5.12.0"
firebase_core: firebase_core:
dependency: "direct main" dependency: "direct main"
description: description:
name: firebase_core name: firebase_core
sha256: "4b5100e2dbc3fe72c2d4241a046d3f01457fe11293283a324f5c52575e3406f8" sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.31.1" version: "2.32.0"
firebase_core_platform_interface: firebase_core_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: firebase_core_platform_interface name: firebase_core_platform_interface
sha256: c437ae5d17e6b5cc7981cf6fd458a5db4d12979905f9aafd1fea930428a9fe63 sha256: "1003a5a03a61fc9a22ef49f37cbcb9e46c86313a7b2e7029b9390cf8c6fc32cb"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.0.0" version: "5.1.0"
firebase_core_web: firebase_core_web:
dependency: transitive dependency: transitive
description: description:
name: firebase_core_web name: firebase_core_web
sha256: "43d9e951ac52b87ae9cc38ecdcca1e8fa7b52a1dd26a96085ba41ce5108db8e9" sha256: "6643fe3dbd021e6ccfb751f7882b39df355708afbdeb4130fc50f9305a9d1a3d"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.17.0" version: "2.17.2"
firebase_messaging: firebase_messaging:
dependency: "direct main" dependency: "direct main"
description: description:
name: firebase_messaging name: firebase_messaging
sha256: e0882a7426821f7caccaabfc15a535155cd15b4daa73a5a7b3af701a552d73ab sha256: a1662cc95d9750a324ad9df349b873360af6f11414902021f130c68ec02267c4
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "14.9.2" version: "14.9.4"
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: "52e12cc50e1395ad7ea3552dcbe9958fb1994b5afcf58ee4c0db053932a6fce5" sha256: "87c4a922cb6f811cfb7a889bdbb3622702443c52a0271636cbc90d813ceac147"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.5.35" version: "4.5.37"
firebase_messaging_web: firebase_messaging_web:
dependency: transitive dependency: transitive
description: description:
name: firebase_messaging_web name: firebase_messaging_web
sha256: "8812cc5929380b783f92290d934bf32e2fea06701583f47cdccd5f13f4f24522" sha256: "0d34dca01a7b103ed7f20138bffbb28eb0e61a677bf9e78a028a932e2c7322d5"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.8.5" version: "3.8.7"
fl_chart: fl_chart:
dependency: "direct main" dependency: "direct main"
description: description:
@ -411,10 +411,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_local_notifications name: flutter_local_notifications
sha256: "40e6fbd2da7dcc7ed78432c5cdab1559674b4af035fddbfb2f9a8f9c2112fcef" sha256: ced76d337f54de33d7d9f06092137b4ac2da5079e00cee8a11a1794ffc7c61c6
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "17.1.2" version: "17.2.1"
flutter_local_notifications_linux: flutter_local_notifications_linux:
dependency: transitive dependency: transitive
description: description:
@ -427,10 +427,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: flutter_local_notifications_platform_interface name: flutter_local_notifications_platform_interface
sha256: "340abf67df238f7f0ef58f4a26d2a83e1ab74c77ab03cd2b2d5018ac64db30b7" sha256: "85f8d07fe708c1bdcf45037f2c0109753b26ae077e9d9e899d55971711a4ea66"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.1.0" version: "7.2.0"
flutter_localizations: flutter_localizations:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@ -464,18 +464,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: flutter_secure_storage_macos name: flutter_secure_storage_macos
sha256: "8cfa53010a294ff095d7be8fa5bb15f2252c50018d69c5104851303f3ff92510" sha256: "1693ab11121a5f925bbea0be725abfcfbbcf36c1e29e571f84a0c0f436147a81"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.1.0" version: "3.1.2"
flutter_secure_storage_platform_interface: flutter_secure_storage_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: flutter_secure_storage_platform_interface name: flutter_secure_storage_platform_interface
sha256: "301f67ee9b87f04aef227f57f13f126fa7b13543c8e7a93f25c5d2d534c28a4a" sha256: cf91ad32ce5adef6fba4d736a542baca9daf3beac4db2d04be350b87f69ac4a8
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.1" version: "1.1.2"
flutter_secure_storage_web: flutter_secure_storage_web:
dependency: transitive dependency: transitive
description: description:
@ -602,18 +602,18 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: image_picker name: image_picker
sha256: "33974eca2e87e8b4e3727f1b94fa3abcb25afe80b6bc2c4d449a0e150aedf720" sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.1" version: "1.1.2"
image_picker_android: image_picker_android:
dependency: transitive dependency: transitive
description: description:
name: image_picker_android name: image_picker_android
sha256: "79455f6cff4cbef583b2b524bbf0d4ec424e5959f4d464e36ef5323715b98370" sha256: "0f57fee1e8bfadf8cc41818bbcd7f72e53bb768a54d9496355d5e8a5681a19f1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.8.12" version: "0.8.12+1"
image_picker_for_web: image_picker_for_web:
dependency: transitive dependency: transitive
description: description:
@ -626,10 +626,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: image_picker_ios name: image_picker_ios
sha256: cb0db0ec0d3e2cd49674f2e6053be25ccdb959832607c1cbd215dd6cf10fb0dd sha256: "6703696ad49f5c3c8356d576d7ace84d1faf459afb07accbb0fae780753ff447"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.8.11" version: "0.8.12"
image_picker_linux: image_picker_linux:
dependency: transitive dependency: transitive
description: description:
@ -842,18 +842,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: permission_handler_android name: permission_handler_android
sha256: "8bb852cd759488893805c3161d0b2b5db55db52f773dbb014420b304055ba2c5" sha256: b29a799ca03be9f999aa6c39f7de5209482d638e6f857f6b93b0875c618b7e54
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "12.0.6" version: "12.0.7"
permission_handler_apple: permission_handler_apple:
dependency: transitive dependency: transitive
description: description:
name: permission_handler_apple name: permission_handler_apple
sha256: e9ad66020b89ff1b63908f247c2c6f931c6e62699b756ef8b3c4569350cd8662 sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "9.4.4" version: "9.4.5"
permission_handler_html: permission_handler_html:
dependency: transitive dependency: transitive
description: description:
@ -882,10 +882,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: persian_datetime_picker name: persian_datetime_picker
sha256: dc9c2bbcecef594a7453307d8b41781af4c667da88e23d560e540ae3b8d8fe20 sha256: "097f69484a4ea8fdf8d2051b0b6205edbed912f096b3c521df0985f656ef5584"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.6.0" version: "2.7.0"
persian_number_utility: persian_number_utility:
dependency: "direct main" dependency: "direct main"
description: description:
@ -914,10 +914,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: platform name: platform
sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.1.4" version: "3.1.5"
plugin_platform_interface: plugin_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -1135,18 +1135,18 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: url_launcher name: url_launcher
sha256: "6ce1e04375be4eed30548f10a315826fd933c1e493206eab82eed01f438c8d2e" sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.2.6" version: "6.3.0"
url_launcher_android: url_launcher_android:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_android name: url_launcher_android
sha256: "360a6ed2027f18b73c8d98e159dda67a61b7f2e0f6ec26e86c3ada33b0621775" sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.3.1" version: "6.3.2"
url_launcher_ios: url_launcher_ios:
dependency: transitive dependency: transitive
description: description:
@ -1303,18 +1303,18 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: webview_flutter name: webview_flutter
sha256: "25e1b6e839e8cbfbd708abc6f85ed09d1727e24e08e08c6b8590d7c65c9a8932" sha256: "6869c8786d179f929144b4a1f86e09ac0eddfe475984951ea6c634774c16b522"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.7.0" version: "4.8.0"
webview_flutter_android: webview_flutter_android:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_android name: webview_flutter_android
sha256: dad3313c9ead95517bb1cae5e1c9d20ba83729d5a59e5e83c0a2d66203f27f91 sha256: "0d21cfc3bfdd2e30ab2ebeced66512b91134b39e72e97b43db2d47dda1c4e53a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.16.1" version: "3.16.3"
webview_flutter_platform_interface: webview_flutter_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -1327,10 +1327,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_wkwebview name: webview_flutter_wkwebview
sha256: f12f8d8a99784b863e8b85e4a9a5e3cf1839d6803d2c0c3e0533a8f3c5a992a7 sha256: "7affdf9d680c015b11587181171d3cad8093e449db1f7d9f0f08f4f33d24f9a0"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.13.0" version: "3.13.1"
win32: win32:
dependency: transitive dependency: transitive
description: description:

View File

@ -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: 3.2.1+3210 version: 3.2.2+3220
environment: environment:
sdk: ">=2.19.0 <3.0.0" sdk: ">=2.19.0 <3.0.0"