Popular Searches
Popular Course Categories
Popular Courses

Functions, parameters, return values, and arrow functions

Functions, parameters, return values, and arrow functions

Dart Basics

Functions, Parameters, Return Values, and Arrow Functions in Dart

Functions are one of the most important concepts in Dart programming and are used extensively when developing Flutter applications. A function allows you to organize code into reusable blocks that perform a specific task. Dart supports normal functions, functions with parameters, functions that return values, anonymous functions, callbacks, and concise arrow functions.

In the JustAcademy Flutter Training curriculum, Functions & Parameters are included in the Dart Programming Fundamentals module. The course focuses on building practical Flutter and Dart development skills. Learn more about JustAcademy Flutter Training . :contentReference[oaicite:0]{index=0}


1. What Is a Function?

A function is a reusable block of code designed to perform a particular task. Instead of writing the same code repeatedly, you can place it inside a function and call that function whenever required.

Basic Syntax

returnType functionName() {
  // code to execute
}

Example

void sayHello() {
  print("Hello, Dart!");
}

To execute the function, call it by its name:

void main() {
  sayHello();
}

Output:

Hello, Dart!

2. Why Do We Use Functions?

Functions provide several important advantages:

  • Code reusability
  • Better code organization
  • Reduced code duplication
  • Easier debugging
  • Improved readability
  • Easy testing of individual operations
  • Better separation of responsibilities
  • Useful for building reusable Flutter application logic

Without a Function

void main() {
  print("Welcome");
  print("Welcome");
  print("Welcome");
}

With a Function

void welcome() {
  print("Welcome");
}

void main() {
  welcome();
  welcome();
  welcome();
}

The second approach is easier to maintain because the message is defined in one place.


3. Function Declaration and Calling

A function generally has the following parts:

  1. Return type
  2. Function name
  3. Parameters, if required
  4. Function body
String getMessage() {
  return "Welcome to Dart";
}

Calling the function:

void main() {
  String message = getMessage();
  print(message);
}

4. Functions Without Parameters

A function does not always need input values. A function without parameters performs an operation using values already available inside the function.

void showMessage() {
  print("Learning Flutter");
}

void main() {
  showMessage();
}

Output:

Learning Flutter

5. What Are Parameters?

A parameter is a variable defined in a function declaration that allows the function to receive data from the caller.

void greet(String name) {
  print("Hello $name");
}

Here, name is a parameter.

When calling the function:

void main() {
  greet("Rahul");
}

Output:

Hello Rahul

Parameter vs Argument

Term Meaning Example
Parameter Variable defined in the function declaration String name
Argument Actual value passed when calling the function "Rahul"

6. Multiple Parameters

A function can accept multiple parameters.

void studentInfo(String name, int age) {
  print("Name: $name");
  print("Age: $age");
}

void main() {
  studentInfo("Aman", 21);
}

Output:

Name: Aman
Age: 21

Another Example

int add(int a, int b) {
  return a + b;
}

void main() {
  int result = add(10, 20);
  print(result);
}

Output:

30

7. Positional Parameters

In positional parameters, values are passed according to their position. The first argument goes to the first parameter, the second argument goes to the second parameter, and so on.

void employee(String name, int age, String department) {
  print(name);
  print(age);
  print(department);
}

void main() {
  employee("Neha", 25, "Development");
}

The order of the arguments is important.


8. Optional Positional Parameters

Dart allows optional positional parameters using square brackets [].

void greet(String name, [String? message]) {
  print("Name: $name");
  print("Message: $message");
}

void main() {
  greet("Amit");
  greet("Amit", "Welcome");
}

The second parameter can be omitted when calling the function.


9. Default Values for Parameters

You can provide a default value for an optional parameter.

void greet(String name, [String message = "Welcome"]) {
  print("$message $name");
}

void main() {
  greet("Rahul");
  greet("Aman", "Hello");
}

Output:

Welcome Rahul
Hello Aman

10. Named Parameters

Named parameters allow you to pass arguments using parameter names. They improve readability, especially when a function accepts several values.

