在颤动中使用 MediaQuery 的高度和宽度大小时出错

Posted

技术标签:

【中文标题】在颤动中使用 MediaQuery 的高度和宽度大小时出错【英文标题】:Error while using MediaQuery for size of height and width in flutter 【发布时间】:2020-04-05 13:14:20 【问题描述】:

我正在为我的颤振应用程序编写代码。因为我需要获取移动设备屏幕的大小,所以我使用了 Media Query,但发生错误说“MediaQuery was called without context”,但我正在传递上下文。 这是代码

class MainPage extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    double height = MediaQuery.of(context).size.height;
    double width = MediaQuery.of(context).size.width;

    return MaterialApp(
      title: 'Text',
      home: Scaffold(
        body: Container(
          height: height,
          width: width,
        ),
      ),
    );
  

我该如何解决这个错误。请帮忙。提前致谢。

【问题讨论】:

代码没有任何错误,只是为了保证我运行了代码并且运行良好。尝试在终端中运行 flutter clean! 你测试过 stateFullWidget 吗? 【参考方案1】:

您不能在 MaterialApp create Methode 中调用 MediaQuery.of(context),因为该应用对媒体一无所知。错误信息是

MediaQuery.of() call with a context that does not contain a MediaQuery

您可以在应用程序运行后使用此调用,但不能在启动顺序中使用。

也许您在 MaterialApp 下创建了一个额外的小部件。然后就可以了。

【讨论】:

【参考方案2】:

无论如何,它应该可以正常工作,从 cmd 或控制台运行 flutter clean,然后尝试运行应用程序。

如果不行就直接给出scaffold,MediaQuery.of(context).size.height,MediaQuery.of(context).size.width,的高度和宽度,并做如下修改:

    import 'package:flutter/material.dart';

void main() 
  runApp(MyApp());


class MyApp extends StatelessWidget 
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  


class MyHomePage extends StatefulWidget 
  MyHomePage(Key key) : super(key: key);
  @override
  _MyHomePageState createState() => _MyHomePageState();


class _MyHomePageState extends State<MyHomePage> 


  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(

        title: Text('text'),
      ),
      body: Container(
        color:Colors.red, //Only to se if the container is being displayed.
        height: MediaQuery.of(context).size.height,
        width: MediaQuery.of(context).size.width,
      ),
    );
  

这肯定行得通。 如果你还有什么困难,可以在 cmets 中提问。

【讨论】:

以上是关于在颤动中使用 MediaQuery 的高度和宽度大小时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中创建具有固定宽度和高度的颜色框?

如何在颤动中获取动态文本小部件的宽度?

Flutter - 使用 MediaQuery 时防止重建

Flutter MediaQuery获取屏幕信息以及屏幕适配

即使我使用了 MediaMediaQuery,容器高度也不完全占用 [关闭]

flutter 屏幕宽高 状态栏高度