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