From 72400aac5cc28df3ef3de941b5fc6198d9459c21 Mon Sep 17 00:00:00 2001 From: Pato05 Date: Mon, 29 Jan 2024 01:24:04 +0100 Subject: [PATCH] switch to official webview, fix downloads permissions, roundedrect play button and other stuff --- android/app/build.gradle | 4 +- android/app/src/debug/AndroidManifest.xml | 3 +- android/app/src/main/AndroidManifest.xml | 22 +- android/app/src/profile/AndroidManifest.xml | 3 +- android/build.gradle | 2 + android/gradle.properties | 3 + lib/api/deezer.dart | 33 +- lib/api/download.dart | 13 + lib/api/player/audio_handler.dart | 23 +- lib/api/player/player_helper.dart | 26 -- lib/settings.dart | 14 +- lib/ui/details_screens.dart | 8 + lib/ui/external_link_route.dart | 43 ++- lib/ui/login_screen.dart | 98 ++++-- lib/ui/player_bar.dart | 7 +- lib/ui/search.dart | 6 + lib/ui/settings_screen.dart | 34 +- pubspec.lock | 325 ++++++++++---------- pubspec.yaml | 11 +- 19 files changed, 394 insertions(+), 284 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index a2175a3..e0c303c 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -33,7 +33,7 @@ apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { namespace 'f.f.freezer' - compileSdkVersion 33 + compileSdk 34 lintOptions { disable 'InvalidPackage' @@ -82,7 +82,7 @@ dependencies { implementation files('libs/jaudiotagger-2.2.3.jar') implementation files('libs/extension-flac.aar') implementation group: 'org.nanohttpd', name: 'nanohttpd', version: '2.3.1' - implementation group: 'androidx.core', name: 'core', version: '1.6.0' + implementation group: 'androidx.core', name: 'core', version: '1.12.0' } flutter { diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml index 52e260a..c91533a 100644 --- a/android/app/src/debug/AndroidManifest.xml +++ b/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,4 @@ - + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index d542126..faf4f38 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,9 +1,7 @@ + xmlns:tools="http://schemas.android.com/tools"> - + + + + + + + + + + + + tools:targetApi="m"> + diff --git a/android/build.gradle b/android/build.gradle index 3c8e8a8..8c33527 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,4 +1,5 @@ buildscript { + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() @@ -6,6 +7,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.4.2' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/android/gradle.properties b/android/gradle.properties index 46c1f16..7723ef5 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,3 +1,6 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true +android.defaults.buildfeatures.buildconfig=true +android.nonTransitiveRClass=false +android.nonFinalResIds=false diff --git a/lib/api/deezer.dart b/lib/api/deezer.dart index e3449bd..b9e94f5 100644 --- a/lib/api/deezer.dart +++ b/lib/api/deezer.dart @@ -1,7 +1,6 @@ import 'dart:io'; import 'package:cookie_jar/cookie_jar.dart'; -import 'package:crypto/crypto.dart'; import 'package:dio/dio.dart'; import 'package:dio_cookie_manager/dio_cookie_manager.dart'; import 'package:flutter/foundation.dart'; @@ -60,6 +59,11 @@ class DeezerAPI { String? userName; String? favoritesPlaylistId; String? sid; + + // JWT for pipe.deezer.com + String? jwt; + int jwtExpiration = 0; + late String licenseToken; late bool canStreamLossless; late bool canStreamHQ; @@ -207,6 +211,7 @@ class DeezerAPI { //Authorize, bool = success Future rawAuthorize({Function? onError}) async { + _logger.fine('rawAuthorize()'); try { final data = await callApi('deezer.getUserData'); if (data['results']?['USER']?['USER_ID'] == null || @@ -241,6 +246,30 @@ class DeezerAPI { } } + Future authorizePipeAPI() async { + // authorize on pipe.deezer.com + + if (DateTime.now().millisecondsSinceEpoch > jwtExpiration) { + // only continue if JWT expired! + } + + // arl should be contained in cookies, so we should be fine + final res = + await dio.post('https://auth.deezer.com/login/arl?jo=p&rto=c&i=c'); + if (res.statusCode != 200 || + res.data['jwt'] == null || + res.data['jwt'] == '') { + throw Exception('Pipe authentication failed!'); + } + + jwt = res.data['jwt']; + _logger.fine('got jwt: $jwt'); + // decode JWT + final parts = jwt!.split('.'); + final data = jsonDecode(utf8.decode(base64Url.decode(parts[1]))); + jwtExpiration = data['exp']; + } + //URL/Link parser Future parseLink(String url) async { Uri uri = Uri.parse(url); @@ -400,7 +429,7 @@ class DeezerAPI { } //Get playlist details - Future playlist(String? id, {int nb = 100}) async { + Future playlist(String? id, {int nb = 5000}) async { Map data = await callApi('deezer.pagePlaylist', params: { 'playlist_id': id, 'lang': settings.deezerLanguage, diff --git a/lib/api/download.dart b/lib/api/download.dart index ccf90a3..9f94514 100644 --- a/lib/api/download.dart +++ b/lib/api/download.dart @@ -631,8 +631,21 @@ class DownloadManager { //Check storage permission Future checkPermission() async { + if (settings.downloadPath == null) { + Fluttertoast.showToast( + msg: 'Set download path in settings first!'.i18n, + toastLength: Toast.LENGTH_LONG, + gravity: ToastGravity.BOTTOM); + return false; + } if (await Permission.storage.request().isGranted) { return true; + } else if ( // android 12 or later + await Permission.audio.request().isGranted && + await Permission.photos.request().isGranted && + await Permission.videos.request().isGranted && + await Permission.manageExternalStorage.request().isGranted) { + return true; } else { Fluttertoast.showToast( msg: 'Storage permission denied!'.i18n, diff --git a/lib/api/player/audio_handler.dart b/lib/api/player/audio_handler.dart index 9acf696..d7d5940 100644 --- a/lib/api/player/audio_handler.dart +++ b/lib/api/player/audio_handler.dart @@ -226,10 +226,10 @@ class AudioPlayerTask extends BaseAudioHandler { }); //Audio session - _audioSessionSubscription = - _player.androidAudioSessionIdStream.listen((event) { - customEvent.add({'action': 'audioSession', 'id': event}); - }); + // _audioSessionSubscription = + // _player.androidAudioSessionIdStream.listen((event) { + // customEvent.add({'action': 'audioSession', 'id': event}); + // }); //Load queue // queue.add(_queue); @@ -366,7 +366,6 @@ class AudioPlayerTask extends BaseAudioHandler { @override Future seekForward(bool begin) => Future.value(); - @override Future seekBackward(bool begin) async { // (un)favourite action if (cache.libraryTracks.contains(currentMediaItem.id)) { @@ -465,14 +464,14 @@ class AudioPlayerTask extends BaseAudioHandler { return const MediaControl( androidIcon: 'drawable/ic_heart', label: 'unfavorite', - action: MediaAction.seekBackward); + action: MediaAction.custom); } return const MediaControl( androidIcon: 'drawable/ic_heart_outline', label: 'favourite', action: MediaAction - .seekBackward, // this acts as favourite/unfavourite as it's not already used. + .custom, // this acts as favourite/unfavourite as it's not already used. ); } @@ -484,8 +483,7 @@ class AudioPlayerTask extends BaseAudioHandler { if (queue.value.isNotEmpty) favoriteControl(), /*if (_queueIndex != 0)*/ MediaControl.skipToPrevious, _player.playing ? MediaControl.pause : MediaControl.play, - /*if (_queueIndex != _queue!.length - 1)*/ MediaControl - .skipToNext, + /**/ MediaControl.skipToNext, //Stop -- USELESS. // MediaControl( // androidIcon: 'drawable/ic_action_stop', @@ -507,11 +505,12 @@ class AudioPlayerTask extends BaseAudioHandler { ), // next-30 ], systemActions: !currentMediaItemIsShow - ? const { + ? { MediaAction.seek, MediaAction.seekBackward, - MediaAction.skipToNext, - MediaAction.skipToPrevious, + if (queue.hasValue && _queueIndex != queue.value.length - 1) + MediaAction.skipToNext, + if (_queueIndex != 0) MediaAction.skipToPrevious, MediaAction.stop } : const { diff --git a/lib/api/player/player_helper.dart b/lib/api/player/player_helper.dart index 0e6dad2..fa79ffc 100644 --- a/lib/api/player/player_helper.dart +++ b/lib/api/player/player_helper.dart @@ -1,6 +1,5 @@ import 'dart:async'; import 'package:audio_service/audio_service.dart'; -import 'package:equalizer/equalizer.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:freezer/api/cache.dart'; import 'package:freezer/api/deezer.dart'; @@ -18,8 +17,6 @@ class PlayerHelper { late StreamSubscription _playbackStateStreamSubscription; QueueSource? queueSource; AudioServiceRepeatMode repeatType = AudioServiceRepeatMode.none; - int? audioSession; - int? _prevAudioSession; bool equalizerOpen = false; bool _shuffleEnabled = false; int _queueIndex = 0; @@ -95,26 +92,6 @@ class PlayerHelper { repeatType = event['repeatMode'] as AudioServiceRepeatMode; _queueIndex = getQueueIndex(); break; - case 'audioSession': - if (!settings.enableEqualizer) break; - //Save - _prevAudioSession = audioSession; - audioSession = event['id']; - if (audioSession == null) break; - //Open EQ - if (!equalizerOpen) { - Equalizer.open(event['id']); - equalizerOpen = true; - break; - } - //Change session id - if (_prevAudioSession != audioSession) { - if (_prevAudioSession != null) { - Equalizer.removeAudioSessionId(_prevAudioSession!); - } - Equalizer.setAudioSessionId(audioSession!); - } - break; //Visualizer data // case 'visualizer': // _visualizerController.add(event['data']); @@ -152,11 +129,8 @@ class PlayerHelper { _processingStateSubject.add(playbackState.processingState); } - print( - 'now ${playbackState.playing}, previous ${_playingSubject.valueOrNull}'); if (!_playingSubject.hasValue || _playingSubject.value != playbackState.playing) { - print('added!'); _playingSubject.add(playbackState.playing); } }); diff --git a/lib/settings.dart b/lib/settings.dart index 3fe9999..446424f 100644 --- a/lib/settings.dart +++ b/lib/settings.dart @@ -6,12 +6,13 @@ import 'package:freezer/api/player/audio_handler.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:hive_flutter/hive_flutter.dart'; import 'package:json_annotation/json_annotation.dart'; +import 'package:path/path.dart'; import 'package:path_provider/path_provider.dart'; import 'package:flutter/material.dart'; import 'dart:convert'; import 'dart:async'; -import 'dart:io' show Platform; +import 'dart:io' show Directory, Platform; part 'settings.g.dart'; @@ -253,12 +254,13 @@ class Settings { final settings = Settings(); if (Platform.isLinux || Platform.isMacOS || Platform.isWindows) { - settings.downloadPath = - await getDownloadsDirectory().then((path) => path!.path); + settings.downloadPath = await getDownloadsDirectory().then((path) async => + (await Directory(join(path!.path, 'Freezer')).create(recursive: true)) + .path); } else { - settings.downloadPath = - await getExternalStorageDirectories(type: StorageDirectory.music) - .then((paths) => paths![0].path); + // settings.downloadPath = + // await getExternalStorageDirectories(type: StorageDirectory.music) + // .then((paths) => paths![0].path); } return settings; diff --git a/lib/ui/details_screens.dart b/lib/ui/details_screens.dart index b575e52..3cfcbd6 100644 --- a/lib/ui/details_screens.dart +++ b/lib/ui/details_screens.dart @@ -789,6 +789,14 @@ class _PlaylistDetailsState extends State { try { tracks = await deezerAPI.playlistTracksPage(playlist!.id, pos); } catch (e) { + setState(() { + _error = true; + _loading = false; + }); + return; + } + + if (tracks == null || tracks.isEmpty) { setState(() => _error = true); return; } diff --git a/lib/ui/external_link_route.dart b/lib/ui/external_link_route.dart index ad381c1..016261c 100644 --- a/lib/ui/external_link_route.dart +++ b/lib/ui/external_link_route.dart @@ -1,15 +1,37 @@ import 'package:cookie_jar/cookie_jar.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_inappwebview/flutter_inappwebview.dart' as fwv; import 'package:freezer/api/deezer.dart'; import 'package:freezer/settings.dart'; +import 'package:webview_flutter/webview_flutter.dart'; -class ExternalLinkRoute extends StatelessWidget { +class ExternalLinkRoute extends StatefulWidget { final String title; final String target; const ExternalLinkRoute( {required this.title, required this.target, super.key}); + @override + State createState() => _ExternalLinkRouteState(); +} + +class _ExternalLinkRouteState extends State { + late final WebViewController _controller; + + @override + void initState() { + _controller = WebViewController(); + _initStateAsync(); + super.initState(); + } + + void _initStateAsync() async { + final uri = _resolveTarget(widget.target); + final headers = await _resolveHeaders(uri); + + _controller.addJavaScriptChannel('test', onMessageReceived: print); + _controller.loadRequest(uri, headers: headers); + } + Uri _resolveTarget(String target) { print('target: $target'); if (target == 'story/mdy' || target == '/story/mdy') { @@ -30,21 +52,10 @@ class ExternalLinkRoute extends StatelessWidget { @override Widget build(BuildContext context) { - Uri uriTarget = _resolveTarget(target); return Scaffold( - appBar: AppBar(title: Text(title)), - body: fwv.InAppWebView( - onWebViewCreated: (controller) async { - final uri = _resolveTarget(target); - final headers = await _resolveHeaders(uri); - controller.addWebMessageListener(fwv.WebMessageListener( - jsObjectName: 'jsObjectName', - onPostMessage: (message, sourceOrigin, isMainFrame, replyProxy) => - print('message: $message, sourceOrigin: $sourceOrigin'), - )); - controller.loadUrl( - urlRequest: fwv.URLRequest(url: uri, headers: headers)); - }, + appBar: AppBar(title: Text(widget.title)), + body: WebViewWidget( + controller: _controller, ), ); } diff --git a/lib/ui/login_screen.dart b/lib/ui/login_screen.dart index 7bc42f5..91c60c0 100644 --- a/lib/ui/login_screen.dart +++ b/lib/ui/login_screen.dart @@ -3,9 +3,9 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:freezer/api/deezer.dart'; -import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:freezer/translations.i18n.dart'; import 'package:url_launcher/url_launcher_string.dart'; +import 'package:webview_flutter/webview_flutter.dart'; import '../settings.dart'; import '../api/definitions.dart'; @@ -328,40 +328,80 @@ class LoadingWindowWait extends StatelessWidget { } } -class LoginBrowser extends StatelessWidget { +class LoginBrowser extends StatefulWidget { final Function updateParent; const LoginBrowser(this.updateParent, {super.key}); + @override + State createState() => _LoginBrowserState(); +} + +class _LoginBrowserState extends State { + late final WebViewController _controller; + + @override + void dispose() { + super.dispose(); + } + + @override + void initState() { + _controller = WebViewController() + ..clearLocalStorage() + ..setJavaScriptMode(JavaScriptMode.unrestricted) + ..setBackgroundColor(const Color(0x00000000)) + // Chrome on Android 14 + ..setUserAgent( + 'Mozilla/5.0 (Linux; Android 14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.6167.101 Mobile Safari/537.36') + ..setNavigationDelegate( + NavigationDelegate( + onProgress: (int progress) { + // Update loading bar. + }, + onPageStarted: (String url) {}, + onPageFinished: (String url) {}, + onWebResourceError: (WebResourceError error) {}, + onNavigationRequest: (NavigationRequest request) { + final uri = Uri.parse(request.url); + print('uri $uri'); + + //Parse arl from url + if (uri.host == 'deezer.page.link') { + try { + //Actual url is in `link` query parameter + Uri linkUri = Uri.parse(uri.queryParameters['link']!); + String? arl = linkUri.queryParameters['arl']; + if (arl != null) { + settings.arl = arl; + Navigator.of(context).pop(); + widget.updateParent(); + return NavigationDecision.prevent; + } + } catch (e) { + print(e); + } + } else if (!uri.path.contains('/login') && + !uri.path.contains('/register') && + !uri.path.contains('/open_app')) { + _controller.loadRequest(Uri.parse( + 'https://deezer.com/open_app?page=home&source=MF_MenuDownloadApp')); + return NavigationDecision.prevent; + } + + return NavigationDecision.navigate; + }, + ), + ) + ..loadRequest(Uri.parse('https://deezer.com/login')); + + super.initState(); + } + @override Widget build(BuildContext context) { return SafeArea( - child: InAppWebView( - initialUrlRequest: - URLRequest(url: Uri.parse('https://deezer.com/login')), - onLoadStart: (InAppWebViewController controller, Uri? uri) async { - //Offers URL - if (!uri!.path.contains('/login') && - !uri.path.contains('/register')) { - controller.evaluateJavascript( - source: 'window.location.href = "/open_app"'); - } - print('uri $uri'); - //Parse arl from url - if (uri.scheme == 'intent' && uri.host == 'deezer.page.link') { - try { - //Actual url is in `link` query parameter - Uri linkUri = Uri.parse(uri.queryParameters['link']!); - String? arl = linkUri.queryParameters['arl']; - if (arl != null) { - settings.arl = arl; - Navigator.of(context).pop(); - updateParent(); - } - } catch (e) { - print(e); - } - } - }, + child: WebViewWidget( + controller: _controller, ), ); } diff --git a/lib/ui/player_bar.dart b/lib/ui/player_bar.dart index 5a751fb..b525a77 100644 --- a/lib/ui/player_bar.dart +++ b/lib/ui/player_bar.dart @@ -222,7 +222,6 @@ class _PlayPauseButtonState extends State _animation = CurvedAnimation(parent: _controller, curve: Curves.easeInOut); _stateSubscription = playerHelper.processingState.listen((processingState) { - print('yes!'); if (processingState == AudioProcessingState.ready || audioHandler.playbackState.value.processingState == AudioProcessingState.idle) { @@ -304,13 +303,13 @@ class _PlayPauseButtonState extends State builder: (context, snapshot) { return AnimatedContainer( clipBehavior: Clip.antiAlias, - width: widget.size, + width: widget.size * (snapshot.data == true ? 1.5 : 1), height: widget.size, - duration: const Duration(milliseconds: 500), + duration: const Duration(milliseconds: 250), decoration: BoxDecoration( borderRadius: snapshot.data == true ? BorderRadius.circular(24.0) - : BorderRadius.circular(36.0), + : BorderRadius.circular(widget.size * 0.5), color: widget.color), child: child); }); diff --git a/lib/ui/search.dart b/lib/ui/search.dart index 2782fd8..75651f6 100644 --- a/lib/ui/search.dart +++ b/lib/ui/search.dart @@ -7,6 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:fluttericon/typicons_icons.dart'; +import 'package:fluttertoast/fluttertoast.dart'; import 'package:freezer/api/cache.dart'; import 'package:freezer/api/download.dart'; import 'package:freezer/api/player/audio_handler.dart'; @@ -40,6 +41,11 @@ FutureOr openScreenByURL(BuildContext context, String url) async { .push(MaterialPageRoute(builder: (context) => ArtistDetails(a))); case DeezerLinkType.PLAYLIST: Playlist p = await deezerAPI.playlist(res.id); + if (p.tracks == null || p.tracks!.isEmpty) { + ScaffoldMessenger.of(context) + .snack('The playlist is empty or private.'.i18n); + return; + } return Navigator.of(context) .push(MaterialPageRoute(builder: (context) => PlaylistDetails(p))); default: diff --git a/lib/ui/settings_screen.dart b/lib/ui/settings_screen.dart index c9fa551..84fbc07 100644 --- a/lib/ui/settings_screen.dart +++ b/lib/ui/settings_screen.dart @@ -1047,10 +1047,13 @@ class _DownloadsSettingsState extends State { ListTile( title: Text('Download path'.i18n), leading: const Icon(Icons.folder), - subtitle: Text(settings.downloadPath!), + subtitle: Text( + settings.downloadPath ?? 'Not set, click here to set!'.i18n), onTap: () async { //Check permissions - if (!await Permission.storage.request().isGranted) return; + if (!await downloadManager.checkPermission()) { + return; + } DownloadManager.getDirectory('Pick-a-Path'.i18n).then((path) { if (path == null) return; // user canceled setState(() => settings.downloadPath = path); @@ -1384,23 +1387,22 @@ class _GeneralSettingsState extends State { }); return AlertDialog( title: Text('Logging in...'.i18n), - content: - const Center(child: CircularProgressIndicator())); + content: const CircularProgressIndicator()); }); }, ), - SwitchListTile( - title: Text('Enable equalizer'.i18n), - subtitle: Text( - 'Might enable some equalizer apps to work. Requires restart of Freezer' - .i18n), - secondary: const Icon(Icons.equalizer), - value: settings.enableEqualizer, - onChanged: (v) async { - setState(() => settings.enableEqualizer = v); - settings.save(); - }, - ), + // SwitchListTile( + // title: Text('Enable equalizer'.i18n), + // subtitle: Text( + // 'Might enable some equalizer apps to work. Requires restart of Freezer' + // .i18n), + // secondary: const Icon(Icons.equalizer), + // value: settings.enableEqualizer, + // onChanged: (v) async { + // setState(() => settings.enableEqualizer = v); + // settings.save(); + // }, + // ), SwitchListTile( title: Text('Ignore interruptions'.i18n), subtitle: Text('Requires app restart to apply!'.i18n), diff --git a/pubspec.lock b/pubspec.lock index 25ff371..cf8d1b9 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -21,10 +21,10 @@ packages: dependency: transitive description: name: archive - sha256: "7e0d52067d05f2e0324268097ba723b71cb41ac8a6a2b24d1edf9c536b987b03" + sha256: "22600aa1e926be775fa5fe7e6894e7fb3df9efda8891c73f70fb3262399a432d" url: "https://pub.dev" source: hosted - version: "3.4.6" + version: "3.4.10" args: dependency: transitive description: @@ -61,10 +61,10 @@ packages: dependency: "direct main" description: name: audio_service_mpris - sha256: "31be5de2db0c71b217157afce1974ac6d0ad329bd91deb1f19ad094d29340d8e" + sha256: a8d1583f9143d17b2facc994a99bd1ea257cec43adcb8d7349458555c62b570f url: "https://pub.dev" source: hosted - version: "0.1.0" + version: "0.1.3" audio_service_platform_interface: dependency: transitive description: @@ -85,10 +85,10 @@ packages: dependency: "direct main" description: name: audio_session - sha256: "8a2bc5e30520e18f3fb0e366793d78057fb64cd5287862c76af0c8771f2a52ad" + sha256: "6fdf255ed3af86535c96452c33ecff1245990bb25a605bfb1958661ccc3d467f" url: "https://pub.dev" source: hosted - version: "0.1.16" + version: "0.1.18" boolean_selector: dependency: transitive description: @@ -117,26 +117,26 @@ packages: dependency: transitive description: name: build_daemon - sha256: "5f02d73eb2ba16483e693f80bee4f088563a820e47d1027d4cdfe62b5bb43e65" + sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.0.1" build_resolvers: dependency: transitive description: name: build_resolvers - sha256: "64e12b0521812d1684b1917bc80945625391cb9bdd4312536b1d69dcb6133ed8" + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.2" build_runner: dependency: "direct dev" description: name: build_runner - sha256: "10c6bcdbf9d049a0b666702cf1cee4ddfdc38f02a19d35ae392863b47519848b" + sha256: "581bacf68f89ec8792f5e5a0b2c4decd1c948e97ce659dc783688c8a88fbec21" url: "https://pub.dev" source: hosted - version: "2.4.6" + version: "2.4.8" build_runner_core: dependency: transitive description: @@ -157,34 +157,34 @@ packages: dependency: transitive description: name: built_value - sha256: a8de5955205b4d1dbbbc267daddf2178bd737e4bab8987c04a500478c9651e74 + sha256: a3ec2e0f967bc47f69f95009bb93db936288d61d5343b9436e378b28a2f830c6 url: "https://pub.dev" source: hosted - version: "8.6.3" + version: "8.9.0" cached_network_image: dependency: "direct main" description: name: cached_network_image - sha256: f98972704692ba679db144261172a8e20feb145636c617af0eb4022132a6797f + sha256: "28ea9690a8207179c319965c13cd8df184d5ee721ae2ce60f398ced1219cea1f" url: "https://pub.dev" source: hosted - version: "3.3.0" + version: "3.3.1" cached_network_image_platform_interface: dependency: transitive description: name: cached_network_image_platform_interface - sha256: "56aa42a7a01e3c9db8456d9f3f999931f1e05535b5a424271e9a38cabf066613" + sha256: "9e90e78ae72caa874a323d78fa6301b3fb8fa7ea76a8f96dc5b5bf79f283bf2f" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.0" cached_network_image_web: dependency: transitive description: name: cached_network_image_web - sha256: "759b9a9f8f6ccbb66c185df805fac107f05730b1dab9c64626d1008cca532257" + sha256: "42a835caa27c220d1294311ac409a43361088625a4f23c820b006dd9bffb3316" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" characters: dependency: transitive description: @@ -213,18 +213,18 @@ packages: dependency: transitive description: name: code_builder - sha256: "1be9be30396d7e4c0db42c35ea6ccd7cc6a1e19916b5dc64d6ac216b5544d677" + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 url: "https://pub.dev" source: hosted - version: "4.7.0" + version: "4.10.0" collection: dependency: "direct main" description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" connectivity_plus: dependency: "direct main" description: @@ -269,10 +269,10 @@ packages: dependency: transitive description: name: cross_file - sha256: "445db18de832dba8d851e287aff8ccf169bed30d2e94243cb54c7d2f1ed2142c" + sha256: "2f9d2cbccb76127ba28528cb3ae2c2326a122446a83de5a056aaa3880d3882c5" url: "https://pub.dev" source: hosted - version: "0.3.3+6" + version: "0.3.3+7" crypto: dependency: "direct main" description: @@ -318,18 +318,18 @@ packages: dependency: transitive description: name: dbus - sha256: "6f07cba3f7b3448d42d015bfd3d53fe12e5b36da2423f23838efc1d5fb31a263" + sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" url: "https://pub.dev" source: hosted - version: "0.7.8" + version: "0.7.10" dio: dependency: "direct main" description: name: dio - sha256: "417e2a6f9d83ab396ec38ff4ea5da6c254da71e4db765ad737a42af6930140b7" + sha256: "797e1e341c3dd2f69f2dad42564a6feff3bfb87187d05abb93b9609e6f1645c3" url: "https://pub.dev" source: hosted - version: "5.3.3" + version: "5.4.0" dio_cookie_manager: dependency: "direct main" description: @@ -350,10 +350,10 @@ packages: dependency: "direct main" description: name: dynamic_color - sha256: "8b8bd1d798bd393e11eddeaa8ae95b12ff028bf7d5998fc5d003488cd5f4ce2f" + sha256: a866f1f8947bfdaf674d7928e769eac7230388a2e7a2542824fad4bb5b87be3b url: "https://pub.dev" source: hosted - version: "1.6.8" + version: "1.6.9" encrypt: dependency: "direct main" description: @@ -362,15 +362,6 @@ packages: url: "https://pub.dev" source: hosted version: "5.0.3" - equalizer: - dependency: "direct main" - description: - path: "." - ref: HEAD - resolved-ref: "84c15ca304a8129a1cad5a6891059fb411f0fc55" - url: "https://github.com/gladson97/equalizer.git" - source: git - version: "0.0.2+2" equatable: dependency: transitive description: @@ -431,10 +422,10 @@ packages: dependency: "direct main" description: name: flex_color_picker - sha256: f37476ab3e80dcaca94e428e159944d465dd16312fda9ff41e07e86f04bfa51c + sha256: "0871edc170153cfc3de316d30625f40a85daecfa76ce541641f3cc0ec7757cbf" url: "https://pub.dev" source: hosted - version: "3.3.0" + version: "3.3.1" flex_seed_scheme: dependency: transitive description: @@ -452,18 +443,18 @@ packages: dependency: "direct main" description: name: flutter_background_service - sha256: "5ec79841c3e9f3bd1885b06c5d7502d6df415cb1665e6717792cc0e51716619f" + sha256: "94d9a143852729140e17254a53769383b03738cd92b6e588a8762003e6cd9dd9" url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "5.0.5" flutter_background_service_android: dependency: transitive description: name: flutter_background_service_android - sha256: a295c7604782b3723fa356679e5b14c5e0fb694d77a7299af135364fa851ee1a + sha256: "30863ebafd8214b8e76d5e5c9f27887dc5cc303fcf3e89f71534f621fc486782" url: "https://pub.dev" source: hosted - version: "6.0.1" + version: "6.2.2" flutter_background_service_ios: dependency: transitive description: @@ -505,22 +496,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.0" - flutter_inappwebview: - dependency: "direct main" - description: - name: flutter_inappwebview - sha256: d198297060d116b94048301ee6749cd2e7d03c1f2689783f52d210a6b7aba350 - url: "https://pub.dev" - source: hosted - version: "5.8.0" - flutter_isolate: - dependency: "direct main" - description: - name: flutter_isolate - sha256: "994ddec596da4ca12ca52154fd59404077584643eb7e3f1008a55fda9fe0b76b" - url: "https://pub.dev" - source: hosted - version: "2.0.4" flutter_lints: dependency: "direct dev" description: @@ -533,10 +508,10 @@ packages: dependency: "direct main" description: name: flutter_local_notifications - sha256: "501ed9d54f1c8c0535b7991bade36f9e7e3b45a2346401f03775c1ec7a3c06ae" + sha256: "401643a6ea9d8451365f2ec11145335bf130560cfde367bdf8f0be6d60f89479" url: "https://pub.dev" source: hosted - version: "15.1.2" + version: "15.1.3" flutter_local_notifications_linux: dependency: transitive description: @@ -596,10 +571,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "474f7d506230897a3cd28c965ec21c5328ae5605fc9c400cd330e9e9d6ac175c" + sha256: dfdde255317af381bfc1c486ed968d5a43a2ded9c931e87cbecd88767d6a71c1 url: "https://pub.dev" source: hosted - version: "8.2.2" + version: "8.2.4" frontend_server_client: dependency: transitive description: @@ -716,10 +691,10 @@ packages: dependency: transitive description: name: image - sha256: "028f61960d56f26414eb616b48b04eb37d700cbe477b7fb09bf1d7ce57fd9271" + sha256: "004a2e90ce080f8627b5a04aecb4cdfac87d2c3f3b520aa291260be5a32c033d" url: "https://pub.dev" source: hosted - version: "4.1.3" + version: "4.1.4" infinite_listview: dependency: transitive description: @@ -796,10 +771,10 @@ packages: dependency: "direct main" description: name: just_audio - sha256: "5ed0cd723e17dfd8cd4b0253726221e67f6546841ea4553635cf895061fc335b" + sha256: b607cd1a43bac03d85c3aaee00448ff4a589ef2a77104e3d409889ff079bf823 url: "https://pub.dev" source: hosted - version: "0.9.35" + version: "0.9.36" just_audio_media_kit: dependency: "direct main" description: @@ -813,18 +788,18 @@ packages: dependency: transitive description: name: just_audio_platform_interface - sha256: d8409da198bbc59426cd45d4c92fca522a2ec269b576ce29459d6d6fcaeb44df + sha256: c3dee0014248c97c91fe6299edb73dc4d6c6930a2f4f713579cd692d9e47f4a1 url: "https://pub.dev" source: hosted - version: "4.2.1" + version: "4.2.2" just_audio_web: dependency: transitive description: name: just_audio_web - sha256: ff62f733f437b25a0ff590f0e295fa5441dcb465f1edbdb33b3dea264705bc13 + sha256: "134356b0fe3d898293102b33b5fd618831ffdc72bb7a1b726140abdf22772b70" url: "https://pub.dev" source: hosted - version: "0.4.8" + version: "0.4.9" lints: dependency: transitive description: @@ -869,10 +844,10 @@ packages: dependency: transitive description: name: media_kit - sha256: "3dffc6d0c19117d51fbc42a7f89612e0595665800a596289ab7a80bdd93e0ad1" + sha256: "3289062540e3b8b9746e5c50d95bd78a9289826b7227e253dff806d002b9e67a" url: "https://pub.dev" source: hosted - version: "1.1.9" + version: "1.1.10+1" media_kit_libs_linux: dependency: transitive description: @@ -901,10 +876,10 @@ packages: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" mime: dependency: transitive description: @@ -1013,26 +988,26 @@ packages: dependency: "direct main" description: name: path_provider - sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa + sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "6b8b19bd80da4f11ce91b2d1fb931f3006911477cec227cce23d3253d80df3f1" + sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.2" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d" + sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" path_provider_linux: dependency: transitive description: @@ -1045,10 +1020,10 @@ packages: dependency: transitive description: name: path_provider_platform_interface - sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" path_provider_windows: dependency: transitive description: @@ -1069,42 +1044,50 @@ packages: dependency: "direct main" description: name: permission_handler - sha256: bc56bfe9d3f44c3c612d8d393bd9b174eb796d706759f9b495ac254e4294baa5 + sha256: "45ff3fbcb99040fde55c528d5e3e6ca29171298a85436274d49c6201002087d6" url: "https://pub.dev" source: hosted - version: "10.4.5" + version: "11.2.0" permission_handler_android: dependency: transitive description: name: permission_handler_android - sha256: "59c6322171c29df93a22d150ad95f3aa19ed86542eaec409ab2691b8f35f9a47" + sha256: "758284a0976772f9c744d6384fc5dc4834aa61e3f7aa40492927f244767374eb" url: "https://pub.dev" source: hosted - version: "10.3.6" + version: "12.0.3" permission_handler_apple: dependency: transitive description: name: permission_handler_apple - sha256: "99e220bce3f8877c78e4ace901082fb29fa1b4ebde529ad0932d8d664b34f3f5" + sha256: c6bf440f80acd2a873d3d91a699e4cc770f86e7e6b576dda98759e8b92b39830 url: "https://pub.dev" source: hosted - version: "9.1.4" + version: "9.3.0" + permission_handler_html: + dependency: transitive + description: + name: permission_handler_html + sha256: "54bf176b90f6eddd4ece307e2c06cf977fb3973719c35a93b85cc7093eb6070d" + url: "https://pub.dev" + source: hosted + version: "0.1.1" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface - sha256: "6760eb5ef34589224771010805bea6054ad28453906936f843a8cc4d3a55c4a4" + sha256: "5c43148f2bfb6d14c5a8162c0a712afe891f2d847f35fcff29c406b37da43c3c" url: "https://pub.dev" source: hosted - version: "3.12.0" + version: "4.1.0" permission_handler_windows: dependency: transitive description: name: permission_handler_windows - sha256: cc074aace208760f1eee6aa4fae766b45d947df85bc831cde77009cdb4720098 + sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e" url: "https://pub.dev" source: hosted - version: "0.1.3" + version: "0.2.1" petitparser: dependency: transitive description: @@ -1125,26 +1108,26 @@ packages: dependency: transitive description: name: platform - sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59" + sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" url: "https://pub.dev" source: hosted - version: "3.1.3" + version: "3.1.4" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: da3fdfeccc4d4ff2da8f8c556704c08f912542c5fb3cf2233ed75372384a034d + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" url: "https://pub.dev" source: hosted - version: "2.1.6" + version: "2.1.8" pointycastle: dependency: transitive description: name: pointycastle - sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" + sha256: "43ac87de6e10afabc85c445745a7b799e04de84cebaa4fd7bf55a5e1e9604d29" url: "https://pub.dev" source: hosted - version: "3.7.3" + version: "3.7.4" pool: dependency: transitive description: @@ -1157,10 +1140,10 @@ packages: dependency: "direct main" description: name: provider - sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f + sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096" url: "https://pub.dev" source: hosted - version: "6.0.5" + version: "6.1.1" pub_semver: dependency: transitive description: @@ -1181,34 +1164,34 @@ packages: dependency: "direct main" description: name: quick_actions - sha256: "3930e1cf78a0574495b4ea741ee197323c4a9081321d6ae384b3bfcd84c7ea83" + sha256: b17da113df7a7005977f64adfa58ccc49c829d3ccc6e8e770079a8c7fbf2da9e url: "https://pub.dev" source: hosted - version: "1.0.6" + version: "1.0.7" quick_actions_android: dependency: transitive description: name: quick_actions_android - sha256: df67c20583e05f5038a24c47bfa1b7b2977703ec2d162663017c5f9ef8707699 + sha256: adb42f20a46b22fee4caef421c00ff9eb209f9d441010bc5d6e9afa824288cf6 url: "https://pub.dev" source: hosted - version: "1.0.9" + version: "1.0.10" quick_actions_ios: dependency: transitive description: name: quick_actions_ios - sha256: f086cf98884421188c7c5c13f61b62aeb5b6fb88f197a0601db45108b1444ea6 + sha256: dd355101d0e9fef6176fa2ae2bf738bcafa8df09a1e17057fcb56475719793de url: "https://pub.dev" source: hosted - version: "1.0.7" + version: "1.0.10" quick_actions_platform_interface: dependency: transitive description: name: quick_actions_platform_interface - sha256: d2a8566b56eec49f93934528b62033906199c60f4ffaef0cba9ef02fcfed8a81 + sha256: "81a1e40c519bb3cacfec38b3008b13cef665a75bd270da94f40091b57f0f9236" url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" random_string: dependency: "direct main" description: @@ -1283,10 +1266,10 @@ packages: dependency: transitive description: name: source_gen - sha256: fc0da689e5302edb6177fdd964efcb7f58912f43c28c2047a808f5bfff643d16 + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.5.0" source_helper: dependency: transitive description: @@ -1323,34 +1306,34 @@ packages: dependency: "direct main" description: name: sqflite - sha256: "591f1602816e9c31377d5f008c2d9ef7b8aca8941c3f89cc5fd9d84da0c38a9a" + sha256: a9016f495c927cb90557c909ff26a6d92d9bd54fc42ba92e19d4e79d61e798c6 url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.2" sqflite_common: dependency: transitive description: name: sqflite_common - sha256: "1b92f368f44b0dee2425bb861cfa17b6f6cf3961f762ff6f941d20b33355660a" + sha256: "28d8c66baee4968519fb8bd6cdbedad982d6e53359091f0b74544a9f32ec72d5" url: "https://pub.dev" source: hosted - version: "2.5.0" + version: "2.5.3" stack_trace: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" stream_transform: dependency: transitive description: @@ -1371,10 +1354,10 @@ packages: dependency: transitive description: name: synchronized - sha256: "5fcbd27688af6082f5abd611af56ee575342c30e87541d0245f7ff99faa02c60" + sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.0+1" term_glyph: dependency: transitive description: @@ -1387,18 +1370,18 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.1" time: dependency: transitive description: name: time - sha256: "83427e11d9072e038364a5e4da559e85869b227cf699a541be0da74f14140124" + sha256: ad8e018a6c9db36cb917a031853a1aae49467a93e0d464683e029537d848c221 url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" timezone: dependency: transitive description: @@ -1475,66 +1458,66 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: "47e208a6711459d813ba18af120d9663c20bdf6985d6ad39fe165d2538378d27" + sha256: c512655380d241a337521703af62d2c122bf7b77a46ff7dd750092aa9433499c url: "https://pub.dev" source: hosted - version: "6.1.14" + version: "6.2.4" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: b04af59516ab45762b2ca6da40fa830d72d0f6045cd97744450b73493fa76330 + sha256: "507dc655b1d9cb5ebc756032eb785f114e415f91557b73bf60b7e201dfedeb2f" url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "6.2.2" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "7c65021d5dee51813d652357bc65b8dd4a6177082a9966bc8ba6ee477baa795f" + sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" url: "https://pub.dev" source: hosted - version: "6.1.5" + version: "6.2.4" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: b651aad005e0cb06a01dbd84b428a301916dc75f0e7ea6165f80057fee2d8e8e + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 url: "https://pub.dev" source: hosted - version: "3.0.6" + version: "3.1.1" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: b55486791f666e62e0e8ff825e58a023fd6b1f71c49926483f1128d3bbd8fe88 + sha256: b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234 url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "3.1.0" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - sha256: "95465b39f83bfe95fcb9d174829d6476216f2d548b79c38ab2506e0458787618" + sha256: a932c3a8082e118f80a475ce692fde89dc20fddb24c57360b96bc56f7035de1f url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.3.1" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: "2942294a500b4fa0b918685aff406773ba0a4cd34b7f42198742a94083020ce5" + sha256: "7fd2f55fe86cea2897b963e864dc01a7eb0719ecc65fcef4c1cc3d686d718bb2" url: "https://pub.dev" source: hosted - version: "2.0.20" + version: "2.2.0" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "95fef3129dc7cfaba2bc3d5ba2e16063bb561fc6d78e63eee16162bc70029069" + sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 url: "https://pub.dev" source: hosted - version: "3.0.8" + version: "3.1.1" uuid: dependency: transitive description: @@ -1563,10 +1546,10 @@ packages: dependency: "direct main" description: name: wakelock_plus - sha256: f45a6c03aa3f8322e0a9d7f4a0482721c8789cb41d555407367650b8f9c26018 + sha256: f268ca2116db22e57577fb99d52515a24bdc1d570f12ac18bb762361d43b043d url: "https://pub.dev" source: hosted - version: "1.1.3" + version: "1.1.4" wakelock_plus_platform_interface: dependency: transitive description: @@ -1587,10 +1570,10 @@ packages: dependency: transitive description: name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 url: "https://pub.dev" source: hosted - version: "0.1.4-beta" + version: "0.3.0" web_socket_channel: dependency: transitive description: @@ -1599,22 +1582,54 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.0" + webview_flutter: + dependency: "direct main" + description: + name: webview_flutter + sha256: "71e1bfaef41016c8d5954291df5e9f8c6172f1f6ff3af01b5656456ddb11f94c" + url: "https://pub.dev" + source: hosted + version: "4.4.4" + webview_flutter_android: + dependency: transitive + description: + name: webview_flutter_android + sha256: "4ea3c4e1b8ed590162b15b8a61b41b1ef3ff179a314627c16ce40c086d94b8af" + url: "https://pub.dev" + source: hosted + version: "3.14.0" + webview_flutter_platform_interface: + dependency: transitive + description: + name: webview_flutter_platform_interface + sha256: d937581d6e558908d7ae3dc1989c4f87b786891ab47bb9df7de548a151779d8d + url: "https://pub.dev" + source: hosted + version: "2.10.0" + webview_flutter_wkwebview: + dependency: transitive + description: + name: webview_flutter_wkwebview + sha256: "4d062ad505390ecef1c4bfb6001cd857a51e00912cc9dfb66edb1886a9ebd80c" + url: "https://pub.dev" + source: hosted + version: "3.10.2" win32: dependency: transitive description: name: win32 - sha256: "350a11abd2d1d97e0cc7a28a81b781c08002aa2864d9e3f192ca0ffa18b06ed3" + sha256: b0f37db61ba2f2e9b7a78a1caece0052564d1bc70668156cf3a29d676fe4e574 url: "https://pub.dev" source: hosted - version: "5.0.9" + version: "5.1.1" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" xml: dependency: transitive description: @@ -1640,5 +1655,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.1.3 <4.0.0" - flutter: ">=3.13.0" + dart: ">=3.2.0-194.0.dev <4.0.0" + flutter: ">=3.16.0" diff --git a/pubspec.yaml b/pubspec.yaml index 2b8bd72..1f5414d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -34,13 +34,12 @@ dependencies: path_provider: ^2.0.15 path: ^1.6.4 sqflite: ^2.0.0+3 - permission_handler: ^10.4.3 + permission_handler: ^11.2.0 intl: ^0.18.0 filesize: ^2.0.1 fluttertoast: ^8.0.8 palette_generator: ^0.3.0 flutter_material_color_picker: ^1.0.5 - flutter_inappwebview: ^5.3.2 country_pickers: ^2.0.0 move_to_background: ^1.0.1 flutter_local_notifications: ^15.1.0+1 @@ -67,8 +66,6 @@ dependencies: version: ^3.0.2 wakelock_plus: ^1.1.1 google_fonts: ^5.1.0 - equalizer: - git: https://github.com/gladson97/equalizer.git audio_session: ^0.1.6 audio_service: ^0.18.1 provider: ^6.0.0 @@ -88,7 +85,6 @@ dependencies: just_audio_media_kit: git: https://github.com/Pato05/just_audio_media_kit.git rxdart: ^0.27.7 - flutter_isolate: ^2.0.4 isar: ^3.1.0+1 isar_flutter_libs: ^3.1.0+1 flutter_background_service: ^5.0.1 @@ -97,8 +93,9 @@ dependencies: dio_cookie_manager: ^3.1.1 flutter_cache_manager_hive: git: https://github.com/Pato05/flutter_cache_manager_hive.git - flex_color_picker: - ^3.3.0 + flex_color_picker: ^3.3.0 + webview_flutter: + ^4.4.4 #deezcryptor: #path: deezcryptor/