【问题标题】:Flutter: No MediaQuery widget ancestor foundFlutter:未找到 MediaQuery 小部件祖先
【发布时间】:2021-03-31 15:01:59
【问题描述】:
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 祖先 传递给 MediaQuery.of()。这可能发生,因为你有 未添加 WidgetsApp、CupertinoApp 或 MaterialApp 小部件(那些 小部件引入了 MediaQuery),或者如果您的上下文可能会发生这种情况 use 来自这些小部件上方的小部件。

我不明白这个错误,我创建了一个 MaterialApp Widget 并从那里调用 MediaQuery,为什么会出现这个错误?

【问题讨论】:

    标签: android flutter dart flutter-layout


    【解决方案1】:

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

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

    那么你的 main 方法会是这样的

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

    【讨论】:

    • 我试过了,但没有任何改变。我的代码现在是这样的:pastebin.com/yBw6K8gc
    • 对不起,现在可以了,这是我的错误。你是我的英雄,非常感谢!我从 Calculator 中删除了 MaterialApp 小部件,并将其替换为 Scaffold :)
    • 我会这样做,但我还要再等三分钟......
    • 帮助。非常感谢
    【解决方案2】:

    只需按照以下方式进行即可。我是这样解决的

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

    【讨论】:

      【解决方案3】:

      MaterialApp 包装你的类名,你的问题就解决了。前任。我的班级名称是 sahim,这就是我解决这个问题的方法。

       void main() {
        runApp(
          MaterialApp(
            home: sahim(),
          ),
        );
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-08
        • 2021-12-30
        • 1970-01-01
        • 2021-12-22
        • 2021-03-03
        • 2022-01-12
        • 1970-01-01
        • 2020-02-28
        相关资源
        最近更新 更多