Flutter:找不到MediaQuery小部件的祖先

12
import 'package:flutter/material.dart';

void main() {
  runApp(Calculator());
}

class Calculator extends StatelessWidget {
  final numpad_background_color = Color(0x212121);
  final background_color = Colors.black;
  final equal_button_background_color = Color(0xffbe00);

  final textColor = Colors.white;
  final operatorTextColor = Color(0xf3ba0e);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            appBar: appbar(context),
            body: Stack(
              children: [Container(height: MediaQuery.of(context).size.height * 0.37), numpad(context)],
            )));
  }

  Widget appbar(BuildContext context) {
    return AppBar(title: Text("Rechner", style: TextStyle(color: textColor, fontSize: 15)), backgroundColor: background_color, leading: Icon(Icons.history));
  }

  Widget numpad(BuildContext context) {
    return Container(decoration: BoxDecoration(borderRadius: BorderRadius.circular(5), color: numpad_background_color), child:
      Column(children: [

      ],),);
  }
}

错误:从传递给MediaQuery.of()的上下文开始,找不到任何MediaQuery祖先。这可能是因为您尚未添加WidgetsApp、CupertinoApp或MaterialApp小部件(这些小部件引入了MediaQuery),也可能是如果您使用的上下文来自那些小部件之上的小部件,则可能会发生此情况。

我不理解这个错误,我创建了一个MaterialApp小部件并从那里调用MediaQuery,为什么会出现这个错误?

4个回答

15

尝试创建另一个类似这样的小部件

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Calculator(),
    );
  }
}

那么你的主方法会像这样

void main() {
  runApp(MyApp());
}

我尝试了,但什么也没改变。我的代码现在是这样的:https://pastebin.com/yBw6K8gc - Simon2215
抱歉,现在它可以工作了,那是我的错。你是我的英雄,非常感谢!我已经从计算器中移除了MaterialApp Widget,并将其替换为Scaffold :) - Simon2215
我会做的,但我还要等三分钟... - Simon2215

4
将你的类名放在MaterialApp之内,问题就解决了。例如,这里我的类名是sahim,这就是我解决这个问题的方法。
 void main() {
  runApp(
    MaterialApp(
      home: sahim(),
    ),
  );
}

3

按照如下方式操作。我已经用这种方法解决了问题。

void main() {
  runApp(MaterialApp(home: Calculator()));
}

0

按照以下步骤进行 这对我起了作用:

    void main() {
     runApp(MaterialApp(),);
   }

1
如果之前使用该函数的答案效率低下或存在其他缺陷,那么您应该解释为什么您的答案更好或更通用。否则,它看起来基本上是重复的。 - IRTFM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接