为什么会有这段代码:
class _SequentialTextPageState {
String jsonTextPref = 'seqtext';
int jsonTextSuff = 10;
String jsonText = jsonTextPref + jsonTextSuff.toString();
}
产生这些错误?
Error: The instance member 'jsonTextPref' can't be accessed in an initializer.
Error: The instance member 'jsonTextSuff' can't be accessed in an initializer.
在我看来 String
和 int
之间的连接是正确的?
最佳答案
Dart initializes objects in multiple phases .直接初始化成员(“字段初始化器”)发生在对象初始化的早期,在 this
变为有效之前,因此该阶段无法初始化依赖于对象其他部分的成员。
Dart 提供 multiple ways to initialize members ,因此如果一个成员需要依赖另一个成员,您可以在稍后阶段使用不同的机制对其进行初始化。例如,您可以执行以下操作之一:
- 添加
late
关键字,使依赖成员延迟初始化。 - 将依赖成员的初始化移动到构造函数主体中。
- 对于 Flutter
State
子类型,您可以在其initState
方法中初始化依赖成员,in some cases is more appropriate .
请注意,在某些情况下,您还可以考虑将成员 variable 替换为只读 getter。例如,在您的情况下,也许您可以使用:
String get jsonText => jsonTextPref + jsonTextSuff.toString();
如果 jsonText
应该 always 依赖于 jsonTextPref
和 jsonTextSuff
这将是合适的,永远不需要一个独立的值,如果 jsonText
在每次访问时都返回一个新对象是可以接受的。
关于dart - 错误 : The instance member . .. 无法在初始化程序中访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65601214/