Элемент экземпляра ‘context’ не может быть доступен в инициализаторе. (implicit_this_reference_in_initializer в [rtoapp] libseriveSelection.dart:45)

#flutter

#flutter

Вопрос:

Привет, Fluttermates,

Я пытаюсь использовать mediaquery, чтобы получить размер экрана и сохранить его в переменной с именем size . Я делаю это на другом экране, это выдает мне эту ошибку

Элемент экземпляра ‘context’ не может быть доступен в инициализаторе. (implicit_this_reference_in_initializer в [appname] lib seriveSelection.dart:45)

 
import 'package:flutter/material.dart';


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

class _MyAppState extends State<home> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        elevation: 0,
        backgroundColor: Colors.white,
        centerTitle: true,
        automaticallyImplyLeading: false,
        title: Text(
          'Home',
          style: TextStyle(
            fontSize: 30,
            color: Colors.black,
            fontFamily: "Antipasto"
          ),
        ),
      ),


      body: myapp(),
    );

  }
}

class myapp extends StatefulWidget {

  @override
  _myappState createState() => _myappState();
}

class _myappState extends State<myapp> {
  var size = MediaQuery.of(context).size;
  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      child: Container(
        child: Column(
          children: [
            Container(
              width: 200,
              child: Card(
                child: Text(
                  'Welcome'
                ),
              ),
            )
          ],
        ),
      )
    );
  }
}

  

Ответ №1:

mediaquery выполняется, как только создается экземпляр состояния, что слишком рано для доступа к контексту, который еще не готов. переместите его внутрь build() метода.

 class _myappState extends State<myapp> {
  @override
  Widget build(BuildContext context) {
    var size = MediaQuery.of(context).size;
    return SingleChildScrollView(
  

Комментарии:

1. Спасибо за ответ, я понял это вчера.

2. @NOOB, конечно, ты можешь подтвердить ответ?

3. Спасибо, извините, я новичок в том, чтобы задавать вопросы, но готово