Skip to content

Extension Methods

Extension methods allow you to add functionality to existing classes without modifying them.

Basic Extension

dart
extension StringExtension on String {
  String get reversed => split('').reversed.join();
  
  String capitalize() {
    if (isEmpty) return this;
    return '${this[0].toUpperCase()}${substring(1)}';
  }
  
  bool get isEmail => contains('@') && contains('.');
}

void main() {
  print('hello'.reversed);        // olleh
  print('dart'.capitalize());     // Dart
  print('test@example.com'.isEmail);  // true
}

Extension on Built-in Types

dart
extension IntExtension on int {
  bool get isEven => this % 2 == 0;
  bool get isOdd => this % 2 != 0;
  
  int get squared => this * this;
}

extension ListExtension<T> on List<T> {
  T? get secondOrNull => length > 1 ? this[1] : null;
}

void main() {
  print(4.isEven);      // true
  print(5.squared);     // 25
  print([1, 2, 3].secondOrNull);  // 2
}

Complete Example

dart
extension DateTimeExtension on DateTime {
  bool get isToday {
    final now = DateTime.now();
    return year == now.year && month == now.month && day == now.day;
  }
  
  String get formatted => '$year-$month-$day';
}

void main() {
  var now = DateTime.now();
  print(now.isToday);     // true
  print(now.formatted);   // 2024-01-15
}

Next Steps

Content is for learning and research only.