Dart Optional Parameters
Making function parameters flexible and user-friendly
🔧 What are Optional Parameters?
Optional parameters in Dart allow functions to be called with or without certain arguments. They provide default values and make functions more flexible and easier to use.
// Function with optional parameter
void greet(String name, [String greeting = 'Hello']) {
print('$greeting, $name!');
}
// Can be called both ways
greet('Alice'); // Uses default greeting
greet('Bob', 'Hi'); // Uses custom greeting
Output:
Hello, Alice!
Hi, Bob!
Types of Optional Parameters
Positional Optional
Parameters in square brackets []
void show(String msg, [int? count]) {
print('$msg ${count ?? 1} times');
}
Named Optional
Parameters in curly braces {}
void create({String? name, int age = 0}) {
print('Name: $name, Age: $age');
}
Default Values
Provide fallback values
void connect([String host = 'localhost']) {
print('Connecting to $host');
}
Nullable Optional
Parameters that can be null
void log(String msg, [String? level]) {
print('${level ?? 'INFO'}: $msg');
}
🔹 Positional Optional Parameters
Use square brackets [] to make parameters optional by position:
// Function with multiple optional parameters
void displayInfo(String name, [int? age, String? city]) {
print('Name: $name');
if (age != null) print('Age: $age');
if (city != null) print('City: $city');
}
void main() {
displayInfo('Alice'); // Only required parameter
displayInfo('Bob', 25); // With age
displayInfo('Charlie', 30, 'New York'); // All parameters
}
Output:
Name: Alice
Name: Bob
Age: 25
Name: Charlie
Age: 30
City: New York
🔹 Optional Parameters with Default Values
Provide default values for optional parameters:
// Function with default values
String formatMessage(String text, [String prefix = 'INFO', bool uppercase = false]) {
String result = '$prefix: $text';
return uppercase ? result.toUpperCase() : result;
}
void main() {
print(formatMessage('System started'));
print(formatMessage('Warning occurred', 'WARN'));
print(formatMessage('Error found', 'ERROR', true));
}
Output:
INFO: System started
WARN: Warning occurred
ERROR: ERROR FOUND
🔹 Practical Example
A real-world example using optional parameters:
// Calculator function with optional operation
double calculate(double a, double b, [String operation = 'add']) {
switch (operation) {
case 'add':
return a + b;
case 'subtract':
return a - b;
case 'multiply':
return a * b;
case 'divide':
return b != 0 ? a / b : 0;
default:
return 0;
}
}
void main() {
print('5 + 3 = ${calculate(5, 3)}'); // Default: add
print('5 - 3 = ${calculate(5, 3, 'subtract')}'); // Subtract
print('5 * 3 = ${calculate(5, 3, 'multiply')}'); // Multiply
print('5 / 3 = ${calculate(5, 3, 'divide')}'); // Divide
}
Output:
5 + 3 = 8.0
5 - 3 = 2.0
5 * 3 = 15.0
5 / 3 = 1.6666666666666667