Определите, включен ли темный режим iOS13 от Flutter/Dart

Я пишу приложение Flutter для Android и iOS, которое изменит свой стиль / тему в зависимости от статуса темного режима iOS.

Есть ли в настоящее время что-то вроде MediaQuery.isDark ModeEnabled во Flutter?

Здесь есть проблема с GitHub, но команда Flutter должна быть перегружена проблемами, поэтому я не вижу, чтобы это было реализовано слишком рано.

Я могу использовать 'traitCollection.userInterfaceStyle' из специфичных для iOS каналов кода, но добавление специфичного для платформы кода для приложений Flutter/Dart не является для меня опытом. В настоящее время я работаю над этим решением!

Например, кто-то может иметь CupertinoPicker с адаптивными цветами:

CupertinoPicker(
    backgroundColor: isDarkModeEnabled ? Colors.black : Colors.white,
    children: items.map((thisItem) => Text(thisItem.name)).toList(),
    itemExtent: 32,
    onSelectedItemChanged: (newItem) {
        setState(() => this.item = items[newItem]);
    }
)

0 ответов

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

MaterialApp(
  theme: ThemeData(
    brightness: Brightness.light,
    primaryColor: Colors.red,
  ),
  darkTheme: ThemeData(
    brightness: Brightness.dark,
    // additional settings go here
  ),
);

::Обновить::

Вы также можете получить яркость платформы (Brightness.light / Brightness.dark), используя

WidgetsBinding.instance.window.platformBrightness

но вам придется использовать WidgetsBindingObserver mixin и переопределить метод ниже

@override
void didChangePlatformBrightness() {
    print(WidgetsBinding.instance.window.platformBrightness); // should print Brightness.light / Brightness.dark when you switch
    super.didChangePlatformBrightness(); // make sure you call this
}

см. https://api.flutter.dev/flutter/widgets/WidgetsBindingObserver-class.html о том, как использовать миксин.

Да, это возможно. Посмотрите здесь https://github.com/flutter/flutter/issues/33873, и вот ответ.

if(ios13==true){
    bool qDarkmodeEnable;
    var qdarkMode = MediaQuery.of(context).platformBrightness;
    if (qdarkMode == Brightness.dark){
        qDarkmodeEnable=true;
    } else {
        qDarkmodeEnable=false;
    }
}
Другие вопросы по тегам