ext_kit 1.0.0
ext_kit: ^1.0.0 copied to clipboard
A comprehensive Flutter/Dart package providing powerful extensions for String, DateTime, int, double, num, List, Iterable, Map, Widget, BuildContext, Color, Duration, and dynamic types. Boost your pro [...]
import 'package:flutter/material.dart';
import 'package:ext_kit/ext_kit.dart';
void main() {
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// String Extensions
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
const email = 'user@example.com';
log(email.isEmail); // true
const text = 'hello world';
log(text.capitalize); // Hello World
log(text.capitalizeFirst); // Hello world
log(text.removeAllWhitespace); // helloworld
log(text.isAlphabetOnly); // false (has space)
log(text.wordCount); // 2
log(text.reversed); // dlrow olleh
log('Hello World Example'.toSlug()); // hello-world-example
// String validation
log('192.168.1.1'.isIPv4); // true
log('test@email.com'.isEmail); // true
log('+6281234567890'.isPhoneNumber); // true
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// DateTime Extensions
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
final now = DateTime.now();
log(now.isToday()); // true
log(now.isWeekend()); // depends on current day
log(now.startOfDay); // today at 00:00:00
log(now.endOfMonth); // last moment of this month
log(now.daysInMonth); // 28, 29, 30, or 31
log(now.isLeapYear()); // depends on year
log(now.timeAgo()); // "just now" or "5 minutes ago"
final tomorrow = now.addDays(1);
log(tomorrow.isTomorrow()); // true
log(now.isBetween(now.subtractDays(1), now.addDays(1))); // true
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// int Extensions
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
log(7.isPrime); // true
log(5.factorial); // 120
log(8.isFibonacci); // true
log(10.isMultipleOf(5)); // true
log(7.nextPrime); // 11
// Duration from int
final delay = 2.seconds; // Duration(seconds: 2)
log(delay);
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// List & Iterable Extensions
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
final numbers = [1, 2, 3, 4, 5];
log(numbers.sum); // 15
log(numbers.average); // 3
log(numbers.product); // 120
log(numbers.rotated(2)); // [3, 4, 5, 1, 2]
log(numbers.reversedList); // [5, 4, 3, 2, 1]
final items = [1, 2, 2, 3, 3, 3];
log(items.distinct().toList()); // [1, 2, 3]
final grouped = ['apple', 'avocado', 'banana', 'blueberry'];
log(grouped
.groupBy((s) => s[0])); // {a: [apple, avocado], b: [banana, blueberry]}
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// num Extensions
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
log(1500.0.toCurrency()); // $1,500.00
log(1234567.toCompact()); // 1.2M
log(1048576.toFileSize()); // 1.0 MB
log(50.isBetween(1, 100)); // true
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// Map Extensions
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
final map = {'a': 1, 'b': 2, 'c': 3};
log(map.getOrDefault('d', 0)); // 0
log(map.whereValues((v) => v > 1)); // {b: 2, c: 3}
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// Duration Extensions
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
const duration = Duration(hours: 1, minutes: 30, seconds: 45);
log(duration.timeToString); // 01:30:45
}
/// Example Flutter widget demonstrating Widget & BuildContext extensions.
class ExampleWidget extends StatelessWidget {
const ExampleWidget({super.key});
@override
Widget build(BuildContext context) {
return Column(
children: [
// Widget extensions
const Text('Hello').paddingAll(16.0),
const Text('World').marginSymmetric(horizontal: 8.0),
const Text('Centered').center(),
const Text('Expanded').expanded(),
// BuildContext extensions
Text('Width: ${context.width}'),
Text('Is Phone: ${context.isPhone}'),
Text('Dark Mode: ${context.isDarkMode}'),
// Responsive values
Text(
'Responsive',
style: TextStyle(
fontSize: context.responsiveValue(
mobile: 14.0,
tablet: 18.0,
desktop: 22.0,
),
),
),
],
);
}
}