MediaQuery.of(context) не работает

НЕ РАБОТАЕТ, ОШИБКА

width: MediaQuery.of(context).size.width / 2, height: MediaQuery.of(context).size.height / 2,

НЕ РАБОТАЕТ, МОЖНО ТОЛЬКО ВЫВЕСТИ НА ЭКРАН ЗНАЧЕНИЯ

width: window.physicalSize.width / 2, height: window.physicalSize.height / 2,

main.dart

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

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

class MyApp extends StatefulWidget {
 @override
 _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
 //объявление переменных

 //вызывается один раз при инициализации виджета
 @override
 void initState() {
  super.initState();

 }

 void _f1(double value) {
  setState(() {

  });
 }

 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: Stack(
     children: <Widget>[
      Align(
       alignment: Alignment.center,
       child: Container(

        //НЕ РАБОТАЕТ, ОШИБКА
        //width: MediaQuery.of(context).size.width / 2,
        //height: MediaQuery.of(context).size.height / 2,

        //НЕ РАБОТАЕТ, МОЖНО ТОЛЬКО ВЫВЕСТИ НА ЭКРАН ЗНАЧЕНИЯ
        width: window.physicalSize.width / 2,
        height: window.physicalSize.height / 2,

        color: Colors.pink,
       ),
      ),
     ],
    ),
   ),
  );
 }
}

Если кто-то сталкивался с такой ошибкой, подскажите. Спасибо.введите сюда описание изображения


Ответы (1 шт):

Автор решения: MiT

Ну так конечно не правильно работает, если у вас виджет не правильно построен (window.physicalSize используется только для того чтобы узнать физически размеры экрана, его не следует использовать как вы хотите):

import 'package:flutter/material.dart';

void main() async {
  runApp(App());
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Name App',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Name Page'),
        ),
        body: MyApp(),
      ),
    );
  }
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return Stack(
      children: <Widget>[
        Align(
          alignment: Alignment.center,
          child: Container(
            width: MediaQuery.of(context).size.width / 2,
            height: MediaQuery.of(context).size.height / 2,
            color: Colors.pink,
          ),
        ),
      ],
    );
  }
}
→ Ссылка