more refactor

This commit is contained in:
Christien Rioux 2024-01-08 21:37:08 -05:00
parent ba4ef05a28
commit b83aa3a64b
39 changed files with 722 additions and 514 deletions

View file

@ -1,4 +1,4 @@
export 'radix_generator.dart';
export 'scale_color.dart';
export 'scale_scheme.dart';
export 'theme_preference.dart';
export 'radix_generator.dart';

View file

@ -1,6 +1,10 @@
import 'package:change_case/change_case.dart';
import 'package:flutter/material.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import '../../tools/tools.dart';
import 'radix_generator.dart';
part 'theme_preference.freezed.dart';
part 'theme_preference.g.dart';
@ -49,4 +53,62 @@ class ThemePreferences with _$ThemePreferences {
factory ThemePreferences.fromJson(dynamic json) =>
_$ThemePreferencesFromJson(json as Map<String, dynamic>);
static const ThemePreferences defaults = ThemePreferences(
colorPreference: ColorPreference.vapor,
brightnessPreference: BrightnessPreference.system,
displayScale: 1,
);
}
extension ThemePreferencesExt on ThemePreferences {
/// Get material 'ThemeData' for existinb
ThemeData themeData() {
late final Brightness brightness;
switch (brightnessPreference) {
case BrightnessPreference.system:
if (isPlatformDark) {
brightness = Brightness.dark;
} else {
brightness = Brightness.light;
}
case BrightnessPreference.light:
brightness = Brightness.light;
case BrightnessPreference.dark:
brightness = Brightness.dark;
}
late final ThemeData themeData;
switch (colorPreference) {
// Special cases
case ColorPreference.contrast:
// xxx do contrastGenerator
themeData = radixGenerator(brightness, RadixThemeColor.grim);
// Generate from Radix
case ColorPreference.scarlet:
themeData = radixGenerator(brightness, RadixThemeColor.scarlet);
case ColorPreference.babydoll:
themeData = radixGenerator(brightness, RadixThemeColor.babydoll);
case ColorPreference.vapor:
themeData = radixGenerator(brightness, RadixThemeColor.vapor);
case ColorPreference.gold:
themeData = radixGenerator(brightness, RadixThemeColor.gold);
case ColorPreference.garden:
themeData = radixGenerator(brightness, RadixThemeColor.garden);
case ColorPreference.forest:
themeData = radixGenerator(brightness, RadixThemeColor.forest);
case ColorPreference.arctic:
themeData = radixGenerator(brightness, RadixThemeColor.arctic);
case ColorPreference.lapis:
themeData = radixGenerator(brightness, RadixThemeColor.lapis);
case ColorPreference.eggplant:
themeData = radixGenerator(brightness, RadixThemeColor.eggplant);
case ColorPreference.lime:
themeData = radixGenerator(brightness, RadixThemeColor.lime);
case ColorPreference.grim:
themeData = radixGenerator(brightness, RadixThemeColor.grim);
}
return themeData;
}
}

View file

@ -1,131 +0,0 @@
// ignore_for_file: always_put_required_named_parameters_first
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../models/models.dart';
////////////////////////////////////////////////////////////////////////
class ThemeRepository {
ThemeRepository._({required SharedPreferences sharedPreferences})
: _sharedPreferences = sharedPreferences,
_themePreferences = defaultThemePreferences;
final SharedPreferences _sharedPreferences;
ThemePreferences _themePreferences;
ThemeData? _cachedThemeData;
/// Singleton instance of ThemeRepository
static ThemeRepository? _instance;
static Future<ThemeRepository> get instance async {
if (_instance == null) {
final sharedPreferences = await SharedPreferences.getInstance();
final instance = ThemeRepository._(sharedPreferences: sharedPreferences);
await instance.load();
_instance = instance;
}
return _instance!;
}
static bool get isPlatformDark =>
WidgetsBinding.instance.platformDispatcher.platformBrightness ==
Brightness.dark;
/// Defaults
static ThemePreferences get defaultThemePreferences => const ThemePreferences(
colorPreference: ColorPreference.vapor,
brightnessPreference: BrightnessPreference.system,
displayScale: 1,
);
/// Get theme preferences
ThemePreferences get themePreferences => _themePreferences;
/// Set theme preferences
void setThemePreferences(ThemePreferences themePreferences) {
_themePreferences = themePreferences;
_cachedThemeData = null;
}
/// Load theme preferences from storage
Future<void> load() async {
final themePreferencesJson =
_sharedPreferences.getString('themePreferences');
ThemePreferences? newThemePreferences;
if (themePreferencesJson != null) {
try {
newThemePreferences =
ThemePreferences.fromJson(jsonDecode(themePreferencesJson));
// ignore: avoid_catches_without_on_clauses
} catch (_) {
// ignore
}
}
setThemePreferences(newThemePreferences ?? defaultThemePreferences);
}
/// Save theme preferences to storage
Future<void> save() async {
await _sharedPreferences.setString(
'themePreferences', jsonEncode(_themePreferences.toJson()));
}
/// Get material 'ThemeData' for existinb
ThemeData themeData() {
final cachedThemeData = _cachedThemeData;
if (cachedThemeData != null) {
return cachedThemeData;
}
late final Brightness brightness;
switch (_themePreferences.brightnessPreference) {
case BrightnessPreference.system:
if (isPlatformDark) {
brightness = Brightness.dark;
} else {
brightness = Brightness.light;
}
case BrightnessPreference.light:
brightness = Brightness.light;
case BrightnessPreference.dark:
brightness = Brightness.dark;
}
late final ThemeData themeData;
switch (_themePreferences.colorPreference) {
// Special cases
case ColorPreference.contrast:
// xxx do contrastGenerator
themeData = radixGenerator(brightness, RadixThemeColor.grim);
// Generate from Radix
case ColorPreference.scarlet:
themeData = radixGenerator(brightness, RadixThemeColor.scarlet);
case ColorPreference.babydoll:
themeData = radixGenerator(brightness, RadixThemeColor.babydoll);
case ColorPreference.vapor:
themeData = radixGenerator(brightness, RadixThemeColor.vapor);
case ColorPreference.gold:
themeData = radixGenerator(brightness, RadixThemeColor.gold);
case ColorPreference.garden:
themeData = radixGenerator(brightness, RadixThemeColor.garden);
case ColorPreference.forest:
themeData = radixGenerator(brightness, RadixThemeColor.forest);
case ColorPreference.arctic:
themeData = radixGenerator(brightness, RadixThemeColor.arctic);
case ColorPreference.lapis:
themeData = radixGenerator(brightness, RadixThemeColor.lapis);
case ColorPreference.eggplant:
themeData = radixGenerator(brightness, RadixThemeColor.eggplant);
case ColorPreference.lime:
themeData = radixGenerator(brightness, RadixThemeColor.lime);
case ColorPreference.grim:
themeData = radixGenerator(brightness, RadixThemeColor.grim);
}
_cachedThemeData = themeData;
return themeData;
}
}

View file

@ -1,2 +1 @@
export 'models/models.dart';
export 'repository/theme_repository.dart';