dart 可选参数的默认值在构造函数中必须是常量

x7yiwoj4  于 2023-03-27  发布在  其他
关注(0)|答案(2)|浏览(209)

我有一个类似这样的简单类:

class Staff {
  final String name;
  final String id;

  Staff({this.name, this.id});
}

然后在tutorial article on applying BLoC之后,我把它放在State class中,如下所示:

class SignInState {
  final String href;
  final Staff staff;

  SignInState({this.href = '', this.staff= Staff(name:'', id:'')});
}

但是在this.staff= Staff(name: '', id: '')中,我总是得到错误:

The default value of an optional parameter must be constant.

final Staff staff = Staff(name: '', id: '')工作。
为什么它在那一行不起作用,而是产生一个错误?

im9ewurl

im9ewurl1#

在您的示例中,staff参数的默认值不是compile-time constant,因为它涉及使用非常量的构造函数参数(name和id)示例化新的Staff对象。
您可以使用具有默认值的非可选构造函数参数:

class Staff {
  Staff({this.name = '', this.id = ''});

  final String name;
  final String id;
}

class SignInState {
  SignInState({this.href = '', Staff? staff}) : this.staff = staff ?? Staff();

  final String href;
  final Staff staff;
}
u5rb5r59

u5rb5r592#

我认为你可以为Staff创建一个常量构造函数

class Staff {
  final String name;
  final String id;

  const Staff({this.name, this.id});
}

然后可以对SignInState使用const

class SignInState {
  final String href;
  final Staff staff;

  const SignInState({this.href = '', this.staff = const Staff(name: '', id: '')});
}

相关问题