即使在MaterialApp小部件下包装了MediaQuery.of()时,该上下文也不包含MediaQuery

时间:2019-08-11 00:03:14

标签: flutter

我无法通过引用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(脏)

1 个答案:

答案 0 :(得分:0)

只有MediaQuery的后代可以访问它。这意味着您不能基于主题构建MaterialApp.theme

如果需要,可以使用MaterialApp.builder

MaterialApp(
  builder: (context, child) {
    MediaQuery.of(context);
    return Theme(
      child: child,
    );
  },
  home: ...
)