This is an opinionated and effective way to provide multi-theme choice for your app.
theming depends on
shared_preference for state management and data retention respectively.
theming solves the issue of loading a default theme on the app startup before fetching last theme state from shared pref. After seeing this issue in two public articles, i decided to give it a try
main() and before
runApp() is loaded, a single instance of
SharedPreferences (none is created again thoughout the app) is gotten and passed into
ThemeProvider. This is bacause it is imperative to acquire the last/previous theme state before loading the app. yes,
final pref = await SharedPreferences.getInstance(); ThemeProvider themeProvider = ThemeProvider(pref); themeProvider.assertTheme();
the key to retaining the value of
themeProvider.assertTheme() is assigning relevant data it to a
static ThemeData? _themeData;
_themeData retains its value through the creation and recreation of the
ThemeProvider object in app’s lifecycle.
in what is relevant here, our variable of type
ThemeData will work our trick.
if you find this repo useful make to star 🌟 it. thank you.