是否可以设置构造函数的可选参数? 我的意思是:
User.fromData(this._name,
this._email,
this._token,
this._refreshToken,
this._createdAt,
this._expiresAt,
this._isValid,
{this.id});
它表示
命名选项参数不能以下划线开头。
但是我需要将此字段设置为私有字段,因此,我现在迷路了。
答案 0 :(得分:4)
除了出色的Suragch的answer外,我还想提到@require
注释。您可以将其用于多个构造函数或函数参数以指定必需的参数。
class User {
int _id;
String _firstName;
String _lastName;
User({@required int id, String firstName = "", String lastName})
: _id = id, // required parameter
_firstName = firstName, // optional parameter with default value ""
_lastName = lastName; // optional parameter without default value
}
User user1 = User(id: 1);
User user2 = User(id: 2, firstName: "John");
User user3 = User(id: 3, lastName: "Snow");
相关的Dart文档here。
答案 1 :(得分:2)
您需要使用一个简单的参数,并在初始化列表中初始化您的私有字段。
class User {
final String _id;
final String _name;
User.fromData(this._name, {String id})
: _id = id;
}
答案 2 :(得分:1)
对于将来的观看者来说,这是更笼统的答案。
用[ ]
方括号包裹可选参数。
class User {
String name;
int age;
String home;
User(this.name, this.age, [this.home = 'Earth']);
}
User user1 = User('Bob', 34);
User user2 = User('Bob', 34, 'Mars');
用{ }
大括号括住可选参数。
class User {
String name;
int age;
String home;
User(this.name, this.age, {this.home = 'Earth'});
}
User user1 = User('Bob', 34);
User user2 = User('Bob', 34, home: 'Mars');
如果需要私有字段,则可以使用[]
方括号:
class User {
int _id;
User([this._id]);
}
User user = User(3);
或按照公认的答案进行操作,并使用初始化列表:
class User {
int _id;
User({int id})
: _id = id;
}
User user = User(id: 3);