soundsliced_dart_extensions
A comprehensive collection of Dart & Flutter extensions to simplify everyday development tasks and enhance code readability. It includes rich utilities for time, formatting, collections, UI layout, JSON, colors, and more.
Features
This package provides extensive extensions for:
DateTime & Duration
- Duration shortcuts:
5.seconds,2.minutes,1.hours,3.days - DateTime utilities: Convert to date, adjust time, round to nearest minute
- String parsing: Convert time strings to DateTime
- Formatting: Easy string conversions with customizable formats
String Extensions
- Type conversion: Parse booleans, convert to lists
- Formatting: Capitalize sentences, beautify JSON
- JSON utilities: Decode and beautify JSON strings
List Extensions
- Safe access: Null-safe element access with index checking
- Chunking: Split lists into smaller chunks
- Sorting: Alphanumeric sorting for string lists
Color Extensions
- Manipulation: Lighten and darken colors
- Conversion: Convert to hex strings
EdgeInsets Extensions
- Fluent API: Chain padding modifications
- Smart padding: Apply first non-zero padding value
- Modification: Add to existing padding values
TimeOfDay Extensions
- JSON support: Serialize/deserialize
- Conversion: Convert to Duration, DateTime, formatted strings
- Manipulation: Add/subtract minutes, round to intervals
Additional Utilities
- Offset utilities: Calculate distance, check direction
- Map extensions: Convert to lists
- Scroll controller: Animate to bottom
- Type conversions: String to URI, various type parsers
Installation
Add this to your package's pubspec.yaml file:
dependencies:
soundsliced_dart_extensions: ^1.0.1
Then run:
flutter pub get
Usage
Import the package:
import 'package:soundsliced_dart_extensions/soundsliced_dart_extensions.dart';
Duration Examples
// Create durations with intuitive syntax
final duration1 = 5.seconds;
final duration2 = 2.minutes;
final duration3 = 1.hours;
final duration4 = 3.days;
// Convert Duration to easy-read string
final formatted = duration1.convertToEasyReadString(); // "05 sec"
DateTime Examples
// Round datetime to nearest interval
final now = DateTime.now();
final rounded = now.toNearestMinute(nearestMinute: 15);
// Convert to date only (remove time)
final dateOnly = now.convertToDate();
// Get month name
final monthName = now.convertToMonthString(); // "JAN", "FEB", etc.
String Extensions
// Capitalize sentences
final text = "hello world. how are you?";
final capitalized = text.capitalizeFirstLetterOfEverySentence();
// "Hello world. How are you?"
// Parse boolean
final boolValue = "true".parseBool(); // true
// Convert string to list
final listString = "[item1, item2, item3]";
final list = listString.convertToListString();
Color Extensions
// Lighten/darken colors
final color = Colors.blue;
final lighter = color.lighten(0.2); // 20% lighter
final darker = color.darken(0.3); // 30% darker
// Convert to hex
final hexColor = toHex(Colors.red); // "#FFFF0000"
EdgeInsets & Layout Extensions
Fluent & tuple based syntaxes:
final p1 = 12.leftPad; // EdgeInsets.only(left: 12)
final p2 = (8, 16).leftPad.rightPad; // left=8, right=16
final p3 = (5, 10, 15).leftPad.topPad.rightPad; // left=5, top=10, right=15
final p4 = (4, 8, 12, 16).leftPad.topPad.rightPad.bottomPad; // left=4, top=8, right=12, bottom=16
final fluent = EdgeInsets.all(10)
.addToTop(5)
.leftPad // copies first non-zero to left
.rightPad; // copies that same value to right
// Fluent padding API
final padding = EdgeInsets.all(10.0)
.withLeft(20.0)
.addToTop(5.0);
// Smart padding (use first non-zero value)
final base = EdgeInsets.only(left: 10.0);
final samePadding = base.rightPad; // Uses left value for right
TimeOfDay Extensions
// Convert to Duration
final time = TimeOfDay(hour: 14, minute: 30);
final duration = time.convertToDuration(); // 14h 30min
// Format as string
final formatted = time.convertToStringTime(); // "14:30"
// Add/subtract minutes
final later = time.addMinutes(45); // 15:15
final earlier = time.subtractMinutes(30); // 14:00
// Round to interval
final rounded = time.toNearestMinute(nearestMinute: 15);
List & Iterable Extensions
final list = [1,2,3];
final safeValue = list.safe[10]; // null (out of range)
final firstEven = list.findFirstWhereOrNull((e) => e.isEven); // 2
// Safe element access
final list = [1, 2, 3];
final element = list.safe[10]; // null instead of error
// Check if index exists
if (list.doesIndexExist(5)) {
print(list[5]);
}
// Split into chunks
final letters = ['a', 'b', 'c', 'd', 'e'];
final chunks = letters.splitInChunks(2); // [[a, b], [c, d], [e]]
JSON Beautifier & Parsing
Beautify maps & lists with embedded JSON strings:
final raw = {
'id': '123',
'payload': '{"value":42,"inner":"{\\"x\\":1}"}'
};
final pretty = raw.beautifiedJson; // formatted, nested JSON decoded
final jsonString = '{"id":"123","payload":{"value":42,"inner":{"x":1}}}';
final decoded = jsonString.decodeBeautifiedJsonMap; // nested structure recovered
BorderRadius Helpers
final circle = 12.allRad; // BorderRadius.circular(12)
final topCorners = 8.topRad; // Only top corners 8
Requirements
- Dart SDK:
>=3.0.0 <4.0.0 - Flutter:
>=3.0.0
Dependencies
fpdart: ^1.2.0intl: ^0.20.2sizer: ^3.1.3xid: ^1.2.1collection: ^1.19.1
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Issues
Please file issues on the GitHub repository.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Repository
https://github.com/SoundSliced/soundsliced_dart_extensions
Example Project
See example/lib/main.dart for a concise runnable showcase of the core extensions.