使用不包含 MediaQuery 的上下文调用 MediaQuery.of()。 (紧急援助)
Posted
技术标签:
【中文标题】使用不包含 MediaQuery 的上下文调用 MediaQuery.of()。 (紧急援助)【英文标题】:MediaQuery.of() called with a context that does not contain a MediaQuery. (emergency aid) 【发布时间】:2020-09-20 20:33:54 【问题描述】:我删除了“MaterialApp”代码块,因为我一开始无法编写我想要的代码。
现在出现错误,我该如何解决?我必须在很短的时间内处理这个问题,我必须把我写的代码放在“MaterialApp”块中,但我做不到。
你能帮帮我吗?
class MyApp extends StatelessWidget
@override
Widget build(BuildContext context)
return CupertinoTabScaffold(
tabBar: CupertinoTabBar(
items: < BottomNavigationBarItem > [
new BottomNavigationBarItem(
icon: new Icon(Icons.home),
title: Text('Enes'),
),
new BottomNavigationBarItem(
icon: new Icon(Icons.bluetooth),
title: Text('Mehmet'),
),
],
),
tabBuilder: (BuildContext context, int index)
return CupertinoTabView(
builder: (BuildContext context)
return CupertinoPageScaffold(
navigationBar: CupertinoNavigationBar(
middle: Text('Page 1 of tab $index'),
),
child: Center(
child: CupertinoButton(
child: const Text('Next Page'),
onPressed: ()
Navigator.of(context).push(
CupertinoPageRoute < void > (
builder: (BuildContext context)
return CupertinoPageScaffold(
navigationBar: CupertinoNavigationBar(
middle: Text('Page 2 of tab $index'),
),
child: Center(
child: CupertinoButton(
child: const Text('Back'),
onPressed: ()
Navigator.of(context).pop();
,
),
),
);
,
),
);
,
),
),
);
,
);
,
);
【问题讨论】:
这能回答你的问题吗? Flutter Error: MediaQuery.of() called with a context that does not contain a MediaQuery 【参考方案1】:不确定为什么它必须在 MaterialApp 中。这个解决方案是我过去部署的:
在您的 MaterialApp 中,SetupStuff(可以命名为任何名称)设置为您的 home 或 initialRoute。
class MyApp extends StatelessWidget
@override
Widget build(BuildContext context)
return MaterialApp(
color: Colors.yellow[100],
debugShowCheckedModeBanner: false,
title: 'MyApp',
theme: currentTheme,
home: SetupStuff(),
);
class SetupStuff extends StatelessWidget
@override
Widget build(BuildContext context)
// This is the first 'context' with a MediaQuery, therefore,
// this is the first opportunity to set MediaQuery based values
//Set values / do things here.
WidgetsBinding.instance.addPostFrameCallback((_)
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (BuildContext context) => AlsoMyApp()));
);
return SafeArea(child: Material(color: Colors.yellow[300]));
【讨论】:
对不起,我是这个程序的新手。当我编写您丢弃的代码时,“Router”、“splashRoute”和“currentTheme”代码中出现错误。你能把它应用到我写的代码上并分享吗? 将您的“MyApp”重命名为“AlsoMyApp”。并尝试上面的代码。有关此问题的更多详细信息,请参见上面 Nae 提供的链接。【参考方案2】:您似乎想开发一个带有 ios 元素的应用程序。如果是这样,您需要将MaterialApp
替换为CupertinoApp
。如果不是,您不得删除MaterialApp
,因为它是必须存在的。
class CupertinoApp extends StatelessWidget
@override
Widget build(BuildContext context)
return CupertinoApp(
home: CupertinoHomePage(),
);
希望对你有帮助。
【讨论】:
以上是关于使用不包含 MediaQuery 的上下文调用 MediaQuery.of()。 (紧急援助)的主要内容,如果未能解决你的问题,请参考以下文章
使用 MediaQuery 的响应式元素对齐 - 使用不包含它的上下文调用
Flutter 错误:(Webview) Media Query.of() 使用不包含媒体查询的上下文调用
如何解决 Flutter 中的 MediaQuery 错误? [复制]