检测是否从Flutter / Dart启用了iOS13暗模式
问题内容:
我正在编写适用于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]);
}
)
问题答案:
这是您可以为明暗模式设置不同颜色的方法,如果手机设置为暗模式或亮模式,则应用程序将自动切换。
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
}
有关如何使用mixin的信息,请参见https://api.flutter.dev/flutter/widgets/WidgetsBindingObserver-
class.html
。