반응형

📌 1. String Extensions

extension StringExtensions on String {
  /// 첫 글자를 대문자로 변환
  String capitalize() {
    if (isEmpty) return this;
    return this[0].toUpperCase() + substring(1);
  }

  /// 문자열이 이메일 형식인지 확인
  bool isValidEmail() {
    final regex = RegExp(r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$');
    return regex.hasMatch(this);
  }

  /// 숫자로 변환 (실패하면 0 반환)
  int toInt({int defaultValue = 0}) {
    return int.tryParse(this) ?? defaultValue;
  }
}

📌 2. DateTime Extensions

extension DateTimeExtensions on DateTime {
  /// yyyy-MM-dd 포맷의 문자열 반환
  String toFormattedString() {
    return '${year.toString().padLeft(4, '0')}-${month.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')}';
  }

  /// 주어진 날짜와 같은 날인지 확인
  bool isSameDate(DateTime other) {
    return year == other.year && month == other.month && day == other.day;
  }

  /// 현재 시간에서 몇 초 전인지 반환
  int secondsAgo() {
    return DateTime.now().difference(this).inSeconds;
  }
}

📌 3. List Extensions

extension ListExtensions<T> on List<T> {
  /// 리스트가 비어있는지 확인
  bool get isNullOrEmpty => isEmpty;

  /// 리스트의 마지막 요소 가져오기 (비어있으면 null 반환)
  T? get lastOrNull => isNotEmpty ? last : null;

  /// 리스트를 랜덤하게 섞기
  List<T> shuffled() {
    final list = List<T>.from(this);
    list.shuffle();
    return list;
  }
}

📌 4. BuildContext Extensions (Flutter 관련)

import 'package:flutter/material.dart';

extension BuildContextExtensions on BuildContext {
  /// 화면 너비 반환
  double get screenWidth => MediaQuery.of(this).size.width;

  /// 화면 높이 반환
  double get screenHeight => MediaQuery.of(this).size.height;

  /// 현재 테마 색상 반환
  Color get primaryColor => Theme.of(this).primaryColor;

  /// 스낵바 표시
  void showSnackBar(String message) {
    ScaffoldMessenger.of(this).showSnackBar(SnackBar(content: Text(message)));
  }
}

📌 5. Num (int, double) Extensions

extension NumExtensions on num {
  /// 금액을 원화(KRW) 형식으로 변환
  String toCurrency() {
    return '${toStringAsFixed(0)}원';
  }

  /// 퍼센트 값으로 변환 (소수점 2자리)
  String toPercentage() {
    return '${(this * 100).toStringAsFixed(2)}%';
  }

  /// 두 숫자 사이에 값이 있는지 확인
  bool isBetween(num min, num max) {
    return this >= min && this <= max;
  }
}

사용 예시

void main() {
  print('hello'.capitalize()); // Hello
  print('test@example.com'.isValidEmail()); // true
  print('1234'.toInt()); // 1234
  print('abcd'.toInt()); // 0

  DateTime now = DateTime.now();
  print(now.toFormattedString()); // yyyy-MM-dd
  print(now.isSameDate(DateTime.now())); // true

  List<int> numbers = [1, 2, 3, 4, 5];
  print(numbers.shuffled()); // 랜덤한 순서의 리스트 반환

  double value = 0.85;
  print(value.toPercentage()); // 85.00%
}

 

반응형

+ Recent posts