当前位置: 首页 > 知识库问答 >
问题:

颤振错误:MediaQuery。使用不包含MediaQuery的上下文调用of()

经和歌
2023-03-14

我一直试图在Flutter中获得整个上下文视图的大小。但每次我尝试,我都会得到上面提到的错误。这是我的密码:

import 'package:flutter/material.dart';

void main => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    final size = MediaQuery.of(context).size;
    return new MaterialApp(
      home: new Scaffold(),
    );
  }
}

注意:我还尝试了一个StatefulWidget。请帮我找出我做错了什么。

共有3个答案

鲜于海
2023-03-14

我用下面的方法修复了它。首先,我创建了一个名为MyWidget的新类,并在MaterialApphome:中返回它。请参阅下面的代码:

import 'package:flutter/material.dart';

void main => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    return new MaterialApp(
      home: new MyWidget(),
    );
  }
} 

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    final size = MediaQuery.of(context).size;
    return new MaterialApp(
      home: new Scaffold(),
    );
  }
} 

此外,将大小声明为最终大小也无关紧要。处理方向/旋转。

潘刚洁
2023-03-14

当您在MaterialApp内时,可以访问MediaQuery。访问媒体查询的位置不正确。

请参阅以下代码

import 'package:flutter/material.dart';

class CommonThings {
  static Size size;
}

void main() => runApp(new MyApp());

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    CommonThings.size = MediaQuery.of(context).size;
    print('Width of the screen: ${CommonThings.size.width}');
    return new Container();
  }
}

我特意创建了一个具有静态大小的类CommonThings,这样你就可以在整个应用程序中使用它。

季稳
2023-03-14

小部件周围需要一个MaterialAppWidgetsApp。它们提供了MediaQuery。当您调用时。of(context)flatter将始终查找小部件树以查找小部件。

你通常把这个放在主菜里。投掷:

void main() => runApp(App());

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Title',
      theme: kThemeData,
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final size = MediaQuery.of(context).size;

    return Container(
      child: ...,
    );
  }
}
 类似资料: