54 lines
1.2 KiB
Dart
54 lines
1.2 KiB
Dart
|
import 'dart:html';
|
||
|
|
||
|
class Theme {
|
||
|
String _name;
|
||
|
String _icon;
|
||
|
|
||
|
Theme(String t_name, String t_icon) {
|
||
|
_name = t_name;
|
||
|
_icon = t_icon;
|
||
|
}
|
||
|
|
||
|
String getIcon() => _icon;
|
||
|
String getName() => _name;
|
||
|
}
|
||
|
|
||
|
final themes = {
|
||
|
'light': Theme('light', 'fa-sun'),
|
||
|
'dark': Theme('dark', 'fa-lightbulb'),
|
||
|
'black': Theme('black', 'fa-moon')
|
||
|
};
|
||
|
|
||
|
final localStorage = window.localStorage;
|
||
|
|
||
|
var currentTheme = themes[localStorage['theme']];
|
||
|
|
||
|
void enableThemeChanger() {
|
||
|
final darkBtn = querySelector('#darkBtn');
|
||
|
final lightBtn = querySelector('#lightBtn');
|
||
|
final blackBtn = querySelector('#blackBtn');
|
||
|
|
||
|
lightBtn.onClick.listen((_) => switchTheme(themes['light']));
|
||
|
darkBtn.onClick.listen((_) => switchTheme(themes['dark']));
|
||
|
blackBtn.onClick.listen((_) => switchTheme(themes['black']));
|
||
|
}
|
||
|
|
||
|
Future<void> setTheme() async {
|
||
|
if (currentTheme == null) {
|
||
|
currentTheme = themes['light'];
|
||
|
localStorage['theme'] = currentTheme.getName();
|
||
|
}
|
||
|
querySelector('body')
|
||
|
..classes.clear()
|
||
|
..classes.add(currentTheme.getName());
|
||
|
}
|
||
|
|
||
|
void switchTheme(Theme currentTheme) {
|
||
|
// Set HTML theme
|
||
|
querySelector('body')
|
||
|
..classes.clear()
|
||
|
..classes.add(currentTheme.getName());
|
||
|
// Set storage theme
|
||
|
localStorage['theme'] = currentTheme.getName();
|
||
|
}
|