Constructors

Default constructor

class User {
  User() {}
}

// call it by
var user = User()

Parameterised constructor

class User {
  User(int this.id, String this.name);
	
  int id = 0;
  String name = '';
}

// called by
var user = User(21, 'ben');

Named Constructor

class User {
	User.customConstructor(this.id, this.name);

	// multiple named constuctors are allowed
}

// called by
var user = User.customConstructor(21, 'ben');

Constant Constructor

// unknown

From the book

Constructor

class User {
  User(int id, String name) {
    this.id = id;
    this.name = name;
  }

  int id = 0;
  String name = '';

  // ...
}

// or
class User {
  User(this.id, this.name);

  int id = 0;
  String name = '';

  // ...
}

// or
class User {
	User({int id = 0, String name = 'anonymous'})
	    : _id = id,
	      _name = name {
	  print('User name is $_name');
	}
}

Unnamed constructors

used for special cases where you need it to do something different

// unnamed constructor
ClassName()

// named constructor
ClassName.identifierName()
class User {
  User(this.id, this.name);

	// named constructor
	User.anonymous() {
	  id = 0;
	  name = 'anonymous';
	}

  int id = 0;
  String name = '';

  // ...
}

Short-hand

class User {
  User(this.id, this.name);

	// named constructor
	User.anonymous() : this(0, 'anonymous');

  int id = 0;
  String name = '';

  // ...
}

Factory Constructors

factory User.ray() {
  return User(id: 42, name: 'Ray');
}