我无法通过引用screenHeight和screenWidth变量在themeData方法内的MaterialApp小部件中访问MediaQuery.of()。
我尝试将HomeScreen小部件包装在MaterialApp小部件本身中,然后将其包装到Scaffold小部件中,但这无济于事。
class MyApp extends StatelessWidget {
MyApp({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
final screenHeight = MediaQuery.of(context).size.height / 100;
final screenWidth = MediaQuery.of(context).size.width / 100;
return MaterialApp(
title: 'MyApp',
theme: ThemeData(
primaryColor: Color.fromRGBO(231, 13, 61, 1),
textTheme: new TextTheme(
title: new TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: screenHeight * 1.8,),
body1: new TextStyle(color: Colors.black, fontSize: screenHeight * 1.8,),
),
),
home: HomeScreen(),
);
}
}
class _HomeScreen extends State {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppNavBar(),
body: Container(
color: Colors.white,
child: ListView(
children: <Widget> [
new Page1Widget(),
Divider(height: 0, color: Colors.grey,),
new Page2Widget(),
],
),
),
bottomNavigationBar: new BottomNavBar(),
);
}
}
颤振:W小工具库引起的异常CA ═══════════════════════ 颤抖:构建MyApp(dirty)时引发了以下断言: flutter:使用不包含MediaQuery的上下文调用MediaQuery.of()。 颤抖:从传递给MediaQuery.of()的上下文开始,找不到MediaQuery祖先。 颤动:之所以会发生这种情况,是因为您没有WidgetsApp或MaterialApp小部件(这些小部件会引入 flutter:MediaQuery),或者如果您使用的上下文来自这些小部件上方的小部件,则可能会发生这种情况。 颤动:使用的上下文是: 扑:MyApp(脏)
答案 0 :(得分:0)
只有MediaQuery
的后代可以访问它。这意味着您不能基于主题构建MaterialApp.theme
。
如果需要,可以使用MaterialApp.builder
:
MaterialApp(
builder: (context, child) {
MediaQuery.of(context);
return Theme(
child: child,
);
},
home: ...
)