In Dart and Flutter programming, developers often come across the symbol _ (underscore) used in various contexts. One specific usage that generates curiosity is the practice of passing an underscore _ when calling functions, especially in callbacks or parameterized functions. This article dives deep into what passing underscore (_) means in Dart/Flutter, why it is used, and how it improves code readability and function implementation.
What Does Passing Underscore (_) Mean in Dart/Flutter?
In Dart, the underscore _ is conventionally used as a variable name to indicate an unused parameter. When _ is passed to or used inside a function, it generally signifies that the particular argument is present but intentionally ignored and not used further in the function body.
Effectively, it acts as a placeholder for a parameter whose value is irrelevant to the function’s logic. This helps to:
- Keep the code clean and signal to other developers that the parameter is unused.
- Prevent compiler warnings about unused parameters.
- Make callback or anonymous functions concise when some parameters are not needed.
Typical Scenarios of Passing Underscore in Dart/Flutter
Most commonly, you will see _ used:
- In function parameters for callbacks where certain arguments are required by signature but not needed in the implementation.
- Within asynchronous code where argument values won’t affect the function operation.
- In Flutter widget builders, event handlers, or stream listeners where the parameter is mandatory but unused.
Simple Example: Ignoring Parameters in a Callback
Suppose a function expects a callback with one argument, but you don’t need the argument:
void invokeCallback(void Function(int) callback) {
callback(42);
}
// Using underscore to ignore argument
invokeCallback((_) {
print("Argument ignored, just running code");
});
Output:
Argument ignored, just running code
Here, _ represents a parameter that the callback receives, but it is deliberately ignored as it’s unnecessary for this example.
Example in Flutter: Ignoring Unused Parameters in Builders
Consider a Flutter Builder widget or callback where context is passed but not used:
Builder(
builder: (_) {
return Text("Hello, Flutter!");
},
);
This illustrates a builder function with a single parameter (usually BuildContext). Naming it _ explicitly conveys that the context is not used in this builder.
Why Use Underscore (_) Instead of Other Variable Names?
Using underscore differs from other variable names because it instantly signals an unused parameter, versus naming it unused or ignored. This is a Dart and Flutter community convention that:
- Helps maintain concise and understandable code.
- Prevents linter warnings about unused variable declarations.
- Facilitates cleaner anonymous functions or lambda expressions.
Multiple Unused Parameters: How to Use Underscores
When functions take multiple parameters that are unused, you can name each one _. However, since Dart does not allow multiple parameters with the same name, you denote them as _, _1, _2, etc.
void multiParamFunc(void Function(int, String) callback) {
callback(10, "hello");
}
// Ignoring both params using _ and _1
multiParamFunc((_, _1) {
print("Both parameters ignored");
});
This way, each unused parameter is acknowledged but ignored safely.
Example: Using Underscore in Async and Stream Callbacks
For example, when subscribing to a stream event where event data is not needed:
Stream numberStream = Stream.fromIterable([1, 2, 3]);
numberStream.listen((_) {
print("Event received, but data ignored");
});
Output:
Event received, but data ignored
Event received, but data ignored
Event received, but data ignored
Visual Summary: Flow of Passing Underscore
Summary of Key Points
- Passing underscore (_) is a Dart convention meaning unused function parameter.
- It prevents warnings and clarifies intent to ignore certain parameters while keeping required signatures.
- Applicable in callbacks, builders, streams, and any function parameters.
- Multiple unused params use
_,_1,_2, etc. - Improves code readability and maintenance in Dart and Flutter projects.
Understanding the meaning and proper use of passing underscore (_) when calling functions helps write idiomatic, clean, and effective Dart/Flutter programs. By embracing this convention, developers signal intent clearly and keep code warnings-free without sacrificing function signatures or behavior.