void userInfo({
  required String name,
  required int age,
}) {
  print("Name: $name");
  print("Age: $age");
}

void main() {
  userInfo(
    name: "Priya",
    age: 22,
  );
}

The names make the function call easier to understand.


11. Required Named Parameters

The required keyword means that the caller must provide the named argument.

void product({
  required String name,
  required double price,
}) {
  print("Product: $name");
  print("Price: $price");
}

void main() {
  product(
    name: "Laptop",
    price: 55000,
  );
}

12. Optional Named Parameters

Named parameters do not have to be required. They can be optional.

void profile({
  String? name,
  int? age,
}) {
  print("Name: $name");
  print("Age: $age");
}

void main() {
  profile(name: "Ravi");
}

13. Return Values

A function can return a value to the code that called it. The return statement is used to send a result back.

Example: Returning an Integer

int add(int a, int b) {
  return a + b;
}

void main() {
  int result = add(10, 20);
  print(result);
}

Output:

30

Example: Returning a String

String getName() {
  return "Rahul";
}

void main() {
  String name = getName();
  print(name);
}

Example: Returning Boolean

bool isAdult(int age) {
  return age >= 18;
}

void main() {
  print(isAdult(21));
}

Output:

true

14. The void Return Type

When a function performs an operation but does not return a value, Dart commonly uses the void return type.

void displayMessage() {
  print("Hello Flutter");
}

This function performs an action but does not return a result.


15. Returning Different Data Types

A function can return different data types depending on its purpose.

int getAge() {
  return 25;
}

double getPrice() {
  return 499.99;
}

String getUserName() {
  return "Aman";
}

bool isLoggedIn() {
  return true;
}

16. Conditional Return Values

A function can return different values depending on a condition.

String checkAge(int age) {
  if (age >= 18) {
    return "Adult";
  } else {
    return "Minor";
  }
}

void main() {
  print(checkAge(20));
}

Output:

Adult

17. Early Return

An early return allows a function to stop execution as soon as a particular condition is satisfied.

String checkUser(String? name) {
  if (name == null || name.isEmpty) {
    return "Invalid user";
  }

  return "Welcome $name";
}

Early returns can make complex functions easier to read.


18. Functions Returning Lists

A function can return a collection such as a List.

List getCourses() {
  return ["Flutter", "Dart", "Firebase"];
}

void main() {
  List courses = getCourses();

  for (String course in courses) {
    print(course);
  }
}

Output:

Flutter
Dart
Firebase

19. Functions as Variables

In Dart, functions are first-class objects. This means a function can be assigned to a variable.

int add(int a, int b) {
  return a + b;
}

void main() {
  var operation = add;

  print(operation(10, 20));
}

Output:

30

20. Passing Functions as Parameters

A function can receive another function as a parameter. This concept is especially important for callbacks in Flutter.

void calculate(
  int a,
  int b,
  int Function(int, int) operation,
) {
  print(operation(a, b));
}

int add(int a, int b) {
  return a + b;
}

void main() {
  calculate(10, 20, add);
}

Output:

30

21. Anonymous Functions

An anonymous function is a function without a name. Anonymous functions are commonly used as callbacks.

void main() {
  List names = ["Aman", "Ravi", "Priya"];

  names.forEach((name) {
    print(name);
  });
}

22. What Is an Arrow Function?

An arrow function is a concise way to write a function that contains a single expression. Dart uses the => syntax for arrow functions.

Basic Syntax

returnType functionName(parameters) => expression;

An arrow function automatically returns the value of the expression.


23. Basic Arrow Function Example

Normal Function

int square(int number) {
  return number * number;
}

Arrow Function

int square(int number) => number * number;

Both functions perform the same operation.

Calling the Function

void main() {
  print(square(5));
}

Output:

25

24. Arrow Function with Multiple Parameters

int add(int a, int b) => a + b;

void main() {
  print(add(10, 20));
}

Output:

30

Another Example

double calculatePrice(double price, double tax) => price + tax;

25. Arrow Function Returning a String

