diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 822ad31..ac04b8d 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -40,7 +40,8 @@ android:label="Freezer" android:requestLegacyExternalStorage="true" android:usesCleartextTraffic="true" - android:targetSandboxVersion="2"> + android:targetSandboxVersion="2" + android:enableOnBackInvokedCallback="true"> UIApplicationSupportsIndirectInputEvents - + + NSAppTransportSecurity NSAllowsArbitraryLoads diff --git a/lib/api/player/audio_handler.dart b/lib/api/player/audio_handler.dart index 43859af..e9f273f 100644 --- a/lib/api/player/audio_handler.dart +++ b/lib/api/player/audio_handler.dart @@ -140,7 +140,7 @@ class AudioPlayerTask extends BaseAudioHandler { Future _start(AudioPlayerTaskInitArguments initArgs) async { // Linux and Windows support - JustAudioMediaKit.ensureInitialized(iOS: true); + JustAudioMediaKit.ensureInitialized(); JustAudioMediaKit.title = 'Freezer'; JustAudioMediaKit.protocolWhitelist = const ['http']; //JustAudioMediaKit.bufferSize = 128; @@ -666,6 +666,7 @@ class AudioPlayerTask extends BaseAudioHandler { Future customAction(String name, [Map? extras]) async { switch (name) { case 'updateQuality': + print('updateQuality($extras)'); //Pass wifi & mobile quality by custom action //Isolate can't access globals wifiQuality = extras!['wifiQuality'] as AudioQuality; diff --git a/lib/main.dart b/lib/main.dart index 1bcef15..ee9c7f6 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -215,15 +215,7 @@ class _FreezerAppState extends State with WidgetsBindingObserver { fontFamily: settings.fontFamily, colorScheme: lightScheme, useMaterial3: true, - appBarTheme: const AppBarTheme( - systemOverlayStyle: SystemUiOverlayStyle( - statusBarBrightness: Brightness.dark, - statusBarIconBrightness: Brightness.dark, - systemNavigationBarIconBrightness: Brightness.dark, - statusBarColor: Colors.transparent, - systemNavigationBarColor: Colors.transparent, - systemNavigationBarDividerColor: Colors.transparent, - )), + appBarTheme: Settings.appBarThemeLight, ) : settings.themeData; final darkTheme = settings.materialYouAccent @@ -233,15 +225,7 @@ class _FreezerAppState extends State with WidgetsBindingObserver { colorScheme: darkScheme, useMaterial3: true, brightness: Brightness.dark, - appBarTheme: const AppBarTheme( - systemOverlayStyle: SystemUiOverlayStyle( - statusBarBrightness: Brightness.light, - statusBarIconBrightness: Brightness.light, - systemNavigationBarIconBrightness: Brightness.light, - statusBarColor: Colors.transparent, - systemNavigationBarColor: Colors.transparent, - systemNavigationBarDividerColor: Colors.transparent, - )), + appBarTheme: Settings.appBarThemeDark, ) : null; return MaterialApp( @@ -259,19 +243,9 @@ class _FreezerAppState extends State with WidgetsBindingObserver { GlobalCupertinoLocalizations.delegate, ], supportedLocales: supportedLocales, - home: WillPopScope( - onWillPop: () async { - if (navigatorKey.currentState!.canPop()) { - await navigatorKey.currentState!.maybePop(); - return false; - } - // await MoveToBackground.moveTaskToBack(); - return true; - }, - child: I18n( - initialLocale: _locale(), - child: const LoginMainWrapper(), - ), + home: I18n( + initialLocale: _locale(), + child: const LoginMainWrapper(), ), navigatorKey: mainNavigatorKey, ); @@ -327,19 +301,8 @@ class _LoginMainWrapperState extends State { @override Widget build(BuildContext context) { if (settings.arl == null) { - return AnnotatedRegion( - value: (Theme.of(context).brightness == Brightness.dark - ? SystemUiOverlayStyle.dark - : SystemUiOverlayStyle.light) - .copyWith( - statusBarColor: Colors.transparent, - systemNavigationBarColor: - Colors.transparent, // Theme.of(context).scaffoldBackgroundColor, - statusBarIconBrightness: Brightness.light, - ), - child: LoginWidget( - callback: () => setState(() => {}), - ), + return LoginWidget( + callback: () => setState(() => {}), ); } return const MainScreen(); @@ -436,7 +399,11 @@ class MainScreenState extends State type: 'favorites', localizedTitle: 'Favorites'.i18n, icon: 'ic_favorites'), - ShortcutItem(type: 'flow', localizedTitle: 'Flow'.i18n, icon: 'ic_flow'), + ShortcutItem( + type: 'flow', + localizedTitle: 'Flow'.i18n, + icon: 'ic_flow', + ), ]); } @@ -755,29 +722,33 @@ class MainScreenState extends State focusNode: screenFocusNode, skipTraversal: true, canRequestFocus: false, - child: _MainRouteNavigator( - navigatorKey: navigatorKey, - routes: { - Navigator.defaultRouteName: (context) => HomeScreen(), - '/podcasts': (context) => HomePageScreen( - cacheable: true, - channel: const DeezerChannel( - target: 'channels/podcasts'), - title: 'Podcasts'.i18n, - ), - '/library': (context) => const LibraryScreen(), - '/library/tracks': (context) => const LibraryTracks(), - '/library/albums': (context) => const LibraryAlbums(), - '/library/artists': (context) => const LibraryArtists(), - '/library/playlists': (context) => - const LibraryPlaylists(), - '/library/history': (context) => const HistoryScreen(), - '/search': (context) => const SearchScreen(), - '/settings': (context) => const SettingsScreen(), - '/downloads': (context) => const DownloadsScreen(), - '/spotify-importer': (context) => - const SpotifyImporterV2(), - }, + child: NavigatorPopHandler( + onPop: () => navigatorKey.currentState!.maybePop(), + child: _MainRouteNavigator( + navigatorKey: navigatorKey, + routes: { + Navigator.defaultRouteName: (context) => + const HomeScreen(), + '/podcasts': (context) => HomePageScreen( + cacheable: true, + channel: const DeezerChannel( + target: 'channels/podcasts'), + title: 'Podcasts'.i18n, + ), + '/library': (context) => const LibraryScreen(), + '/library/tracks': (context) => const LibraryTracks(), + '/library/albums': (context) => const LibraryAlbums(), + '/library/artists': (context) => const LibraryArtists(), + '/library/playlists': (context) => + const LibraryPlaylists(), + '/library/history': (context) => const HistoryScreen(), + '/search': (context) => const SearchScreen(), + '/settings': (context) => const SettingsScreen(), + '/downloads': (context) => const DownloadsScreen(), + '/spotify-importer': (context) => + const SpotifyImporterV2(), + }, + ), ))); })); } diff --git a/lib/settings.dart b/lib/settings.dart index b7ed2de..6fe855a 100644 --- a/lib/settings.dart +++ b/lib/settings.dart @@ -318,6 +318,30 @@ class Settings { final _elevation1Black = Color.alphaBlend(Colors.white12, Colors.black); + static const systemOverlayStyleDark = SystemUiOverlayStyle( + statusBarBrightness: Brightness.dark, + statusBarIconBrightness: Brightness.light, + systemNavigationBarIconBrightness: Brightness.light, + statusBarColor: Colors.transparent, + systemNavigationBarColor: Colors.transparent, + systemNavigationBarDividerColor: Colors.transparent, + ); + + static const systemOverlayStyleLight = SystemUiOverlayStyle( + statusBarBrightness: Brightness.light, + statusBarIconBrightness: Brightness.dark, + systemNavigationBarIconBrightness: Brightness.dark, + statusBarColor: Colors.transparent, + systemNavigationBarColor: Colors.transparent, + systemNavigationBarDividerColor: Colors.transparent, + ); + + static const appBarThemeDark = + AppBarTheme(systemOverlayStyle: systemOverlayStyleDark); + + static const appBarThemeLight = + AppBarTheme(systemOverlayStyle: systemOverlayStyleLight); + Map get _themeData => { Themes.Light: ThemeData( textTheme: textTheme, @@ -327,15 +351,7 @@ class Settings { colorScheme: ColorScheme.fromSeed(seedColor: primaryColor), bottomAppBarTheme: const BottomAppBarTheme(color: Color(0xfff5f5f5)), useMaterial3: true, - appBarTheme: const AppBarTheme( - systemOverlayStyle: SystemUiOverlayStyle( - statusBarBrightness: Brightness.dark, - statusBarIconBrightness: Brightness.dark, - systemNavigationBarIconBrightness: Brightness.dark, - statusBarColor: Colors.transparent, - systemNavigationBarColor: Colors.transparent, - systemNavigationBarDividerColor: Colors.transparent, - )), + appBarTheme: appBarThemeLight, ), Themes.Dark: ThemeData( textTheme: textTheme, @@ -347,15 +363,7 @@ class Settings { brightness: Brightness.dark, ), useMaterial3: true, - appBarTheme: const AppBarTheme( - systemOverlayStyle: SystemUiOverlayStyle( - statusBarBrightness: Brightness.light, - statusBarIconBrightness: Brightness.light, - systemNavigationBarIconBrightness: Brightness.light, - statusBarColor: Colors.transparent, - systemNavigationBarColor: Colors.transparent, - systemNavigationBarDividerColor: Colors.transparent, - )), + appBarTheme: appBarThemeDark, ), Themes.Deezer: ThemeData( textTheme: textTheme, @@ -373,15 +381,7 @@ class Settings { const BottomSheetThemeData(backgroundColor: deezerBottom), cardColor: deezerBg, useMaterial3: true, - appBarTheme: const AppBarTheme( - systemOverlayStyle: SystemUiOverlayStyle( - statusBarBrightness: Brightness.light, - statusBarIconBrightness: Brightness.light, - systemNavigationBarIconBrightness: Brightness.light, - statusBarColor: Colors.transparent, - systemNavigationBarColor: Colors.transparent, - systemNavigationBarDividerColor: Colors.transparent, - )), + appBarTheme: appBarThemeDark, ), Themes.Black: ThemeData( textTheme: textTheme, @@ -402,15 +402,7 @@ class Settings { BottomSheetThemeData(backgroundColor: _elevation1Black), cardColor: _elevation1Black, useMaterial3: true, - appBarTheme: const AppBarTheme( - systemOverlayStyle: SystemUiOverlayStyle( - statusBarBrightness: Brightness.light, - statusBarIconBrightness: Brightness.light, - systemNavigationBarIconBrightness: Brightness.light, - statusBarColor: Colors.transparent, - systemNavigationBarColor: Colors.transparent, - systemNavigationBarDividerColor: Colors.transparent, - )), + appBarTheme: appBarThemeDark, ) }; diff --git a/lib/ui/cached_image.dart b/lib/ui/cached_image.dart index 73413a4..14cd7eb 100644 --- a/lib/ui/cached_image.dart +++ b/lib/ui/cached_image.dart @@ -45,14 +45,13 @@ class CachedImage extends StatefulWidget { final bool rounded; const CachedImage( - {Key? key, + {super.key, required this.url, this.height, this.width, this.circular = false, this.fullThumb = false, - this.rounded = false}) - : super(key: key); + this.rounded = true}); @override State createState() => _CachedImageState(); @@ -91,15 +90,15 @@ class _CachedImageState extends State { ); } - if (widget.rounded) { - return ClipRRect( - borderRadius: const BorderRadius.all(Radius.circular(4.0)), + if (widget.circular) { + return ClipOval( child: child, ); } - if (widget.circular) { - return ClipOval( + if (widget.rounded) { + return ClipRRect( + borderRadius: const BorderRadius.all(Radius.circular(4.0)), child: child, ); } diff --git a/lib/ui/player_screen.dart b/lib/ui/player_screen.dart index 79b3996..bcbd8b2 100644 --- a/lib/ui/player_screen.dart +++ b/lib/ui/player_screen.dart @@ -4,6 +4,7 @@ import 'dart:convert'; import 'dart:ui'; import 'dart:async'; import 'package:cached_network_image/cached_network_image.dart'; +import 'package:dynamic_color/dynamic_color.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:audio_service/audio_service.dart'; @@ -333,7 +334,7 @@ class PlayerScreenVertical extends StatelessWidget { ), const Flexible(child: BigAlbumArt()), Padding( - padding: const EdgeInsets.symmetric(horizontal: 24.0), + padding: const EdgeInsets.only(left: 24.0, right: 16.0), child: PlayerTextSubtext(textSize: 24.spMax), ), SeekBar(textSize: 14.spMax), @@ -378,7 +379,7 @@ class PlayerScreenDesktop extends StatelessWidget { child: const BigAlbumArt(showLyricsButton: false)), ), Padding( - padding: const EdgeInsets.symmetric(horizontal: 24.0), + padding: const EdgeInsets.only(left: 24.0, right: 16.0), child: PlayerTextSubtext(textSize: 22.h), ), SeekBar(textSize: 16.h), @@ -509,7 +510,7 @@ class _FitOrScrollTextState extends State { class PlayerTextSubtext extends StatelessWidget { final double textSize; - const PlayerTextSubtext({Key? key, required this.textSize}) : super(key: key); + const PlayerTextSubtext({super.key, required this.textSize}); @override Widget build(BuildContext context) { @@ -969,110 +970,133 @@ class _BigAlbumArtState extends State with WidgetsBindingObserver { imageUrl: mediaItem.artUri.toString(), heroKey: mediaItem.id); }, )), - child: Stack( - children: [ - StreamBuilder>( - stream: audioHandler.queue, - initialData: audioHandler.queue.valueOrNull, - builder: (context, snapshot) { - if (!snapshot.hasData) { - return const Center(child: CircularProgressIndicator()); - } - final queue = snapshot.data!; - return PageView.builder( - controller: _pageController, - onPageChanged: (int index) { - // ignore if not initiated by user. - if (!_userScroll) return; - Logger('BigAlbumArt') - .fine('page changed, skipping to media item'); - if (queue[index].id == audioHandler.mediaItem.value?.id) { - return; - } + child: LayoutBuilder( + builder: (context, constraints) => Stack( + children: [ + StreamBuilder>( + stream: audioHandler.queue, + initialData: audioHandler.queue.valueOrNull, + builder: (context, snapshot) { + if (!snapshot.hasData) { + return const Center( + child: CircularProgressIndicator()); + } + final queue = snapshot.data!; + return PageView.builder( + controller: _pageController, + onPageChanged: (int index) { + // ignore if not initiated by user. + if (!_userScroll) return; + Logger('BigAlbumArt') + .fine('page changed, skipping to media item'); + if (queue[index].id == + audioHandler.mediaItem.value?.id) { + return; + } - audioHandler.skipToQueueItem(index); - }, - itemCount: queue.length, - itemBuilder: (context, i) => Padding( - padding: const EdgeInsets.all(8.0), - child: Hero( - tag: queue[i].id, - child: ClipRRect( - borderRadius: BorderRadius.circular(8.0), - child: CachedImage( - url: queue[i].artUri.toString(), - fullThumb: true, - ), - ), + audioHandler.skipToQueueItem(index); + }, + itemCount: queue.length, + itemBuilder: (context, i) => Padding( + padding: const EdgeInsets.all(8.0), + child: Hero( + tag: queue[i].id, + child: ClipRRect( + borderRadius: BorderRadius.circular(8.0), + child: CachedImage( + url: queue[i].artUri.toString(), + fullThumb: true, + ), + ), + ), + )); + }), + if (widget.showLyricsButton) + StreamBuilder( + initialData: audioHandler.mediaItem.valueOrNull, + stream: audioHandler.mediaItem, + builder: (context, snapshot) { + if (snapshot.data == null) { + return const SizedBox.shrink(); + } + + final l = snapshot.data!.extras?['lyrics'] == null + ? null + : Lyrics.fromJson( + jsonDecode(snapshot.data!.extras!['lyrics'])); + + if (l == null || l.id == null || l.id == '0') { + return const SizedBox.shrink(); + } + + return Positioned( + key: const ValueKey('lyrics_button'), + bottom: 16.0, + right: 16.0, + child: LyricsButton( + onTap: _pushLyrics, + size: constraints.maxHeight / 20, ), - )); - }), - if (widget.showLyricsButton) - StreamBuilder( - initialData: audioHandler.mediaItem.valueOrNull, - stream: audioHandler.mediaItem, - builder: (context, snapshot) { - if (snapshot.data == null) return const SizedBox.shrink(); - - print(snapshot.data!.extras); - final l = snapshot.data!.extras?['lyrics'] == null - ? null - : Lyrics.fromJson( - jsonDecode(snapshot.data!.extras!['lyrics'])); - - if (l == null || l.id == null || l.id == '0') { - return const SizedBox.shrink(); - } - - return Positioned( - key: const ValueKey('lyrics_button'), - bottom: 16.0, - right: 16.0, - child: Consumer( - builder: (context, provider, child) => Material( - color: Color.lerp( - Theme.of(context).colorScheme.background, - provider.dominantColor, - 0.25), - borderRadius: BorderRadius.circular(16.0), - clipBehavior: Clip.antiAlias, - child: child), - child: InkWell( - onTap: _pushLyrics, - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 12.0, vertical: 4.0), - child: Row(mainAxisSize: MainAxisSize.min, children: [ - const Icon(Icons.subtitles, size: 18.0), - const SizedBox(width: 8.0), - Text('Lyrics'.i18n), - ]), - ), + ); + }, ), - ), - ); - }, - ), - ], - ), + ], + )), ); - return AspectRatio( - aspectRatio: 1.0, - child: settings.playerAlbumArtDropShadow - ? Consumer( - builder: (context, background, child) => AnimatedContainer( - duration: const Duration(seconds: 1), - decoration: BoxDecoration(boxShadow: [ - BoxShadow( - color: background.dominantColor ?? Colors.transparent, - spreadRadius: 0.0, - blurRadius: 100.0) - ]), - child: child), - child: child, - ) - : child, + return Center( + child: AspectRatio( + aspectRatio: 1.0, + child: settings.playerAlbumArtDropShadow + ? Consumer( + builder: (context, background, child) => AnimatedContainer( + duration: const Duration(seconds: 1), + decoration: BoxDecoration(boxShadow: [ + BoxShadow( + color: + (background.dominantColor ?? Colors.transparent) + .withOpacity(0.5), + spreadRadius: 20.0, + blurRadius: 150.0) + ]), + child: child), + child: child, + ) + : child, + ), + ); + } +} + +class LyricsButton extends StatelessWidget { + final VoidCallback onTap; + final double size; + const LyricsButton({super.key, required this.onTap, this.size = 24.0}); + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (context, provider, child) => Material( + color: Color.lerp(Theme.of(context).colorScheme.background, + provider.dominantColor, 0.25), + borderRadius: BorderRadius.circular(size * 2 / 3), + clipBehavior: Clip.antiAlias, + child: child), + child: InkWell( + onTap: onTap, + child: Padding( + padding: + EdgeInsets.symmetric(horizontal: size / 1.25, vertical: size / 6), + child: Row(mainAxisSize: MainAxisSize.min, children: [ + Icon(Icons.subtitles, size: size), + SizedBox(width: size / 3), + Text( + 'Lyrics'.i18n, + style: TextStyle(fontSize: size * 0.8), + ), + ]), + ), + ), ); } } diff --git a/lib/ui/settings_screen.dart b/lib/ui/settings_screen.dart index baa3c8e..c8e6b68 100644 --- a/lib/ui/settings_screen.dart +++ b/lib/ui/settings_screen.dart @@ -765,6 +765,11 @@ class _QualityPickerState extends State { settings.offlineQuality = _quality; break; } + + audioHandler.customAction('updateQuality', { + 'mobileQuality': settings.mobileQuality, + 'wifiQuality': settings.wifiQuality, + }); await settings.save(); } diff --git a/pubspec.lock b/pubspec.lock index f8215a5..375aa0b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -29,10 +29,10 @@ packages: dependency: transitive description: name: args - sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.5.0" asn1lib: dependency: transitive description: @@ -53,10 +53,10 @@ packages: dependency: "direct main" description: name: audio_service - sha256: a4d989f1225ea9621898d60f23236dcbfc04876fa316086c23c5c4af075dbac4 + sha256: "4547c312a94f9cb2c48b60823fb190767cbd63454a83c73049384d5d3cba4650" url: "https://pub.dev" source: hosted - version: "0.18.12" + version: "0.18.13" audio_service_mpris: dependency: "direct main" description: @@ -77,18 +77,18 @@ packages: dependency: transitive description: name: audio_service_web - sha256: "523e64ddc914c714d53eec2da85bba1074f08cf26c786d4efb322de510815ea7" + sha256: "9d7d5ae5f98a5727f2580fad73062f2484f400eef6cef42919413268e62a363e" url: "https://pub.dev" source: hosted - version: "0.1.1" + version: "0.1.2" audio_session: dependency: "direct main" description: name: audio_session - sha256: "6fdf255ed3af86535c96452c33ecff1245990bb25a605bfb1958661ccc3d467f" + sha256: a49af9981eec5d7cd73b37bacb6ee73f8143a6a9f9bd5b6021e6c346b9b6cf4e url: "https://pub.dev" source: hosted - version: "0.1.18" + version: "0.1.19" boolean_selector: dependency: transitive description: @@ -133,10 +133,10 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "581bacf68f89ec8792f5e5a0b2c4decd1c948e97ce659dc783688c8a88fbec21" + sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" url: "https://pub.dev" source: hosted - version: "2.4.8" + version: "2.4.9" build_runner_core: dependency: transitive description: @@ -157,10 +157,10 @@ packages: dependency: transitive description: name: built_value - sha256: a3ec2e0f967bc47f69f95009bb93db936288d61d5343b9436e378b28a2f830c6 + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb url: "https://pub.dev" source: hosted - version: "8.9.0" + version: "8.9.2" cached_network_image: dependency: "direct main" description: @@ -326,10 +326,10 @@ packages: dependency: "direct main" description: name: dio - sha256: "797e1e341c3dd2f69f2dad42564a6feff3bfb87187d05abb93b9609e6f1645c3" + sha256: "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5" url: "https://pub.dev" source: hosted - version: "5.4.0" + version: "5.4.3+1" dio_cookie_manager: dependency: "direct main" description: @@ -350,10 +350,10 @@ packages: dependency: "direct main" description: name: dynamic_color - sha256: a866f1f8947bfdaf674d7928e769eac7230388a2e7a2542824fad4bb5b87be3b + sha256: eae98052fa6e2826bdac3dd2e921c6ce2903be15c6b7f8b6d8a5d49b5086298d url: "https://pub.dev" source: hosted - version: "1.6.9" + version: "1.7.0" encrypt: dependency: "direct main" description: @@ -422,18 +422,18 @@ packages: dependency: "direct main" description: name: flex_color_picker - sha256: "0871edc170153cfc3de316d30625f40a85daecfa76ce541641f3cc0ec7757cbf" + sha256: "5c846437069fb7afdd7ade6bf37e628a71d2ab0787095ddcb1253bf9345d5f3a" url: "https://pub.dev" source: hosted - version: "3.3.1" + version: "3.4.1" flex_seed_scheme: dependency: transitive description: name: flex_seed_scheme - sha256: "29c12aba221eb8a368a119685371381f8035011d18de5ba277ad11d7dfb8657f" + sha256: "4cee2f1d07259f77e8b36f4ec5f35499d19e74e17c7dce5b819554914082bc01" url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.5.0" flutter: dependency: "direct main" description: flutter @@ -500,18 +500,18 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7 + sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" flutter_local_notifications: dependency: "direct main" description: name: flutter_local_notifications - sha256: c18f1de98fe0bb9dd5ba91e1330d4febc8b6a7de6aae3ffe475ef423723e72f3 + sha256: "55b9b229307a10974b26296ff29f2e132256ba4bd74266939118eaefa941cb00" url: "https://pub.dev" source: hosted - version: "16.3.2" + version: "16.3.3" flutter_local_notifications_linux: dependency: transitive description: @@ -563,18 +563,18 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: dfdde255317af381bfc1c486ed968d5a43a2ded9c931e87cbecd88767d6a71c1 + sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" url: "https://pub.dev" source: hosted - version: "8.2.4" + version: "8.2.5" freezed: dependency: "direct dev" description: name: freezed - sha256: "57247f692f35f068cae297549a46a9a097100685c6780fe67177503eea5ed4e5" + sha256: a434911f643466d78462625df76fd9eb13e57348ff43fe1f77bbe909522c67a1 url: "https://pub.dev" source: hosted - version: "2.4.7" + version: "2.5.2" freezed_annotation: dependency: "direct main" description: @@ -587,10 +587,10 @@ packages: dependency: transitive description: name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "4.0.0" get_it: dependency: "direct main" description: @@ -619,10 +619,10 @@ packages: dependency: "direct main" description: name: google_fonts - sha256: f0b8d115a13ecf827013ec9fc883390ccc0e87a96ed5347a3114cac177ef18e8 + sha256: "5b1726fee554d1cc9db1baef8061b126567ff0a1140a03ed7de936e62f2ab98b" url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "6.2.0" graphs: dependency: transitive description: @@ -635,10 +635,10 @@ packages: dependency: transitive description: name: hashlib - sha256: "71bf102329ddb8e50c8a995ee4645ae7f1728bb65e575c17196b4d8262121a96" + sha256: "0f8ae37da8350f50576406a0554e272cb2ecee8501fd8772ffb0dfaab464cfaa" url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.13.1" hashlib_codecs: dependency: transitive description: @@ -803,18 +803,18 @@ packages: dependency: "direct main" description: name: just_audio - sha256: b607cd1a43bac03d85c3aaee00448ff4a589ef2a77104e3d409889ff079bf823 + sha256: b7cb6bbf3750caa924d03f432ba401ec300fd90936b3f73a9b33d58b1e96286b url: "https://pub.dev" source: hosted - version: "0.9.36" + version: "0.9.37" just_audio_media_kit: dependency: "direct main" description: name: just_audio_media_kit - sha256: d24b67a094d3a278ac483408b4313841386d1a67a737abd9b23f65a80bc06d29 + sha256: bbecbd43959c230d9f9610df0e0165855e711b4c960ce730c08f31107cc3bd26 url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.4" just_audio_platform_interface: dependency: transitive description: @@ -831,6 +831,30 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.9" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + url: "https://pub.dev" + source: hosted + version: "10.0.0" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + url: "https://pub.dev" + source: hosted + version: "2.0.1" lints: dependency: transitive description: @@ -859,18 +883,18 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" media_kit: dependency: transitive description: @@ -879,14 +903,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.10+1" - media_kit_libs_ios_audio: - dependency: "direct main" - description: - name: media_kit_libs_ios_audio - sha256: "78ccf04e27d6b4ba00a355578ccb39b772f00d48269a6ac3db076edf2d51934f" - url: "https://pub.dev" - source: hosted - version: "1.1.4" media_kit_libs_linux: dependency: "direct main" description: @@ -915,10 +931,10 @@ packages: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" mime: dependency: transitive description: @@ -1035,26 +1051,26 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_provider: dependency: "direct main" description: name: path_provider - sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b + sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668" + sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.2.4" path_provider_foundation: dependency: transitive description: @@ -1099,10 +1115,10 @@ packages: dependency: "direct main" description: name: permission_handler - sha256: "74e962b7fad7ff75959161bb2c0ad8fe7f2568ee82621c9c2660b751146bfe44" + sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb" url: "https://pub.dev" source: hosted - version: "11.3.0" + version: "11.3.1" permission_handler_android: dependency: transitive description: @@ -1115,10 +1131,10 @@ packages: dependency: transitive description: name: permission_handler_apple - sha256: bdafc6db74253abb63907f4e357302e6bb786ab41465e8635f362ee71fd8707b + sha256: e9ad66020b89ff1b63908f247c2c6f931c6e62699b756ef8b3c4569350cd8662 url: "https://pub.dev" source: hosted - version: "9.4.0" + version: "9.4.4" permission_handler_html: dependency: transitive description: @@ -1131,10 +1147,10 @@ packages: dependency: transitive description: name: permission_handler_platform_interface - sha256: "23dfba8447c076ab5be3dee9ceb66aad345c4a648f0cac292c77b1eb0e800b78" + sha256: "48d4fcf201a1dad93ee869ab0d4101d084f49136ec82a8a06ed9cfeacab9fd20" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "4.2.1" permission_handler_windows: dependency: transitive description: @@ -1179,10 +1195,10 @@ packages: dependency: "direct main" description: name: pointycastle - sha256: "43ac87de6e10afabc85c445745a7b799e04de84cebaa4fd7bf55a5e1e9604d29" + sha256: "70fe966348fe08c34bf929582f1d8247d9d9408130723206472b4687227e4333" url: "https://pub.dev" source: hosted - version: "3.7.4" + version: "3.8.0" pool: dependency: transitive description: @@ -1195,10 +1211,10 @@ packages: dependency: "direct main" description: name: provider - sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096" + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c url: "https://pub.dev" source: hosted - version: "6.1.1" + version: "6.1.2" pub_semver: dependency: transitive description: @@ -1227,10 +1243,10 @@ packages: dependency: transitive description: name: quick_actions_android - sha256: adb42f20a46b22fee4caef421c00ff9eb209f9d441010bc5d6e9afa824288cf6 + sha256: "58b9b36cad2fc5c5a6752e5eafdb20ab00697f11278ca7f206ecd7b85ec6c101" url: "https://pub.dev" source: hosted - version: "1.0.10" + version: "1.0.11" quick_actions_ios: dependency: transitive description: @@ -1300,10 +1316,10 @@ packages: dependency: transitive description: name: share_plus_platform_interface - sha256: df08bc3a07d01f5ea47b45d03ffcba1fa9cd5370fb44b3f38c70e42cced0f956 + sha256: "251eb156a8b5fa9ce033747d73535bf53911071f8d3b6f4f0b578505ce0d4496" url: "https://pub.dev" source: hosted - version: "3.3.1" + version: "3.4.0" shelf: dependency: transitive description: @@ -1361,10 +1377,10 @@ packages: dependency: "direct main" description: name: spotify - sha256: "5c4d80a3d6a263c26d4922faf0cb9688234c721760ea3a0dd72e0172bb6fa72c" + sha256: "50bd5a07b580ee441d0b4d81227185ada768332c353671aa7555ea47cc68eb9e" url: "https://pub.dev" source: hosted - version: "0.13.1" + version: "0.13.5" sprintf: dependency: transitive description: @@ -1473,10 +1489,10 @@ packages: dependency: "direct main" description: name: tray_manager - sha256: "4ab709d70a4374af172f8c39e018db33a4271265549c6fc9d269a65e5f4b0225" + sha256: e0ac9a88b2700f366b8629b97e8663b6ef450a2f169560a685dc167bfe9c9c29 url: "https://pub.dev" source: hosted - version: "0.2.1" + version: "0.2.2" typed_data: dependency: transitive description: @@ -1537,26 +1553,26 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: c512655380d241a337521703af62d2c122bf7b77a46ff7dd750092aa9433499c + sha256: "6ce1e04375be4eed30548f10a315826fd933c1e493206eab82eed01f438c8d2e" url: "https://pub.dev" source: hosted - version: "6.2.4" + version: "6.2.6" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "507dc655b1d9cb5ebc756032eb785f114e415f91557b73bf60b7e201dfedeb2f" + sha256: "360a6ed2027f18b73c8d98e159dda67a61b7f2e0f6ec26e86c3ada33b0621775" url: "https://pub.dev" source: hosted - version: "6.2.2" + version: "6.3.1" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + sha256: "9149d493b075ed740901f3ee844a38a00b33116c7c5c10d7fb27df8987fb51d5" url: "https://pub.dev" source: hosted - version: "6.2.4" + version: "6.2.5" url_launcher_linux: dependency: transitive description: @@ -1577,10 +1593,10 @@ packages: dependency: transitive description: name: url_launcher_platform_interface - sha256: a932c3a8082e118f80a475ce692fde89dc20fddb24c57360b96bc56f7035de1f + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" url_launcher_web: dependency: transitive description: @@ -1601,10 +1617,10 @@ packages: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.4.0" vector_math: dependency: transitive description: @@ -1621,6 +1637,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.2" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + url: "https://pub.dev" + source: hosted + version: "13.0.0" wakelock_plus: dependency: "direct main" description: @@ -1673,10 +1697,10 @@ packages: dependency: transitive description: name: webview_flutter_android - sha256: "3e5f4e9d818086b0d01a66fb1ff9cc72ab0cc58c71980e3d3661c5685ea0efb0" + sha256: f038ee2fae73b509dde1bc9d2c5a50ca92054282de17631a9a3d515883740934 url: "https://pub.dev" source: hosted - version: "3.15.0" + version: "3.16.0" webview_flutter_platform_interface: dependency: transitive description: @@ -1689,10 +1713,10 @@ packages: dependency: transitive description: name: webview_flutter_wkwebview - sha256: "9bf168bccdf179ce90450b5f37e36fe263f591c9338828d6bf09b6f8d0f57f86" + sha256: f12f8d8a99784b863e8b85e4a9a5e3cf1839d6803d2c0c3e0533a8f3c5a992a7 url: "https://pub.dev" source: hosted - version: "3.12.0" + version: "3.13.0" win32: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 5c71ed4..0edd491 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -88,7 +88,6 @@ dependencies: # Player libs for Linux and windows media_kit_libs_linux: any media_kit_libs_windows_audio: any - media_kit_libs_ios_audio: any # Audio service plugin for Linux (MPRIS) audio_service_mpris: ^0.1.3