mirror of
https://github.com/Dr-Blank/Vaani.git
synced 2025-12-15 23:49:30 +00:00
feat: multiple theming options (#50)
* refactor: consolidate theme definitions by removing separate dark and light theme files * feat: integrate dynamic color support and enhance theme settings management * feat: add theme settings route and update theme management in app settings * feat: enhance theme management by integrating high contrast support in various components * feat: implement mode selection dialog for theme settings and enhance button functionality * refactor: update theme import paths and consolidate theme provider files * feat: enhance theme management by integrating theme selection based on audiobook playback * refactor: update default value for useMaterialThemeFromSystem to false in theme settings * refactor: adjust high contrast condition order in theme settings for consistency * refactor: rename useMaterialThemeOfPlayingItem to useCurrentPlayerThemeThroughoutApp for clarity * refactor: correct spelling in system theme provider and replace with updated implementation * refactor: extract restore backup dialog into a separate widget for improved readability * refactor: reorganize settings sections for clarity and improve restore dialog functionality
This commit is contained in:
parent
758e4cdc83
commit
ff83c2cc63
28 changed files with 935 additions and 194 deletions
73
lib/theme/providers/system_theme_provider.dart
Normal file
73
lib/theme/providers/system_theme_provider.dart
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
import 'package:dynamic_color/dynamic_color.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:material_color_utilities/material_color_utilities.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'system_theme_provider.g.dart';
|
||||
|
||||
final _logger = Logger('SystemThemeProvider');
|
||||
|
||||
/// copied from [DynamicColorBuilder]
|
||||
@Riverpod(keepAlive: true)
|
||||
FutureOr<(ColorScheme light, ColorScheme dark)?> systemTheme(
|
||||
SystemThemeRef ref, {
|
||||
bool highContrast = false,
|
||||
}) async {
|
||||
_logger.fine('Generating system theme');
|
||||
ColorScheme? schemeLight;
|
||||
ColorScheme? schemeDark;
|
||||
// Platform messages may fail, so we use a try/catch PlatformException.
|
||||
try {
|
||||
CorePalette? corePalette = await DynamicColorPlugin.getCorePalette();
|
||||
|
||||
if (corePalette != null) {
|
||||
_logger.fine('dynamic_color: Core palette detected.');
|
||||
schemeLight = corePalette.toColorScheme(brightness: Brightness.light);
|
||||
schemeDark = corePalette.toColorScheme(brightness: Brightness.dark);
|
||||
}
|
||||
} on PlatformException {
|
||||
_logger.warning('dynamic_color: Failed to obtain core palette.');
|
||||
}
|
||||
|
||||
if (schemeLight == null || schemeDark == null) {
|
||||
try {
|
||||
final Color? accentColor = await DynamicColorPlugin.getAccentColor();
|
||||
|
||||
if (accentColor != null) {
|
||||
_logger.fine('dynamic_color: Accent color detected.');
|
||||
schemeLight = ColorScheme.fromSeed(
|
||||
seedColor: accentColor,
|
||||
brightness: Brightness.light,
|
||||
);
|
||||
schemeDark = ColorScheme.fromSeed(
|
||||
seedColor: accentColor,
|
||||
brightness: Brightness.dark,
|
||||
);
|
||||
}
|
||||
} on PlatformException {
|
||||
_logger.warning('dynamic_color: Failed to obtain accent color.');
|
||||
}
|
||||
}
|
||||
|
||||
if (schemeLight == null || schemeDark == null) {
|
||||
_logger
|
||||
.warning('dynamic_color: Dynamic color not detected on this device.');
|
||||
return null;
|
||||
}
|
||||
// set high contrast theme
|
||||
if (highContrast) {
|
||||
schemeLight = schemeLight
|
||||
.copyWith(
|
||||
surface: Colors.white,
|
||||
)
|
||||
.harmonized();
|
||||
schemeDark = schemeDark
|
||||
.copyWith(
|
||||
surface: Colors.black,
|
||||
)
|
||||
.harmonized();
|
||||
}
|
||||
return (schemeLight, schemeDark);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue