【问题标题】:How to initialize a field in a class in Dart? [duplicate]如何在 Dart 中初始化类中的字段? [复制]
【发布时间】:2021-05-21 19:02:33
【问题描述】:

我在一个类中有一个名为 images 的字段:

  final images = ["amusement1.jpeg", "amusement2.jpg", "amusement3.png", "amusement4.jpeg",
  "amusement5.jpeg", "amusement6.jpeg"];

我想设置另一个字段的默认值:

  var displayImage = images[0];

但这给出了错误:

lib/main.dart:46:22: Error: Can't access 'this' in a field initializer to read 'images'.
  var displayImage = images[0];                                         
                     ^^^^^^                                             
Performing hot restart...                                           40ms

如何在 Dart 中初始化一个字段的值?

【问题讨论】:

  • 您可能在声明 displayImage 之前声明了类似 List<...> images = ...; 的内容,并且您是在类字段级别(而不是在函数内)执行此操作。您不能这样做,因为images[0] 隐式转换为this.images[0],而this 在构造函数返回之前不存在。

标签: flutter dart


【解决方案1】:

如果你使用的是最新版本的 dart(2.12 或以上),你可以使用 late 关键字。

声明为:

late var displayImage = images[0];

或者,如果您使用的是 Stateful 小部件,那么您可以在 initState 方法中对其进行初始化。

String displayImage;

@override
void initState() {
   super.initState();
   displayImage = images[0];
}

【讨论】:

  • 这给出了:lib/main.dart:46:3:错误:此库禁用了空安全功能。尝试删除包语言版本或将语言版本设置为 2.12 或更高版本。后期 var displayImage = images[0]; ^^^^ 正在执行热重启... 52ms 修复上述错误后重试。
  • @lampbottle 您使用的是哪个版本的 sdk?
  • Flutter 2.0.6 • 通道稳定 • github.com/flutter/flutter.git 框架 • 修订版 1d9032c7e1(3 周前) • 2021-04-29 17:37:58 -0700 引擎 • 修订版 05e680e202 工具 • Dart 2.12。 3
  • @lampbottle 答案中提到,2.12引入了late关键字,所以可以在initState中初始化变量,如答案后面部分所示
  • @MidhunMP 你是对的,很抱歉造成混乱。我认为第二个代码块是空安全的。
猜你喜欢
  • 1970-01-01
  • 2021-10-05
  • 2011-03-16
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
相关资源
最近更新 更多