找不到 MediaQuery 祖先?

STO*_*DER 3 dart flutter

我正在尝试构建一个页面大小三分之一的容器,但出现错误No MediaQuery ancestor could be found starting from the context that was passed to MediaQuery.of().,我完全不知道为什么。它在MaterialApp.

我的代码:

import 'package:flutter/material.dart';


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

class LoginPage extends StatelessWidget{

  @override
  Widget build(BuildContext context){
    return MaterialApp(
      home: Scaffold(
        body: Container(
          constraints: BoxConstraints.expand(),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.start,
            children: <Widget>[
              Container(
                color: Colors.red,
                width: double.infinity,
                height: MediaQuery.of(context).size.height/3,
              )
            ],
          )
        )
      )
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

sri*_*785 10

你只需要把MaterialApp作为祖先......正如错误所说......

像这样做..

void main() => runApp(MaterialApp(home:LoginPage()));
Run Code Online (Sandbox Code Playgroud)


voi*_*oid 5

你必须有一个MaterialApp小部件,因为你正在使用Material你的类import statement

检查下面的代码,它工作正常:

import 'package:flutter/material.dart';

// wrap your LoginPage widget with a MaterialApp widget
void main() => runApp(MaterialApp(home:LoginPage()));

class LoginPage extends StatelessWidget{

  @override
  Widget build(BuildContext context){
    return MaterialApp(
      home: Scaffold(
        body: Container(
          constraints: BoxConstraints.expand(),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.start,
            children: <Widget>[
              Container(
                color: Colors.red,
                width: double.infinity,
                height: MediaQuery.of(context).size.height/3,
              )
            ],
          )
        )
      )
    );
  }
}
Run Code Online (Sandbox Code Playgroud)