diff --git a/lib/pages/app_settings.dart b/lib/pages/app_settings.dart index 23b3904..c7699ee 100644 --- a/lib/pages/app_settings.dart +++ b/lib/pages/app_settings.dart @@ -32,6 +32,7 @@ class AppSettingsPage extends HookConsumerWidget { SettingsTile.switchTile( initialValue: appSettings.isDarkMode, title: const Text('Dark Mode'), + description: const Text('we all know dark mode is better'), leading: appSettings.isDarkMode ? const Icon(Icons.dark_mode) : const Icon(Icons.light_mode), @@ -42,6 +43,9 @@ class AppSettingsPage extends HookConsumerWidget { SettingsTile.switchTile( initialValue: appSettings.useMaterialThemeOnItemPage, title: const Text('Use Material Theming on Item Page'), + description: const Text( + 'get fancy with the colors on the item page at the cost of some performance', + ), leading: const Icon(Icons.dynamic_form_outlined), onToggle: (value) { ref.read(appSettingsProvider.notifier).updateState( diff --git a/lib/router/scaffold_with_nav_bar.dart b/lib/router/scaffold_with_nav_bar.dart index c306e88..f39a9ec 100644 --- a/lib/router/scaffold_with_nav_bar.dart +++ b/lib/router/scaffold_with_nav_bar.dart @@ -22,7 +22,8 @@ class ScaffoldWithNavBar extends StatelessWidget { landscapeLayout: BottomNavigationBarLandscapeLayout.centered, selectedFontSize: Theme.of(context).textTheme.labelMedium!.fontSize!, unselectedFontSize: Theme.of(context).textTheme.labelMedium!.fontSize!, - // fixedColor: Theme.of(context).colorScheme.primary, + showUnselectedLabels: false, + fixedColor: Theme.of(context).colorScheme.onBackground, // type: BottomNavigationBarType.fixed, // Here, the items of BottomNavigationBar are hard coded. In a real diff --git a/lib/theme/theme_from_cover_provider.dart b/lib/theme/theme_from_cover_provider.dart index d704aa4..90de4d6 100644 --- a/lib/theme/theme_from_cover_provider.dart +++ b/lib/theme/theme_from_cover_provider.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter_animate/flutter_animate.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:shelfsdk/audiobookshelf_api.dart'; import 'package:whispering_pages/api/image_provider.dart'; @@ -6,15 +7,38 @@ import 'package:whispering_pages/api/image_provider.dart'; part 'theme_from_cover_provider.g.dart'; @riverpod -FutureOr themeFromCover( +Future> themeFromCover( ThemeFromCoverRef ref, ImageProvider img, { Brightness brightness = Brightness.dark, -}) { +}) async { + // add deliberate delay to simulate a long running task + await Future.delayed(200.ms); return ColorScheme.fromImageProvider( provider: img, brightness: brightness, ); + // TODO isolate is not working + // see https://github.com/flutter/flutter/issues/119207 + // use isolate to generate the color scheme + // RootIsolateToken? token = RootIsolateToken.instance; + // final scheme = await Isolate.run( + // () async { + // debugPrint('Isolate running ${Isolate.current.debugName}'); + // try { + // BackgroundIsolateBinaryMessenger.ensureInitialized(token!); + // WidgetsFlutterBinding.ensureInitialized(); + // return await ColorScheme.fromImageProvider( + // provider: img, + // brightness: brightness, + // ); + // } catch (e) { + // debugPrint('Error in isolate: $e'); + // return null; + // } + // }, + // ); + // return scheme; } @riverpod diff --git a/lib/theme/theme_from_cover_provider.g.dart b/lib/theme/theme_from_cover_provider.g.dart index 94f581a..6c69f28 100644 --- a/lib/theme/theme_from_cover_provider.g.dart +++ b/lib/theme/theme_from_cover_provider.g.dart @@ -6,7 +6,7 @@ part of 'theme_from_cover_provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$themeFromCoverHash() => r'e52e7b9c644f3fcc266cfc480b7003ec7492431c'; +String _$themeFromCoverHash() => r'b1d56a4add77d157a803424d02ef52c4d8c3f1d7'; /// Copied from Dart SDK class _SystemHash { @@ -34,7 +34,7 @@ class _SystemHash { const themeFromCoverProvider = ThemeFromCoverFamily(); /// See also [themeFromCover]. -class ThemeFromCoverFamily extends Family> { +class ThemeFromCoverFamily extends Family>> { /// See also [themeFromCover]. const ThemeFromCoverFamily(); @@ -75,7 +75,8 @@ class ThemeFromCoverFamily extends Family> { } /// See also [themeFromCover]. -class ThemeFromCoverProvider extends AutoDisposeFutureProvider { +class ThemeFromCoverProvider + extends AutoDisposeFutureProvider> { /// See also [themeFromCover]. ThemeFromCoverProvider( ImageProvider img, { @@ -115,7 +116,8 @@ class ThemeFromCoverProvider extends AutoDisposeFutureProvider { @override Override overrideWith( - FutureOr Function(ThemeFromCoverRef provider) create, + FutureOr> Function(ThemeFromCoverRef provider) + create, ) { return ProviderOverride( origin: this, @@ -133,7 +135,7 @@ class ThemeFromCoverProvider extends AutoDisposeFutureProvider { } @override - AutoDisposeFutureProviderElement createElement() { + AutoDisposeFutureProviderElement> createElement() { return _ThemeFromCoverProviderElement(this); } @@ -154,7 +156,8 @@ class ThemeFromCoverProvider extends AutoDisposeFutureProvider { } } -mixin ThemeFromCoverRef on AutoDisposeFutureProviderRef { +mixin ThemeFromCoverRef + on AutoDisposeFutureProviderRef> { /// The parameter `img` of this provider. ImageProvider get img; @@ -163,7 +166,7 @@ mixin ThemeFromCoverRef on AutoDisposeFutureProviderRef { } class _ThemeFromCoverProviderElement - extends AutoDisposeFutureProviderElement + extends AutoDisposeFutureProviderElement> with ThemeFromCoverRef { _ThemeFromCoverProviderElement(super.provider);