Я предполагаю, что пример должен был выглядеть следующим образом:
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
окончательным, поскольку окончательные значения должны быть установлены до создания объекта.