检测是否从 Flutter/Dart 启用了 iOS13 暗模式
Detect if iOS13 Dark Mode is enabled from Flutter/Dart
我正在为 Android 和 iOS 编写一个 Flutter 应用程序,它将根据 iOS 的黑暗模式状态更改其 style/theme。
Flutter 中目前有类似 MediaQuery.isDarkModeEnabled 的东西吗?
有一个 GitHub 问题未解决 here,但 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]);
}
)
是的,这是可能的。看这里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;
}
}
此处介绍如何为浅色和深色模式设置不同的颜色,如果 phone 设置为深色模式或浅色模式,应用程序将自动切换。
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
混合宏并重写下面的方法
@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。
我正在为 Android 和 iOS 编写一个 Flutter 应用程序,它将根据 iOS 的黑暗模式状态更改其 style/theme。
Flutter 中目前有类似 MediaQuery.isDarkModeEnabled 的东西吗?
有一个 GitHub 问题未解决 here,但 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]);
}
)
是的,这是可能的。看这里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;
}
}
此处介绍如何为浅色和深色模式设置不同的颜色,如果 phone 设置为深色模式或浅色模式,应用程序将自动切换。
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
混合宏并重写下面的方法
@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。