Как перерисовать все приложение с новыми ThemeData?

У меня есть 2 вара ThemeData и SwitchListTile со следующим кодом:

new SwitchListTile(
                      value: applyDarkTheme,
                      title: const Text('Appy dark theme?'),
                      onChanged: (bool value) {
                        setState(() {
                          applyDarkTheme = value;
                        });
                      })

applyDarkTheme - это переменная, которую я проверяю только при первом создании приложения:

return new MaterialApp(
  title: 'Test Application',
  home: new MyHomePage(title: 'Test app'),
  theme: settings.applyDarkTheme ? AppThemes.dark : AppThemes.light,
  routes: _routes,
);

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

0
0
338
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете рассмотреть возможность вложения вашего MaterialApp в StatefulWidget.

Пример приложения Flutter Gallery делает это в своем виджете ГалереяApp.

  • Используйте простой и легкий класс StatefulWidget, например. ГалереяApp
  • Что создает соответствующий класс Галерея.
  • Этот класс имеет переменную экземпляра GalleryTheme _galleryTheme
  • Вам необходимо установить / изменить это значение в методе setState () [ref].
  • Затем вы можете передать это их в конструктор MaterialApp

Вот измененный фрагмент

class GalleryApp extends StatefulWidget {
  @override
  GalleryAppState createState() => new GalleryAppState();
}

class GalleryAppState extends State<GalleryApp> {
  GalleryTheme _galleryTheme = kAllGalleryThemes[0];
  ...

  @override
  Widget build(BuildContext context) {
    Widget home = new GalleryHome(
      galleryTheme: _galleryTheme,
      onThemeChanged: (GalleryTheme value) {
        setState(() {
          _galleryTheme = value;
        });
      },
      ...
    );

    ...

    return new MaterialApp(
      ...
      home: home,
    );
  }
}

Спасибо за это! После долгого редактирования я наконец сделал это.

argamanza 17.03.2018 19:23

Другие вопросы по теме