![](/img/trans.png)
[英](MediaQuery.of() called with a context that does not contain a MediaQuery.) error
[英]MediaQuery.of() called with a context that does not contain a MediaQuery. (emergency aid)
我刪除了“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();
},
),
),
);
},
),
);
},
),
),
);
},
);
},
);
}
}
不知道為什么它必須在 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]));
}
}
您似乎想開發一個帶有 iOS 元素的應用程序。 如果是這樣,您需要將MaterialApp
替換為CupertinoApp
。 如果沒有,您不得刪除MaterialApp
,因為它必須存在。
class CupertinoApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CupertinoApp(
home: CupertinoHomePage(),
);
}
}
我希望它有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.