![](/img/trans.png)
[英]MediaQuery.of() called with a context that does not contain MediaQuery
[英]Inside of MatterialApp. MediaQuery.of() called with a context that does not contain a MediaQuery
我正在嘗試動態設置抽屜大小。
import 'package:flutter/material.dart';
import './screens/tab_screen.dart';
//widgets
import './widgets/main_drawer.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: TabWidget(),
endDrawer: Container(
width: MediaQuery.of(context).size.width * 0.65,
child: MainDrawer(),
),
),
title: "Ali Azad",
// routes: {
// '/': (_) => TabWidget(),
// },
);
}
}
但我得到了這個錯誤 = MediaQuery.of() 調用的上下文不包含 MediaQuery。;
如果你仔細看一下你的代碼,你會看到你的 build 方法是用上下文調用的,到那個調用的時候,沒有任何以前的 Widget,這意味着你的 MaterialApp 還不存在build 被調用,因此 BuildContext 沒有任何以前的 MaterialApp,您可以通過拆分代碼來解決這個問題:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Home(),
title: "Ali Azad",
);
}
}
// This Home Widget will be a child of MaterialApp, and the BuildContext has access to this Material widget.
class Home extends StatelessWidget{
@override
Widget build(BuildContext context){
return Scaffold(
body: TabWidget(),
endDrawer: Container(
width: MediaQuery.of(context).size.width * 0.65,
child: MainDrawer(),
)
);
}
}
或者,如果您不想創建另一個 Widget,那么您應該使用Builder小部件,它將為您生成一個新的 BuildContext。 您的小部件將如下所示:
MaterialApp(
home: Builder(
build: (BuildContext context) {
return Scaffold(
body: TabWidget(),
endDrawer: Container(
width: MediaQuery.of(context).size.width * 0.65,
child: MainDrawer(),
)
);
}
),
title: "Ali Azad",
);
將您的Container
小部件放在Builder
小部件中或創建一個單獨的小部件並將其分配給MaterialApp
home
參數,這樣您就可以獲得MaterialApp
小部件的context
,您現在使用的context
沒有MaterialApp
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.