24 lines
669 B
Dart
24 lines
669 B
Dart
import 'dart:html' show window, querySelector;
|
|
|
|
final localStorage = window.localStorage;
|
|
|
|
Future<void> setTheme([String theme]) async {
|
|
final currentTheme = theme ?? localStorage['theme'] ??
|
|
() {
|
|
final devicePrefersDark =
|
|
window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
return devicePrefersDark ? 'nord' : 'light';
|
|
}();
|
|
localStorage['theme'] = currentTheme;
|
|
querySelector('body')
|
|
..classes.clear()
|
|
..classes.add(currentTheme);
|
|
}
|
|
|
|
void enableThemeChanger() {
|
|
final themes = <String>['light', 'dark', 'nord', 'black'];
|
|
themes.forEach((theme) =>
|
|
querySelector('#${theme}Btn').onClick.listen((_) => setTheme(theme))
|
|
);
|
|
}
|