Смена темы без промедления во флаттере - PullRequest
0 голосов
/ 23 февраля 2020

Я использую провайдера для изменения темы в моем приложении. Мое приложение инициализируется сначала темной темой.

class ThemeNotifier extends ChangeNotifier {
  final String key = "them";
  SharedPreferences _prefs;
  bool _darkTheme;

  bool get darkTheme => _darkTheme;

  ThemeNotifier() {
    _darkTheme = true;
    _loadFromPrefs();
  }

  toggleTheme() {
    _darkTheme = !_darkTheme;
    _saveToPrefs();
    notifyListeners();
  }

  _loadFromPrefs() async {
    await _initPrefs();
    _darkTheme = _prefs.getBool(key) ?? true;
    notifyListeners();
  }

  _saveToPrefs() async {
    await _initPrefs();
    _prefs.setBool(key, _darkTheme);
  }

  _initPrefs() async {
    if (_prefs == null) _prefs = await SharedPreferences.getInstance();
  }
}

Когда я изменил их на светлый, я вызываю toggleTheme метод и меняю _darkTheme на false.

Я использую приведенные выше коды, например:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider.value(
      value: ThemeNotifier(),
      child: Consumer<ThemeNotifier>(
        builder: (context, notifire, child) {
          child:
          return MaterialApp(
            title: "theme",
            theme: notifire.darkTheme ? dark : light,
            home: HomeScreen(),
          );
        },
      ),
    );
  }
}

но когда я меняю приложение на светлую тему и выполняю горячую перезагрузку приложения на секунду, моя тема приложения становится темной, а затем переключается в светлый режим.

Как я могу загрузить приложение без темноты режим, когда я использую светлый режим, то есть, когда я переключаю их в светлый режим, я не хочу показывать темный режим даже в течение нескольких миллисекунд?

...