Flutter 颤振:收到运行应用程序中显示模式(暗/正常)更改的通知
我使用一个检查Flutter 颤振:收到运行应用程序中显示模式(暗/正常)更改的通知,flutter,Flutter,我使用一个检查MediaQuery.of(context).platformBrightness的函数来确定平台暗模式设置: 这是从didChangeAppLifecycleState()调用的,在启动过程中,它基本上是有效的,只是我发现我需要最小化并重新打开应用程序才能接收更新的显示模式 当应用程序出现在前台时,MediaQuery platformBrightness值似乎不会更新,但如果您只是最小化并将应用程序恢复到默认状态,则是正确的。这是使用SDK 29.0.2在Pie emulato
MediaQuery.of(context).platformBrightness
的函数来确定平台暗模式设置:
这是从didChangeAppLifecycleState()
调用的,在启动过程中,它基本上是有效的,只是我发现我需要最小化并重新打开应用程序才能接收更新的显示模式
当应用程序出现在前台时,MediaQuery platformBrightness值似乎不会更新,但如果您只是最小化并将应用程序恢复到默认状态,则是正确的。这是使用SDK 29.0.2在Pie emulator上实现的
有没有一种方法可以直接监听关于平台暗模式的通知
注意:我不使用Flitter主题引擎有很多原因-应用程序主题比Flitter提供的更复杂,并且用户被赋予一个优先设置来覆盖黑暗模式/正常设置,以强制应用程序使用黑暗模式或正常模式,甚至为旧版本的安卓系统提供黑暗和正常模式。然而,当用户选择“自动”为黑暗/正常显示模式时,应用程序应遵循平台模式,并且即使用户实际上没有离开应用程序,也应切换,例如只需拉下阴影并将黑暗模式设置为打开或关闭。为此,我需要一种倾听事件的方式
更新:
进一步的测试表明,MediaQuery实际上已更新,但调用didChangeAppLifecycleState()
时,该值仍反映旧值
例如,以下工作:
@覆盖
void didchangeAppifecyclestate(AppLifecycleState状态){
super.didChangeAppLifecycleState(
if(显示模式首选项设置==显示模式自动){
计时器(持续时间(毫秒:333),(){
切换显示模式(显示模式自动);
});
}
}
这比我想象的要简单得多,尽管我不得不意外地找到答案
状态小部件允许您覆盖方法didChangePlatformBrightness()
例如:
@覆盖
void didchangeflatformbrightness(){
if(MediaQuery.of(context.platformBrightness==Brightness.dark){
打印(“探测显示模式:暗”);
//在这里施黑魔法
}否则{
打印(“探测显示模式:正常”);
//这里是正常模式
}
}
注意,为了覆盖didChangePlatformBrightness(),您的小部件必须使用WidgetsBindingObserver
mixin。因此,创建类似以下内容的小部件(或状态):class SomeWidget使用WidgetsBindingObserver扩展无状态小部件{…