Extensions in Dart

Lazar Nikolov

The Problem

Its 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. Lets 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 { // ... }

Lets 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: Ive 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 (dont 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. Heres 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); } }

Loved by over 4 million developers and more than 90,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.

Share on Twitter
Bookmark this page
Ask a questionJoin the discussion

Related Answers

A better experience for your users. An easier life for your developers.

    TwitterGitHubDribbbleLinkedinDiscord
© 2024 • Sentry is a registered Trademark
of Functional Software, Inc.