【发布时间】:2020-05-13 05:30:56
【问题描述】:
好的,所以我之前已经对这个特定主题进行了相当多的研究,我知道这是 Flutter 开发人员尚未实现自动运行的功能(将浅色和深色主题设置为打开应用程序时动态检查更改)但我知道这是可能的。我不希望我的用户需要做出这个选择,我知道我很接近,但我错过了一些重要的事情。我来解释一下:
final Brightness brightnessValue = MediaQuery.of(context).platformBrightness;
bool isDark = brightnessValue == Brightness.dark;
这两行代码应该通过一个布尔值(深色主题真或假)进入我的代码。这些代码行正在运行,但它们会引发错误。
MediaQuery.of() 使用不包含 MediaQuery 的上下文调用。从传递给 MediaQuery.of() 的上下文开始,找不到 MediaQuery 祖先。这可能是因为您没有 WidgetsApp 或 MaterialApp 小部件(这些小部件引入了 MediaQuery),或者如果您使用的上下文来自这些小部件上方的小部件,则可能会发生这种情况。)。使用的上下文是: 我的应用 也可以看看: https://flutter.dev/docs/testing/errors
现在我已经看到一些人实现了这行代码并且它适用于他们,所以我知道这不是语法问题。我实际上是按照他们的要求将这行代码放在一个小部件应用程序下面,(据我了解这些事情,所以我受阻。
相关代码:
CupertinoThemeData currentTheme;
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final Brightness brightnessValue = MediaQuery.of(context).platformBrightness;
bool isDark = brightnessValue == Brightness.dark;
<CODE TO SELECT THEME DEPENDING ON PHONE'S THEME. Setting parameters of currentTheme>
return CupertinoApp(
<CODE FOR APP>
),
}
}
现在我会把它放在 CupertinoApp 小部件中,但这也不起作用,因为你不能在里面真正进行函数调用,我需要将主题传递到那里,因为这会影响整体的节目主题。
本质上,它看起来像先有鸡还是先有蛋的场景,在我拥有媒体查询之前我无法设置主题,并且在我已经设置主题之前我无法进行媒体查询,这否定了查询的全部目的。
有什么想法吗?
【问题讨论】:
标签: ios flutter media-queries themes