ios - 从 Flutter/Dart 检测 iOS13 深色模式是否启用

标签 ios flutter dart ios-darkmode

我正在为 Android 和 iOS 编写一个 Flutter 应用程序,它将根据 iOS 的深色模式状态更改其样式/主题。

目前 Flutter 中有类似 MediaQuery.isDarkModeEnabled 的东西吗?

有一个 GitHub 问题未解决 here但 Flutter 团队肯定被问题压垮了,所以我不认为它会过早实现。

我可以使用 iOS 特定代码 channel 中的“traitCollection.userInterfaceStyle”,但为 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]);
    }
)

最佳答案

以下是如何为浅色和深色模式设置不同的颜色,如果手机设置为深色模式或浅色模式,应用程序会自动切换。

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关于如何使用 mixin。

关于ios - 从 Flutter/Dart 检测 iOS13 深色模式是否启用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57475630/

相关文章:

iphone - 验证网络请求是否由 iOS 应用程序发送

android - swift 中是否有类似于 Android 中的 R.java 的功能?

iphone - 问在xcode4中使用json

json - 在 Flutter/Dart 中解析列表

flutter - Flutter应用程式中的 list 无法回应触控事件

flutter - 如何在 Flutter Widget(Center Widget)的子属性中使用条件语句

flutter setstate 只重建一个 child

flutter - 如何在 Flutter 中处理堆栈或提供程序架构中的应用程序状态或生命周期

ios - 具有自定义对象原始值的 Swift 枚举

ios - 在pubspec.yaml中添加Google Maps软件包后,Flutter的iOS应用将无法构建