Extensions in Dart

Lazar Nikolov
jump to solution

The Problem

It’s not much of a solution to a problem, but a nice convenience. Extensions in Dart allow you to develop custom functionalities on any library or data structure, including your own. So how do we go about them?

The Solution

There&aspo;s a specific keyword in Dart used to create extensions: extension. When creating an extension we also need to specify on which data type it should apply. Let’s say we want to make a few useful DateTime extension methods. We should create a separate file and create our date extensions inside:

// date_extensions.dart

extension DateExtensions on DateTime {
	// ...
}

Let’s create an extension method that checks whether one date is at the same day as another:

extension DateExtensions on DateTime {
	bool isSameDay(DateTime other) {
    return this.year == other.year &&
        this.month == other.month &&
        this.day == other.day;
  }
}

Note: I’ve put this so you can see how the comparison happens. The IDE will most likely warn you: Don't access members with this unless avoiding shadowing.

We can use our new extension method like so (don’t forget to import your dart extension file):

date1.isSameDate(date2)

The this in our extension method refers to the date1 variable.

Aside from methods, we can also create getters, setters and operators as well. Here’s a getter method that returns a date in a specific format:

extension DateExtensions on DateTime {
	// ...
	get formattedDate {
		DateFormat format;
		if (year != DateTime.now().year) {
		  format = DateFormat("E, d MMM yyyy");
		// we can also use other extension methods inside
		} else if (isToday()) {
		  return "Today";
		// we can also use other extension methods inside
		} else if (isYesterday()) {
		  return "Yesterday";
		} else {
		  format = DateFormat("E, d MMM");
		}

		return format.format(this);
	}
}
Detecting the host platform in Flutter
Lazar Nikolov
Flutter Initialization Failed
Manoel Aranda Neto

Considered "not bad" by 4 million developers and more than 150,000 organizations worldwide, Sentry provides code-level observability to many of the world's best-known companies like Disney, Peloton, Cloudflare, Eventbrite, Slack, Supercell, and Rockstar Games. Each month we process billions of exceptions from the most popular products on the internet.

Sentry