Question #312EasyDart Basics

Differentiate between named parameters and positional parameters in Flutter

#dart#parameters#functions

Answer

Overview

Dart supports two ways to pass arguments to functions: positional parameters (order-based) and named parameters (name-based). Both can be required or optional.


Positional Parameters

Arguments are matched by their position/order.

dart
// Required positional
String greet(String firstName, String lastName) {
  return 'Hello, $firstName $lastName!';
}

// Must pass in order
greet('Alice', 'Smith');   // 'Hello, Alice Smith!'
// greet('Smith', 'Alice'); // Also works but semantically wrong

// Optional positional -- use []
String greet2(String name, [String greeting = 'Hello']) {
  return '$greeting, $name!';
}

greet2('Alice');            // 'Hello, Alice!'
greet2('Alice', 'Hi');     // 'Hi, Alice!'

Named Parameters

Arguments are matched by their name -- order doesn't matter.

dart
// Named parameters -- use {}
void createUser({required String name, required String email, int age = 0}) {
  print('User: $name ($email), Age: $age');
}

// Call with names -- order doesn't matter
createUser(name: 'Alice', email: 'alice@example.com');
createUser(email: 'bob@example.com', name: 'Bob', age: 28); // Different order -- fine!
createUser(name: 'Carol', email: 'c@c.com'); // age uses default (0)

Named Parameters in Widgets (Flutter)

Flutter widgets almost always use named parameters:

dart
// All Flutter widgets use named parameters
Text(
  'Hello World',          // positional (the text string)
  style: TextStyle(fontSize: 18),  // named
  textAlign: TextAlign.center,     // named
  maxLines: 2,                     // named
);

Container(
  width: 200,             // named
  height: 100,            // named
  color: Colors.blue,     // named
  child: Text('Inside'),  // named
);

ElevatedButton(
  onPressed: () => print('clicked'), // named -- required
  child: Text('Click me'),           // named -- required
);

Key Differences

FeaturePositionalNamed
SyntaxNo label
text
name: value
OrderRequired (position matters)Any order
Optional
text
[param]
text
{param}
RequiredDefault
text
{required param}
ReadabilityLess (for many params)Better (self-documenting)
Flutter usageRare (first arg)Almost always

Mixed Example

dart
// First arg positional, rest named
void log(String message, {String level = 'INFO', bool timestamp = true}) {
  final time = timestamp ? DateTime.now().toString() : '';
  print('[$level] $time $message');
}

log('Server started');                    // positional + defaults
log('Error!', level: 'ERROR');           // positional + named
log('Debug', level: 'DEBUG', timestamp: false);

Flutter Best Practice: Use named parameters for functions with 2+ parameters -- they make call sites self-documenting and prevent ordering mistakes.