在颤动中使用 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获取屏幕信息以及屏幕适配