Dart 错误:Can';t访问';这';在字段初始值设定项中读取';名字';

Dart 错误:Can';t访问';这';在字段初始值设定项中读取';名字';,dart,Dart,我正在建立一个小班,只是为了训练/学习Dart,我遇到了以下错误: Error: Can't access 'this' in a field initializer to read 'firstName'. String completeName = "${firstName} ${lastName}"; ^^^^^^^^^ lib/main.dart:13:41: Error: Can't access 'this' in

我正在建立一个小班,只是为了训练/学习Dart,我遇到了以下错误:

Error: Can't access 'this' in a field initializer to read 'firstName'.
String completeName = "${firstName} ${lastName}";
                         ^^^^^^^^^
lib/main.dart:13:41:
Error: Can't access 'this' in a field initializer to read 'lastName'.
 String completeName = "${firstName} ${lastName}";
                                       ^^^^^^^^
Error: Compilation failed.
这是我的密码:

void main()
{
  var user = new User();
  user.firstName = "John";
  user.lastName = "Smith";
  user.printName();
}
​
class User
{
  String firstName;
  String lastName;
  String completeName = "$firstName $lastName";
  
  void printName()
  {
    print(completeName);
  }
}
我的编程背景是C/C++和Python,我从来没有遇到过类似的问题。 有人能帮我理解为什么我会犯这个错误吗?提前谢谢! ​

使用吸气剂:

void main()
{
  var user = new User();
  user.firstName = 'john';
  user.lastName = 'smith';
  user.printName();
}

class User
{
  String firstName;
  String lastName;

  User();

  String get completeName => "$firstName $lastName";

  void printName()
  {
    print(completeName);
  }
}
或者你也可以这样做

void main()
{
  var user = new User("John", "Smith");
  user.printName();
}

class User
{
  String firstName;
  String lastName;
  String completeName;
  
  User(this.firstName, this.lastName) : completeName = "$firstName $lastName";
  
  void printName()
  {
    print(completeName);
  }
}

这回答了你的问题吗?而且,使用空安全性(Dart 2.12),您甚至可以执行
late final String completeName=“$firstName$lastName”
因为只有在第一次读取时才会计算该值,此时可以安全地引用
和其他成员。(我认为当
firstName
lastName
是可变的时,getter方法是最好的方法)。谢谢@lrn的提示