Skip to content

Instantly share code, notes, and snippets.

@mskasal
Created November 28, 2020 19:18
Show Gist options
  • Save mskasal/61aaeff29b1d01d93d0d9c6f6461ec4d to your computer and use it in GitHub Desktop.
Save mskasal/61aaeff29b1d01d93d0d9c6f6461ec4d to your computer and use it in GitHub Desktop.
Change theme dynamically, ex. dark/light theme
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/all.dart';
import 'package:shared_preferences/shared_preferences.dart';
class ThemeNotifier extends ChangeNotifier {
final String key = "theme";
SharedPreferences _prefs;
bool _darkTheme;
bool get darkTheme => _darkTheme;
ThemeNotifier() {
_darkTheme = true;
_loadFromPrefs();
}
toggleTheme() {
_darkTheme = !_darkTheme;
_saveToPrefs();
notifyListeners();
}
_initPrefs() async {
if (_prefs == null) _prefs = await SharedPreferences.getInstance();
}
_loadFromPrefs() async {
await _initPrefs();
_darkTheme = _prefs.getBool(key) ?? true;
notifyListeners();
}
_saveToPrefs() async {
await _initPrefs();
_prefs.setBool(key, _darkTheme);
}
}
final themeProvider = ChangeNotifierProvider<ThemeNotifier>((_) {
return ThemeNotifier();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment