Files
login-vault-android/lib/theme_provider.dart

41 lines
1009 B
Dart

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
/// Persists and exposes the app theme mode (system | dark).
class ThemeProvider extends ChangeNotifier {
static const _key = 'theme_mode';
ThemeMode _mode = ThemeMode.system;
ThemeProvider() {
_load();
}
ThemeMode get mode => _mode;
Future<void> _load() async {
final prefs = await SharedPreferences.getInstance();
final v = prefs.getString(_key);
if (v == 'dark') {
_mode = ThemeMode.dark;
} else if (v == 'light') {
_mode = ThemeMode.light;
} else {
_mode = ThemeMode.system;
}
notifyListeners();
}
Future<void> setMode(ThemeMode mode) async {
_mode = mode;
final prefs = await SharedPreferences.getInstance();
await prefs.setString(
_key,
mode == ThemeMode.dark
? 'dark'
: mode == ThemeMode.light
? 'light'
: 'system');
notifyListeners();
}
}