mirror of
https://gitlab.com/veilid/veilidchat.git
synced 2025-05-02 14:26:12 -04:00
more refactor
This commit is contained in:
parent
ba4ef05a28
commit
b83aa3a64b
39 changed files with 722 additions and 514 deletions
|
@ -1,4 +1,4 @@
|
|||
export 'radix_generator.dart';
|
||||
export 'scale_color.dart';
|
||||
export 'scale_scheme.dart';
|
||||
export 'theme_preference.dart';
|
||||
export 'radix_generator.dart';
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -1,2 +1 @@
|
|||
export 'models/models.dart';
|
||||
export 'repository/theme_repository.dart';
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue