Als Dart-Experte sollte es dein Ziel sein, gut lesbaren, effizienten und wartbaren Code zu schreiben. Mit Extensions bekommst du das passende Werkzeug, um bestehende Klassen zu erweitern und deinen Code auf ein neues Level zu heben.
In diesem Artikel zeigen wir dir, wie du mit Extensions deine Codebasis optimierst, deine Produktivität steigerst und gleichzeitig die Lesbarkeit deines Codes verbessern kannst.
Was sind Dart-Extensions?
Dart Extensions sind Methoden oder Getter, die an eine existierende Klasse “angeheftet” werden. Das ist besonders hilfreich, wenn man eine Klasse erweitern möchte, die man nicht selbst geschrieben hat. Zum Beispiel DateTime oder besonders oft der BuildContext.
Beispiel: Überprüfung, ob ein Datum der heutige Tag ist
Stellen wir uns vor, wir möchten eine Todo-App entwickeln. Dafür planen wir, auf dem Homescreen nur die Todos des aktuellen Tages anzuzeigen. Um das zu erreichen, müssten wir das Jahr, den Monat und den Tag mit dem aktuellen Datum vergleichen. Warum? Das liegt daran, dass die Todos mit DateTime.now() erstellt werden. Dabei werden auch die Stunden, Minuten, Sekunden und Millisekunden mitgespeichert. Deshalb können wir das Datum nicht direkt mit DateTime.now() vergleichen. Um zu vermeiden, dass wir den Code an zehn weiteren Stellen in der App wiederholen oder jedes Mal eine Util-Klasse aufrufen müssen, können wir Folgendes schreiben:
extension DateTimeExtension on DateTime
Aber was bedeutet das?
extension ist das Schlüsselwort, das den Beginn der Extension definiert.
DateTimeExtension ist der Name der Extension, den du Frei wählen kannst.
on DateTime gibt an, auf welche Klasse die Erweiterung angewendet wird.
Als nächstes fügen wir unseren Getter hinzu. Hier kann auch eine Methode verwendet werden. Wir überprüfen hier, ob der Tag, auf dem die Extension angewendet wird, der heutige ist.
extension DateTimeExtension on DateTime {
// Ein Getter, der überprüft, ob ein Datum das heutige ist.
bool get isToday {
final now = DateTime.now();
return year == now.year && month == now.month && day == now.day;
}
}
So können wir das Ganze dann aufrufen:
final date = DateTime(2024, 08, 12, 08, 32);
print(date.isToday)
Schauen wir uns ein weiteres Beispiel an.
Beispiel: Einfacher Zugang zu Übersetzungen
In den meisten Apps ist es erforderlich, mehrsprachige Texte zu haben. Dazu verwendet man Übersetzungen. Um darauf zugreifen zu können, muss man immer Folgendes aufrufen:
AppLocalizations.of(context).deineUebersetzung
Das ist schwer zu merken, umständlich und lässt sich sicherlich kürzer formulieren.
Deswegen können wir eine Extension entwickeln, die auf dem BuildContext aufbaut. Das sieht dann wie folgt aus:
extension TranslationExtension on BuildContext {
AppLocalizations get translations => AppLocalizations.of(this);
}
Wenn man das Ganze dann aufrufen möchte, muss man nur noch Folgendes schreiben.
context.translations.deineUebersetzung
Und schon hat man Zugriff auf die jeweilige Übersetzung, ohne AppLocalizations eingeben zu müssen.
Fazit
Dart Extensions bieten eine effektive Möglichkeit, den Code durch die Erweiterung bestehender Klassen zu optimieren. Sie verbessern die Lesbarkeit, Wartbarkeit und Effizienz deines Codes, indem sie wiederkehrende Aufgaben wie Datumsermittlungen und den Zugriff auf Übersetzungen vereinfachen.
Comments