Constructor Optional Params

This is a more general answer for future viewers.

Positional optional parameters

Wrap the optional parameter with [ ] square brackets.

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');

Optional parameters need to be nullable if you don’t provide a default value:

class User {

  String name;
  int age;
  String? home; //    <-- Nullable

  User(this.name, this.age, [this.home]);
}

Named optional parameters

Wrap the optional parameter with { } curly braces.

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');

The default for home is “Earth”, but like before, if you don’t provide a default then you need to change String home to String? home.

Private fields

If you need private fields then you can use [] square brackets:

class User {
  int? _id;
  User([this._id]);
}

User user = User(3);

or do as the accepted answer says and use an initializer list:

class User {
  int? _id;
  User({int? id}) 
    : _id = id;
}

User user = User(id: 3);

Named required parameters

Named parameters are optional by default, but if you want to make them required, then you can use the required keyword:

class User {
  final String name;
  final int age;
  final String home;

  User({
    required this.name,
    required this.age,
    this.home="Earth",
  });
}

User user1 = User(name: 'Bob', age: 34);
User user2 = User(name: 'Bob', age: 34, home: 'Mars');

Leave a Comment