relatica/lib/services/setting_service.dart

69 wiersze
1.9 KiB
Dart

import 'package:color_blindness/color_blindness.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../utils/theme_mode_extensions.dart';
class SettingsService extends ChangeNotifier {
late final SharedPreferences _prefs;
var _initialized = false;
SettingsService();
var _lowBandwidthMode = false;
bool get lowBandwidthMode => _lowBandwidthMode;
set lowBandwidthMode(bool value) {
_lowBandwidthMode = value;
_prefs.setBool(_lowBandwidthModeKey, _lowBandwidthMode);
notifyListeners();
}
var _themeMode = ThemeMode.system;
ThemeMode get themeMode => _themeMode;
set themeMode(ThemeMode mode) {
_themeMode = mode;
_prefs.setString(_themeModeKey, _themeMode.name);
notifyListeners();
}
ColorBlindnessType _colorBlindnessType = ColorBlindnessType.none;
ColorBlindnessType get colorBlindnessType => _colorBlindnessType;
set colorBlindnessType(ColorBlindnessType type) {
_colorBlindnessType = type;
_prefs.setString(_colorBlindnessTestingModeKey, type.name);
notifyListeners();
}
Future<void> initialize() async {
if (_initialized) {
return;
}
_prefs = await SharedPreferences.getInstance();
_lowBandwidthMode = _prefs.getBool(_lowBandwidthModeKey) ?? false;
_themeMode = ThemeModeExtensions.parse(_prefs.getString(_themeModeKey));
_colorBlindnessType = _colorBlindnessTypeFromPrefs(_prefs);
_initialized = true;
}
}
const _lowBandwidthModeKey = 'LowBandwidthMode';
const _themeModeKey = 'ThemeMode';
const _colorBlindnessTestingModeKey = 'ColorBlindnessTestingMode';
ColorBlindnessType _colorBlindnessTypeFromPrefs(SharedPreferences prefs) {
final cbString = prefs.getString(_colorBlindnessTestingModeKey);
if (cbString?.isEmpty ?? true) {
return ColorBlindnessType.none;
}
return ColorBlindnessType.values.firstWhere(
(c) => c.name == cbString,
orElse: () => ColorBlindnessType.none,
);
}