String greet(String name) => "Hello $name";

void main() {
  print(greet("Rahul"));
}

Output:

Hello Rahul

26. Arrow Function with a Boolean Result

bool isAdult(int age) => age >= 18;

void main() {
  print(isAdult(25));
}

Output:

true

27. Arrow Functions and Ternary Operators

Arrow functions can contain expressions such as the ternary operator.

String checkAge(int age) =>
    age >= 18 ? "Adult" : "Minor";

void main() {
  print(checkAge(20));
}

Output:

Adult

28. Arrow Functions with Collections

Arrow functions are frequently useful with collection methods such as map(), where(), and forEach().

Using map()

void main() {
  List numbers = [1, 2, 3, 4, 5];

  var squares = numbers.map((number) => number * number);

  print(squares.toList());
}

Output:

[1, 4, 9, 16, 25]

Using where()

void main() {
  List numbers = [10, 15, 20, 25, 30];

  var evenNumbers =
      numbers.where((number) => number % 2 == 0);

  print(evenNumbers.toList());
}

Output:

[10, 20, 30]

29. Arrow Functions in Flutter Callbacks

Flutter applications frequently use functions as callbacks. Arrow functions can make short callback operations more concise.

Example with a Button

ElevatedButton(
  onPressed: () => print("Button clicked"),
  child: const Text("Click Me"),
)

The anonymous arrow function executes when the button is pressed.

Example with a Function

void showMessage() => print("Welcome to Flutter");

This style is useful when the function contains only one simple expression.


30. Normal Function vs Arrow Function

Normal Function Arrow Function
Uses curly braces Uses =>
Can contain multiple statements Contains a single expression
Uses return explicitly when returning a value Expression result is returned automatically
Better for complex logic Useful for short operations
Can contain multiple lines of statements Best suited to concise expressions

Example Comparison

// Normal function
int multiply(int a, int b) {
  return a * b;
}

// Arrow function
int multiplyShort(int a, int b) => a * b;

31. Function Parameters and Return Values Together

A common real-world function accepts data through parameters, processes it, and returns a result.

double calculateDiscount(double price, double discount) {
  return price - (price * discount / 100);
}

void main() {
  double finalPrice = calculateDiscount(1000, 10);

  print(finalPrice);
}

Output:

900.0

32. Practical Student Example

String getResult(int marks) {
  if (marks >= 40) {
    return "Pass";
  }

  return "Fail";
}

void main() {
  String result = getResult(75);
  print(result);
}

Output:

Pass

Arrow Version

String getResultShort(int marks) =>
    marks >= 40 ? "Pass" : "Fail";

33. Practical E-Commerce Example

Functions are useful for calculations such as product prices, discounts, taxes, and cart totals.

double calculateTotal(double price, int quantity) {
  return price * quantity;
}

void main() {
  double total = calculateTotal(499.99, 3);

  print("Total: $total");
}

Arrow Function Version

double calculateTotalShort(double price, int quantity) =>
    price * quantity;

34. Practical Login Example

bool login(String email, String password) {
  return email == "[email protected]" &&
      password == "123456";
}

void main() {
  bool result = login(
    "[email protected]",
    "123456",
  );

  print(result);
}

Output:

true

Arrow Version

bool loginShort(String email, String password) =>
    email == "[email protected]" &&
    password == "123456";

35. Function Types at a Glance

Type Example
No parameter, no return void hello() { ... }
Parameters, no return void greet(String name) { ... }
No parameter, returns value String getName() { ... }
Parameters and return value int add(int a, int b) { ... }
Arrow function int add(int a, int b) => a + b;
Anonymous function (value) { print(value); }
Callback onPressed: () => action()

36. Common Mistakes

Mistake 1: Forgetting the Return Statement

int add(int a, int b) {
  a + b;
}

If the function is supposed to return an integer, return the calculated value.

int add(int a, int b) {
  return a + b;
}

Mistake 2: Passing the Wrong Number of Arguments

int add(int a, int b) {
  return a + b;
}

// Incorrect:
// add(10);

