Dart also provides the support of constructors. Constructors are a special method that is used to initialize fields when an object is created in the program. In object-oriented programming, when an object is created, it automatically calls the constructor. All classes have their default constructor, which is created by the compiler when the class is called, moreover, one can also define a constructor of its own. But you must note that if you do so, then the default constructor will not be created and will be ignored.
Constructors in Dart
The constructors have the same name as the class name and don't have any return type.
class_name( [ parameters ] ){
// Constructor Body
}In the above syntax:
- class_name is the name of the class whose constructor is being created.
- parameters are optional features and they can and can't be defined for the constructor. The default constructor has no parameter defined in it.
- Constructor body is the body of the constructor and is executed when the constructor is called i.e when an object is created.
- Constructors don't have any return type.
Creating a constructor in Dart
Example 1:
Dart
// Dart Program to create a constructor
// Creating Class named Gfg
class Gfg {
// Creating Constructor
Gfg() {
// Whenever constructor is called
// this statement will run
print('Constructor is being created');
}
// Creating Field inside the class
String geek1 = '';
// Creating Function inside class
void geek() {
print("Welcome to $geek1");
}
}
void main() {
// Creating Instance of class
Gfg geek = new Gfg();
// Calling field name geek1
// and assigning value to it
// using object of the class Gfg
geek.geek1 = 'GeeksforGeeks';
// Calling function name
// geek using object
// of the class Gfg
geek.geek();
}
Output:
Constructor is being created
Welcome to GeeksforGeeks
There are three types of constructors in Dart
1. Default Constructor
The default constructors are those constructors that don't have any parameters in it. Thus, if a constructor which don't have any parameter then it will be a type of default constructor.
Creating a default constructor in Dart
Example:
Dart
// Dart program to illustrate
// the Default constructor
// Creating Class named Gfg
class Gfg{
// Creating Constructor
Gfg() {
print('This is the default constructor');
}
}
void main() {
// Creating Instance of class
Gfg geek = new Gfg();
}
Output:
This is the default constructor
2. Parameterized Constructor
In Dart, you can also create a constructor having some parameters. These parameters will decide which constructor will be called and which will that. Those constructors that accept parameters constructors known as parameterized constructors.
Creating a parameterized constructor in Dart
Example :
Dart
// Creating parameterized constructor in Dart
// Creating Class named Gfg
class Gfg {
// Creating Parameterized Constructor
Gfg(int a) {
print('This is the parameterized constructor');
}
}
void main() {
// Creating Instance of class
Gfg geek = new Gfg(1);
}
Output:
This is the parameterized constructor
Note: You can't have two constructors with the same name although they have different parameters. The compiler will display an error.
3. Named Constructor
As you can't define multiple constructors with the same name, this type of constructor is the solution to the problem. They allow the user to make multiple constructors with a different name.
Declaring named constructors
class_name.constructor_name ( parameters ){
// Body of Constructor
}
Creating a Named Constructor in Dart
Example :
Dart
// Defining a class named Gfg
class Gfg {
// Default constructor
Gfg() {
print("This is the default constructor");
}
// Named constructor with one parameter
Gfg.constructor1(int a) {
print('This is the parameterized constructor with only one parameter');
}
// Named constructor with two parameters
Gfg.constructor2(int a, int b) {
print('This is the parameterized constructor with two parameters');
print('Value of a + b is ${a + b}');
}
}
void main() {
// Creating an instance of the class using the default constructor
Gfg geek1 = Gfg();
// Creating an instance using the named constructor with one parameter
Gfg geek2 = Gfg.constructor1(1);
// Creating an instance using the named constructor with two parameters
Gfg geek3 = Gfg.constructor2(2, 3);
}
Output:
This is the parameterized constructor with only one parameter
This is the parameterized constructor with two parameters
Value of a + b is 5
Creating multiple constructors with the same name
Example :
Dart
// Creating multiple constructor in Dart
// Creating Class named Gfg
class Gfg{
// Creating default constructor
Gfg() {
print('Default Constructor');
}
// Creating parameterized Constructor
Gfg(int a) {
print('Parameterized Constructor");
}
}
void main() {
// Creating Instance of class
Gfg geek1 = new Gfg.constructor1();
Gfg geek2 = new Gfg.constructor2(2);
}
Output:
compileDDC
main.dart:13:11: Error: String starting with ' must end with '.
print('Parameterized Constructor");
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
main.dart:13:10: Error: Can't find ')' to match '('.
print('Parameterized Constructor");
^
main.dart:12:3: Error: 'Gfg' is already declared in this scope.
Gfg(inta) {
^^^
main.dart:7:3: Context: Previous declaration of 'Gfg'.
Gfg() {
^^^
main.dart:13:11: Error: Expected ';' after this.
print('Parameterized Constructor");
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
main.dart:19:19: Error: Can't use 'Gfg' because it is declared more than once.
Gfg geek1 = new Gfg();
^
main.dart:20:19: Error: Can't use 'Gfg' because it is declared more than once.
Gfg geek2 = new Gfg(2);
^
This is the reason where named constructor concept was born.
Conclusion
Dart provides constructors for initializing object properties when an instance is created. Every class includes a default constructor unless a custom one is defined. Dart offers three types of constructors:
- Default Constructor: This constructor takes no parameters and is automatically invoked when an object is created.
- Parameterized Constructor: This type accepts arguments, allowing for custom initialization of object properties.
- a This allows a class to have multiple constructors, which helps avoid name conflicts. Named constructors enhance flexibility, making object creation more efficient and organized.
Explore
Dart Tutorial
7 min read
Basics
Data Types
Control Flow
Key Functions
Object-Oriented Programming
Dart Utilities
Dart Programs
Advance Concepts