14

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

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

这里有一个 GitHub 问题,但 Flutter 团队必须在问题上不堪重负,所以我看不到它会很快实现。

我可以使用 iOS 特定代码通道中的“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]);
    }
)
4

2 回答 2

24

以下是您可以为明暗模式设置不同颜色的方法,如果手机设置为暗模式或亮模式,应用程序将自动切换。

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

但是您必须使用WidgetsBindingObservermixin 并覆盖下面的方法

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

有关如何使用 mixin,请参阅https://api.flutter.dev/flutter/widgets/WidgetsBindingObserver-class.html 。

于 2019-10-03T22:08:31.833 回答
8

对的,这是可能的。看这里https://github.com/flutter/flutter/issues/33873#issuecomment-536309491 ,这就是答案。

if(ios13==true){
    bool qDarkmodeEnable;
    var qdarkMode = MediaQuery.of(context).platformBrightness;
    if (qdarkMode == Brightness.dark){
        qDarkmodeEnable=true;
    } else {
        qDarkmodeEnable=false;
    }
}
于 2019-09-29T14:56:56.473 回答