Только члены stati c могут быть доступны в инициализаторах, ошибка - PullRequest
0 голосов
/ 02 мая 2020

Я попытался сделать "text" в списке изменяемым с помощью переменной, но я получаю ошибку (это описание ошибки: в инициализаторах могут быть доступны только элементы c). Я пытался понять схожий вопрос, который также задавался на stackoverflow.com ( Ошибка: только члены stati c могут быть доступны в инициализаторах, что это значит? ), но я не получил его , Может кто-нибудь сказать мне, в чем проблема в моем коде? Заранее спасибо!

var exercisetest = "Hallo";

  var exercises = [
    {"text": exercisetest, "time": 10},
    {"text": exercisetest, "time": 14},
  ];

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Я предполагаю, что пример должен был выглядеть следующим образом:

class A {
  String exercisetest = "Hallo";

  List<Map<String, dynamic>> exercises = [
    <String, dynamic>{"text": exercisetest, "time": 10},
    <String, dynamic>{"text": exercisetest, "time": 14},
  ];
}

Причина, по которой это не работает, состоит в том, что классы в Dart инициализируются не в порядке объявления переменных, а скорее во всех полях одновременно, когда говорить о классах.

Таким образом, ошибка означает, что поле exercisetest не имеет никакого значения или еще не существует, и поэтому вы не можете ссылаться на него, пока объект не будет создан.

Эту двухэтапную часть создания объекта можно увидеть, когда мы определяем конструктор:

class A {
  String exercisetest;
  List<Map<String, dynamic>> exercises;

  A() : exercisetest = "Hallo" {
    exercises = [
      <String, dynamic>{"text": exercisetest, "time": 10},
      <String, dynamic>{"text": exercisetest, "time": 14},
    ];
  }
}

В этом примере мы определяем exercisetest до того, как объект будет создан для создания (как и ваш код). Но если мы напишем что-то внутри { }, объект здесь был создан, и мы можем получить к нему доступ, например, exercisetest и использовать его для определения exercises.

Но поскольку объект создается, когда мы устанавливаем exercises мы не можем сделать exercises окончательным, поскольку окончательные значения должны быть установлены до создания объекта.

0 голосов
/ 02 мая 2020

Здесь вы используете в упражнении переменнуюtesttest, и из-за этого вы получаете эту ошибку.

Если вы добавите ключевое слово stati c, вы можете использовать или получить доступ к этой переменной как вы делаете сейчас.

Примерно так:

static var exercisetest = "Hallo";

Но переменная stati c станет переменной класса, это означает, что независимо от того, какое количество объектов вы создадите, но все объекты будут иметь одну и ту же переменную ,

Более того, вы не можете получить доступ к той переменной object.exercisetest, к которой вы можете обращаться, используя только имя класса classname.exercisetest.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...