반응형
📌 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%
}
반응형
'[====== Development ======] > Flutter' 카테고리의 다른 글
Flutter - 위젯간에 데이터를 전달하는 방법 (0) | 2025.02.08 |
---|---|
Flutter - 앱에서 서버의 알림을 받는 방법 (0) | 2025.02.06 |
Flutter - 모델 클래스 생성 및 직력화/역직렬화 간편하게 하는 방법 (0) | 2024.11.20 |
Flutter - Singleton 패턴 (1) | 2024.11.14 |
Flutter - 여러 버전의 Dark SDK 사용하는 방법 (2) | 2024.11.07 |