Refactor: Move theme management to ThemeController, add LocaleController and ScaleController for improved UI customization, and update related imports.
This commit is contained in:
42
finlog_app/app/lib/core/ui/controller/locale_controller.dart
Normal file
42
finlog_app/app/lib/core/ui/controller/locale_controller.dart
Normal file
@@ -0,0 +1,42 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:fluttery/fluttery.dart';
|
||||
import 'package:fluttery/preferences.dart';
|
||||
|
||||
/// Controls the current app language (system, de, en, ...).
|
||||
/// Loads the locale from Preferences or falls back to system default.
|
||||
class LocaleController extends ChangeNotifier {
|
||||
final Preferences _prefs;
|
||||
|
||||
LocaleController() : _prefs = App.service<Preferences>();
|
||||
|
||||
static const _key = 'language';
|
||||
|
||||
String _current = 'system';
|
||||
|
||||
Future<void> init() async {
|
||||
final saved = await _prefs.getString(_key);
|
||||
_current = saved ?? 'system';
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setLanguage(String lang) {
|
||||
_current = lang;
|
||||
notifyListeners();
|
||||
_prefs.setString(_key, lang);
|
||||
}
|
||||
|
||||
/// Returns the actual Locale or null = system.
|
||||
Locale? get locale {
|
||||
switch (_current) {
|
||||
case 'de':
|
||||
return const Locale('de');
|
||||
case 'en':
|
||||
return const Locale('en');
|
||||
case 'system':
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
String get language => _current;
|
||||
}
|
||||
47
finlog_app/app/lib/core/ui/controller/scale_controller.dart
Normal file
47
finlog_app/app/lib/core/ui/controller/scale_controller.dart
Normal file
@@ -0,0 +1,47 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:fluttery/fluttery.dart';
|
||||
import 'package:fluttery/preferences.dart';
|
||||
|
||||
/// Controls the current text scale (system, small, medium, large).
|
||||
/// Loads the value from Preferences or falls back to system default.
|
||||
class ScaleController extends ChangeNotifier {
|
||||
final Preferences _prefs;
|
||||
|
||||
ScaleController() : _prefs = App.service<Preferences>();
|
||||
|
||||
static const _key = 'textScale';
|
||||
|
||||
/// supported sizes
|
||||
static const Map<String, double> _factors = {
|
||||
'system': 1.0,
|
||||
'small': 0.9,
|
||||
'medium': 1.1,
|
||||
'large': 1.25,
|
||||
};
|
||||
|
||||
String _current = 'system';
|
||||
|
||||
/// Loads text scale from Preferences.
|
||||
Future<void> init() async {
|
||||
final saved = await _prefs.getString(_key);
|
||||
_current = saved ?? 'system';
|
||||
if (!_factors.containsKey(_current)) {
|
||||
_current = 'system';
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
/// Set text scale and persist.
|
||||
void setScale(String scale) {
|
||||
if (!_factors.containsKey(scale)) return;
|
||||
_current = scale;
|
||||
notifyListeners();
|
||||
_prefs.setString(_key, scale);
|
||||
}
|
||||
|
||||
/// get current factor (e.g. for MediaQuery.textScaler)
|
||||
double get factor => _factors[_current]!;
|
||||
|
||||
/// get current string (system/small/medium/large)
|
||||
String get scale => _current;
|
||||
}
|
||||
@@ -7,7 +7,7 @@ import 'package:fluttery/preferences.dart';
|
||||
class ThemeController extends ChangeNotifier {
|
||||
final Preferences _prefs;
|
||||
|
||||
// vars
|
||||
/// themeMode (system, dark or white)
|
||||
ThemeMode _themeMode = ThemeMode.system;
|
||||
|
||||
/// Constructor
|
||||
@@ -43,5 +43,6 @@ class ThemeController extends ChangeNotifier {
|
||||
}
|
||||
}
|
||||
|
||||
/// get current ThemeMode
|
||||
ThemeMode get themeMode => _themeMode;
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:app/core/app/router.dart';
|
||||
import 'package:app/core/app/startup/domain/initialize_app.dart';
|
||||
import 'package:app/core/app/theme.dart';
|
||||
import 'package:app/core/ui/controller/theme.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:fluttery/fluttery.dart';
|
||||
import 'package:fluttery/logger.dart';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'package:app/core/app/theme.dart';
|
||||
import 'package:app/core/ui/controller/theme.dart';
|
||||
import 'package:app/modules/settings/modules/app/model/app_settings_view_model.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'package:app/core/app/theme.dart';
|
||||
import 'package:app/core/ui/controller/theme.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// Domain-ish enums for clarity and easy (de)serialization.
|
||||
|
||||
Reference in New Issue
Block a user