// Correct:
add(10, 20);

Mistake 3: Confusing Parameters and Arguments

void greet(String name) {
  print(name);
}

greet("Aman");

Here, name is the parameter and "Aman" is the argument.

Mistake 4: Using an Arrow Function for Complex Logic

Arrow functions are best for short expressions. If a function requires multiple statements, a normal function body is generally clearer.


37. Best Practices for Dart Functions

  • Give functions meaningful names.
  • Keep functions focused on one main responsibility.
  • Use parameters to make functions reusable.
  • Use return values when the caller needs a result.
  • Use named parameters when they improve readability.
  • Use required when a named argument must be provided.
  • Use arrow functions for simple one-expression functions.
  • Use normal functions for complex operations.
  • Avoid unnecessary global variables.
  • Use appropriate return types instead of relying on unclear behavior.

38. Functions in Flutter Development

Functions are used throughout Flutter development. They can be used for:

  • Handling button clicks
  • Validating forms
  • Calculating values
  • Formatting data
  • Processing API responses
  • Filtering lists
  • Managing application logic
  • Updating UI-related state
  • Handling callbacks
  • Reusable business logic

Flutter Form Validation Example

String? validateEmail(String? email) {
  if (email == null || email.isEmpty) {
    return "Email is required";
  }

  if (!email.contains("@")) {
    return "Enter a valid email";
  }

  return null;
}

This function returns a String containing an error message when validation fails and null when the value is valid.

Flutter Button Callback Example

ElevatedButton(
  onPressed: () => print("Submitted"),
  child: const Text("Submit"),
)

39. Complete Example

double calculateFinalPrice({
  required double price,
  required double discount,
}) {
  return price - (price * discount / 100);
}

String getMessage(double price) =>
    price >= 1000 ? "Premium Product" : "Regular Product";

void main() {
  double finalPrice = calculateFinalPrice(
    price: 1500,
    discount: 10,
  );

  String message = getMessage(finalPrice);

  print("Final Price: $finalPrice");
  print(message);
}

Output:

Final Price: 1350.0
Premium Product

40. Practice Exercises

  1. Create a function that prints your name.
  2. Create a function that accepts two numbers and returns their sum.
  3. Create a function that returns the largest of two numbers.
  4. Create a function that checks whether a number is even or odd.
  5. Create a function that accepts a student's marks and returns Pass or Fail.
  6. Create a function that calculates the total price of multiple products.
  7. Convert a normal function into an arrow function.
  8. Create an arrow function that calculates the square of a number.
  9. Use an arrow function with map().
  10. Use an arrow function with where() to filter a list.
  11. Create a Flutter button using an arrow-function callback.
  12. Create a form validation function that returns an error message or null.

41. Quick Revision

Concept Key Point
Function Reusable block of code
Parameter Input variable defined by a function
Argument Actual value passed to a function
Return Sends a value back to the caller
void Indicates that the function does not return a value
Named Parameter Argument passed using its parameter name
required Makes a named parameter mandatory
Arrow Function Short syntax for a single-expression function
Anonymous Function Function without a name
Callback Function passed to another function

42. Key Takeaways

  • Functions make Dart programs reusable and organized.
  • Parameters allow functions to receive input.
  • Arguments are the actual values supplied to parameters.
  • Functions can return values using the return keyword.
  • void is commonly used when a function does not return a value.
  • Dart supports positional, optional positional, named, and required named parameters.
  • Arrow functions use the => syntax.
  • Arrow functions automatically return the value of their expression.
  • Arrow functions are particularly useful for short callbacks and collection operations.
  • Functions and callbacks are fundamental to Flutter application development.

Learn Flutter with JustAcademy

JustAcademy's Flutter curriculum includes Dart programming fundamentals, including functions and parameters, followed by Flutter widgets, navigation, state management, UI development, API integration, Firebase, testing, and application development. :contentReference[oaicite:1]{index=1}

Visit JustAcademy Flutter Training

To explore the course through a demo session: Register for JustAcademy Course Demo

whatsapp