dart - 错误 : The instance member . .. 无法在初始化程序中访问

标签 dart

为什么会有这段代码:

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.

在我看来 Stringint 之间的连接是正确的?

最佳答案

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 依赖于 jsonTextPrefjsonTextSuff 这将是合适的,永远不需要一个独立的值,如果 jsonText 在每次访问时都返回一个新对象是可以接受的。

关于dart - 错误 : The instance member . .. 无法在初始化程序中访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65601214/

相关文章:

flutter - 如何修复 Flutter 中的“"the getter ' length' was called on null”错误

Flutter 在更新时删除 Hive 数据库

dart - 将 dart 库转移到 pub.dartlang.org 中的另一个所有者

dart - 是否可以配置 `pub build` 使其不抑制提示和警告?

dart - 从其他项目导入 dart 代码

function - 外部OnTap/OnPressed传递数据(抖动)

file-upload - 如何在 Dart 中上传文件?

flutter - 应该只有一项具有 [DropdownButton] 的值

list - 从 API 获取值后从 Map<String, dynamic> 中检索值

flutter - 类型 'Future<dynamic>' 不是类型转换中类型 'List<dynamic>' 的子类型