changeThemeMode method

void changeThemeMode({
  1. bool? dynamic,
  2. bool? dark,
})

Change your current ThemeMode

If you do not send any parameter it will toggle in the following order:

dynamic -> light -> dark -> dynamic ->

Or you can define boolean values for the parameters "dynamic" and/or "dark"

If the value of "dynamic" is true, it takes precedence over "dark"

Implementation

void changeThemeMode({bool? dynamic, bool? dark}) {
  if (dynamic == null && dark == null) {
    _toggleTheme();
    return;
  }

  ThemeMode? newThemeMode;
  bool forceDark = _prefs.isDark() ?? false;

  if (dark != null || dynamic != null) {
    forceDark = dark ?? forceDark;
    newThemeMode = (dynamic ?? false)
        ? ThemeMode.system
        : forceDark
            ? ThemeMode.dark
            : ThemeMode.light;
  }

  if (newThemeMode == ThemeMode.system) {
    _prefs.clearPref(SharePrefsAttribute.isDark);
  } else {
    _prefs.setIsDark(forceDark);
  }

  setState(() {
    themeMode = newThemeMode;
  });
}