错误:实例成员...无法在初始化程序中访问

Cas*_*gio 10 dart

为什么这段代码:

class _SequentialTextPageState {
  String jsonTextPref = 'seqtext';
  int jsonTextSuff = 10;
  String jsonText = jsonTextPref + jsonTextSuff.toString();
}
Run Code Online (Sandbox Code Playgroud)

产生这些错误?

Error: The instance member 'jsonTextPref' can't be accessed in an initializer.

Error: The instance member 'jsonTextSuff' can't be accessed in an initializer.
Run Code Online (Sandbox Code Playgroud)

在我看来,String和之间的串联int是正确的吗?

jam*_*lin 10

Dart 在多个阶段初始化对象。直接初始化成员(“字段初始化程序”)发生在对象初始化的早期,在this变得有效之前,因此该阶段无法初始化依赖于对象其他部分的成员。

Dart 提供了多种初始化成员的方法,因此如果一个成员需要依赖于另一个成员,您可以在稍后阶段使用不同的机制来初始化它。例如,您可以执行以下操作之一:

  • 添加late关键字使依赖成员延迟初始化。
  • 将依赖成员的初始化移至构造函数主体中。
  • 对于 Flutter 子State类型,您可以在其方法中初始化依赖成员initState,这在某些情况下更合适

请注意,在某些情况下,您还可以考虑用只读getter替换成员变量。例如,在您的情况下,也许您可​​以使用:

String get jsonText => jsonTextPref + jsonTextSuff.toString();
Run Code Online (Sandbox Code Playgroud)

如果应该jsonText始终依赖jsonTextPrefjsonTextSuff,永远不需要有独立的值,并且jsonText每次访问时都返回一个新对象是可以接受的,那么这将是合适的。


Ant*_*sss 1

您只能使用常量表达式作为初始值设定项。x=this.y不是恒定的。