Flutter: предок виджета MediaQuery не найден

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), или это может произойти, если контекст, который вы использование происходит от виджета над этими виджетами.

Я не понимаю ошибку, я создал виджет MaterialApp и вызываю оттуда MediaQuery, почему появляется эта ошибка?

12
0
15 403
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Попробуйте создать еще один такой виджет

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

Тогда ваш основной метод будет выглядеть так

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

Я пробовал, но это ничего не изменило. Мой код теперь такой: pastebin.com/yBw6K8gc

Simon2215 21.12.2020 21:51

Извините, теперь все работает, это была моя ошибка. Ты мой герой, спасибо тебе большое! Я удалил виджет MaterialApp из калькулятора и заменил его эшафотом :)

Simon2215 21.12.2020 21:53

Я сделаю это, но мне нужно подождать еще три минуты...

Simon2215 21.12.2020 21:55

Просто сделайте это, как показано ниже. Я решил это таким образом

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

Оберните свое имя класса в MaterialApp, и ваша проблема будет решена. Бывший. здесь мое имя класса - сахим, и вот как я решил эту проблему.

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

Просто сделайте это, как показано ниже Это сработало для меня:

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

Если предыдущие ответы, в которых использовалась эта функция с аргументами, были неэффективными или имели другие недостатки, вы должны объяснить, почему ваш ответ лучше или более общий. В противном случае это, по сути, дубликат.

IRTFM 03.06.2022 04:11

Другие вопросы по теме