我试图动态设置一个抽屉大小。
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方法是用context调用的,而到调用的时候,并没有任何之前的Widget,也就是说当你的build被调用的时候,你的MaterialApp还不存在,所以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,那么你应该使用一个 "Widget "来解决这个问题。建设者 小工具,它将为你生成一个新的BuildContext。你的Widget会像这样。
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
参数,这样就可以得到 context
的 MaterialApp
小部件,该 context
你现在用的是没有 MaterialApp
.