mirror of
https://github.com/Dr-Blank/Vaani.git
synced 2025-12-07 11:39:29 +00:00
feat: Add dark mode and theming options to app settings page
This commit is contained in:
parent
3ecdaadc3f
commit
1609fe9d65
4 changed files with 42 additions and 10 deletions
|
|
@ -32,6 +32,7 @@ class AppSettingsPage extends HookConsumerWidget {
|
||||||
SettingsTile.switchTile(
|
SettingsTile.switchTile(
|
||||||
initialValue: appSettings.isDarkMode,
|
initialValue: appSettings.isDarkMode,
|
||||||
title: const Text('Dark Mode'),
|
title: const Text('Dark Mode'),
|
||||||
|
description: const Text('we all know dark mode is better'),
|
||||||
leading: appSettings.isDarkMode
|
leading: appSettings.isDarkMode
|
||||||
? const Icon(Icons.dark_mode)
|
? const Icon(Icons.dark_mode)
|
||||||
: const Icon(Icons.light_mode),
|
: const Icon(Icons.light_mode),
|
||||||
|
|
@ -42,6 +43,9 @@ class AppSettingsPage extends HookConsumerWidget {
|
||||||
SettingsTile.switchTile(
|
SettingsTile.switchTile(
|
||||||
initialValue: appSettings.useMaterialThemeOnItemPage,
|
initialValue: appSettings.useMaterialThemeOnItemPage,
|
||||||
title: const Text('Use Material Theming on Item Page'),
|
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),
|
leading: const Icon(Icons.dynamic_form_outlined),
|
||||||
onToggle: (value) {
|
onToggle: (value) {
|
||||||
ref.read(appSettingsProvider.notifier).updateState(
|
ref.read(appSettingsProvider.notifier).updateState(
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,8 @@ class ScaffoldWithNavBar extends StatelessWidget {
|
||||||
landscapeLayout: BottomNavigationBarLandscapeLayout.centered,
|
landscapeLayout: BottomNavigationBarLandscapeLayout.centered,
|
||||||
selectedFontSize: Theme.of(context).textTheme.labelMedium!.fontSize!,
|
selectedFontSize: Theme.of(context).textTheme.labelMedium!.fontSize!,
|
||||||
unselectedFontSize: 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,
|
// type: BottomNavigationBarType.fixed,
|
||||||
|
|
||||||
// Here, the items of BottomNavigationBar are hard coded. In a real
|
// Here, the items of BottomNavigationBar are hard coded. In a real
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_animate/flutter_animate.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
import 'package:shelfsdk/audiobookshelf_api.dart';
|
import 'package:shelfsdk/audiobookshelf_api.dart';
|
||||||
import 'package:whispering_pages/api/image_provider.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';
|
part 'theme_from_cover_provider.g.dart';
|
||||||
|
|
||||||
@riverpod
|
@riverpod
|
||||||
FutureOr<ColorScheme> themeFromCover(
|
Future<FutureOr<ColorScheme?>> themeFromCover(
|
||||||
ThemeFromCoverRef ref,
|
ThemeFromCoverRef ref,
|
||||||
ImageProvider<Object> img, {
|
ImageProvider<Object> img, {
|
||||||
Brightness brightness = Brightness.dark,
|
Brightness brightness = Brightness.dark,
|
||||||
}) {
|
}) async {
|
||||||
|
// add deliberate delay to simulate a long running task
|
||||||
|
await Future.delayed(200.ms);
|
||||||
return ColorScheme.fromImageProvider(
|
return ColorScheme.fromImageProvider(
|
||||||
provider: img,
|
provider: img,
|
||||||
brightness: brightness,
|
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
|
@riverpod
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ part of 'theme_from_cover_provider.dart';
|
||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$themeFromCoverHash() => r'e52e7b9c644f3fcc266cfc480b7003ec7492431c';
|
String _$themeFromCoverHash() => r'b1d56a4add77d157a803424d02ef52c4d8c3f1d7';
|
||||||
|
|
||||||
/// Copied from Dart SDK
|
/// Copied from Dart SDK
|
||||||
class _SystemHash {
|
class _SystemHash {
|
||||||
|
|
@ -34,7 +34,7 @@ class _SystemHash {
|
||||||
const themeFromCoverProvider = ThemeFromCoverFamily();
|
const themeFromCoverProvider = ThemeFromCoverFamily();
|
||||||
|
|
||||||
/// See also [themeFromCover].
|
/// See also [themeFromCover].
|
||||||
class ThemeFromCoverFamily extends Family<AsyncValue<ColorScheme>> {
|
class ThemeFromCoverFamily extends Family<AsyncValue<FutureOr<ColorScheme?>>> {
|
||||||
/// See also [themeFromCover].
|
/// See also [themeFromCover].
|
||||||
const ThemeFromCoverFamily();
|
const ThemeFromCoverFamily();
|
||||||
|
|
||||||
|
|
@ -75,7 +75,8 @@ class ThemeFromCoverFamily extends Family<AsyncValue<ColorScheme>> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See also [themeFromCover].
|
/// See also [themeFromCover].
|
||||||
class ThemeFromCoverProvider extends AutoDisposeFutureProvider<ColorScheme> {
|
class ThemeFromCoverProvider
|
||||||
|
extends AutoDisposeFutureProvider<FutureOr<ColorScheme?>> {
|
||||||
/// See also [themeFromCover].
|
/// See also [themeFromCover].
|
||||||
ThemeFromCoverProvider(
|
ThemeFromCoverProvider(
|
||||||
ImageProvider<Object> img, {
|
ImageProvider<Object> img, {
|
||||||
|
|
@ -115,7 +116,8 @@ class ThemeFromCoverProvider extends AutoDisposeFutureProvider<ColorScheme> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Override overrideWith(
|
Override overrideWith(
|
||||||
FutureOr<ColorScheme> Function(ThemeFromCoverRef provider) create,
|
FutureOr<FutureOr<ColorScheme?>> Function(ThemeFromCoverRef provider)
|
||||||
|
create,
|
||||||
) {
|
) {
|
||||||
return ProviderOverride(
|
return ProviderOverride(
|
||||||
origin: this,
|
origin: this,
|
||||||
|
|
@ -133,7 +135,7 @@ class ThemeFromCoverProvider extends AutoDisposeFutureProvider<ColorScheme> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
AutoDisposeFutureProviderElement<ColorScheme> createElement() {
|
AutoDisposeFutureProviderElement<FutureOr<ColorScheme?>> createElement() {
|
||||||
return _ThemeFromCoverProviderElement(this);
|
return _ThemeFromCoverProviderElement(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -154,7 +156,8 @@ class ThemeFromCoverProvider extends AutoDisposeFutureProvider<ColorScheme> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mixin ThemeFromCoverRef on AutoDisposeFutureProviderRef<ColorScheme> {
|
mixin ThemeFromCoverRef
|
||||||
|
on AutoDisposeFutureProviderRef<FutureOr<ColorScheme?>> {
|
||||||
/// The parameter `img` of this provider.
|
/// The parameter `img` of this provider.
|
||||||
ImageProvider<Object> get img;
|
ImageProvider<Object> get img;
|
||||||
|
|
||||||
|
|
@ -163,7 +166,7 @@ mixin ThemeFromCoverRef on AutoDisposeFutureProviderRef<ColorScheme> {
|
||||||
}
|
}
|
||||||
|
|
||||||
class _ThemeFromCoverProviderElement
|
class _ThemeFromCoverProviderElement
|
||||||
extends AutoDisposeFutureProviderElement<ColorScheme>
|
extends AutoDisposeFutureProviderElement<FutureOr<ColorScheme?>>
|
||||||
with ThemeFromCoverRef {
|
with ThemeFromCoverRef {
|
||||||
_ThemeFromCoverProviderElement(super.provider);
|
_ThemeFromCoverProviderElement(super.provider);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue