switch to official webview, fix downloads permissions, roundedrect play button and other stuff

This commit is contained in:
Pato05 2024-01-29 01:24:04 +01:00
parent 8679cf844f
commit 72400aac5c
No known key found for this signature in database
GPG Key ID: ED4C6F9C3D574FB6
19 changed files with 394 additions and 284 deletions

View File

@ -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 {

View File

@ -1,5 +1,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="f.f.freezer">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->

View File

@ -1,9 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="f.f.freezer"
>
xmlns:tools="http://schemas.android.com/tools">
<!--
io.flutter.app.FlutterApplication is an android.app.Application that
@ -13,10 +11,24 @@
FlutterApplication and put your custom class here.
-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<!-- Storage permission for Android 12 and lower -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!--
Granular media permissions for Android 13 and newer.
See https://developer.android.com/about/versions/13/behavior-changes-13#granular-media-permissions
for more information.
-->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-feature
android:name="android.software.LEANBACK"
@ -28,7 +40,7 @@
android:label="Freezer"
android:requestLegacyExternalStorage="true"
android:usesCleartextTraffic="true"
>
tools:targetApi="m">
<service
android:name=".DownloadService"

View File

@ -1,5 +1,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="f.f.freezer">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->

View File

@ -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"
}
}

View File

@ -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

View File

@ -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<bool> 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<void> 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<DeezerLinkResponse?> parseLink(String url) async {
Uri uri = Uri.parse(url);
@ -400,7 +429,7 @@ class DeezerAPI {
}
//Get playlist details
Future<Playlist> playlist(String? id, {int nb = 100}) async {
Future<Playlist> playlist(String? id, {int nb = 5000}) async {
Map<dynamic, dynamic> data = await callApi('deezer.pagePlaylist', params: {
'playlist_id': id,
'lang': settings.deezerLanguage,

View File

@ -631,8 +631,21 @@ class DownloadManager {
//Check storage permission
Future<bool> 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,

View File

@ -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<void> seekForward(bool begin) => Future.value();
@override
Future<void> 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 {

View File

@ -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);
}
});

View File

@ -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;

View File

@ -789,6 +789,14 @@ class _PlaylistDetailsState extends State<PlaylistDetails> {
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;
}

View File

@ -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<ExternalLinkRoute> createState() => _ExternalLinkRouteState();
}
class _ExternalLinkRouteState extends State<ExternalLinkRoute> {
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,
),
);
}

View File

@ -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<LoginBrowser> createState() => _LoginBrowserState();
}
class _LoginBrowserState extends State<LoginBrowser> {
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,
),
);
}

View File

@ -222,7 +222,6 @@ class _PlayPauseButtonState extends State<PlayPauseButton>
_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<PlayPauseButton>
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);
});

View File

@ -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:

View File

@ -1047,10 +1047,13 @@ class _DownloadsSettingsState extends State<DownloadsSettings> {
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<GeneralSettings> {
});
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),

View File

@ -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"

View File

@ -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/