我试图通过变量使列表中的"text"
可变,但是我得到一个错误(这是错误的原因:只能在初始化程序中访问静态成员)。我试图理解一个类似的问题,也在stackoverflow.com(Error: Only static members can be accessed in initializers what does this mean?)上提出了这个问题,但我没有理解。谁能告诉我代码中的问题是什么?预先感谢!
var exercisetest = "Hallo";
var exercises = [
{"text": exercisetest, "time": 10},
{"text": exercisetest, "time": 14},
];
答案 0 :(得分:0)
这里您在练习中使用Exercisetest变量,因此您遇到此错误。
如果添加 static 关键字,则可以像现在一样使用或访问该变量。
喜欢以下内容:
static var exercisetest = "Hallo";
但是静态变量将成为类变量,这意味着无论您创建多少对象,但所有对象都将共享同一变量。
此外,您不能访问只能使用类名classname.exercisetest访问的变量object.exercisetest。
答案 1 :(得分:0)
我猜这个例子应该是这样的:
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
设置为final,因为必须在创建对象之前设置最终值。