Flutter: программно вызывает использование darkTheme
Во Flutter вы можете установить темную тему для использования, которая будет использоваться в определенных контекстах (например, темный режим установлен на Android Q). Есть ли рекомендуемый способ разрешить это программно переопределить; например, в ответ на предпочтения пользователя?
Думаю, это можно сделать на самом верхнем уровне приложения:
MaterialApp(
theme: ThemeData.light(),
darkTheme: ThemeData.dark(),
themeMode: fromSomeState,
)
Однако я также хотел бы иметь возможность программно включать, находится ли приложение в темном режиме в различных точках приложения (например, для выбора изображения):
MediaQuery.of(context).platformBrightness == Brightness.dark;
Я мог бы попробовать обновить MediaQueryData
переопределить platformBrightness
тоже, но это можно сделать только внутри MaterialApp
, что кажется неудобным.
Есть ли лучший образец для подобных вещей?
1 ответ
Вы можете проверить dynamic_theme
Как пользоваться
Просто добавь Dynamic Theme
как родитель вашего MaterialApp
DynamicTheme(
defaultBrightness: Brightness.light,
data: (brightness) => new ThemeData(
primarySwatch: Colors.indigo,
brightness: brightness,
),
themedWidgetBuilder: (context, theme) {
return new MaterialApp(
.......
);
}
)
Получить currentBrightness
с помощью
DynamicTheme.of(context).brightness;
И установите его, используя
DynamicTheme.of(context).setBrightness(Theme.of(context).brightness == Brightness.dark? Brightness.light: Brightness.dark);
Вы можете прочитать об этом больше или создать свой собственный, проверьте этот средний пост
Отредактировано
Вы можете проверить текущую тему ОС, используя
MediaQuery.of(context).platformBrightness;
И установите тему соответственно.