Флаттер: программно вызывает использование darkTheme - PullRequest
1 голос
/ 18 октября 2019

В Flutter вы можете установить темную тему, которая будет использоваться, если будут использоваться определенные контексты (например, Dark Mode установлен на Android Q). Есть ли рекомендуемый способ разрешить это переопределение программно;например, в ответ на предпочтения пользователя?

Я думаю, это можно сделать на самом верхнем уровне приложения:

MaterialApp(
    theme: ThemeData.light(),
    darkTheme: ThemeData.dark(),
    themeMode: fromSomeState,
)

Однако я также хотел бы иметь возможность переключатьсяот того, находится ли приложение в темном режиме программно в различных точках приложения (например, для выбора изображения):

MediaQuery.of(context).platformBrightness == Brightness.dark;

Я мог бы попытаться обновить MediaQueryData, чтобы переопределить platformBrightness,но это может быть сделано только внутри MaterialApp, что кажется неудобным.

Есть ли лучший способ делать подобные вещи?

1 Ответ

1 голос
/ 18 октября 2019

Вы можете проверить 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;

И установить тему соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...