0 purchases
dartf
If you miss an extension, please open an issue or pull request
Resources: #
Documentation
Pub Package
GitHub Repository
On this page you can find some of the extensions. Take a look at the docs to see all of them.
Getting started #
Add the following to your pubspec.yaml:
dependencies:
dartf: any
copied to clipboard
After you import the library, you can use the extensions.
import 'package:dartf/dartf.dart';
final slice = [1, 2, 3, 4, 5].slice(1, -2); // [2, 3, 4]
copied to clipboard
Iterable #
.slice() #
Returns elements at indices between start (inclusive) and end (inclusive).
final list = [0, 1, 2, 3, 4, 5];
final last = list.slice(-1); // [5]
final lastHalf = list.slice(3); // [3, 4, 5]
final allButFirstAndLast = list.slice(1, -2); // [1, 2, 3, 4]
copied to clipboard
.sortedBy() & .thenBy() #
Sort lists by multiple properties.
final dogs = [
Dog(name: "Tom", age: 3),
Dog(name: "Charlie", age: 7),
Dog(name: "Bark", age: 1),
Dog(name: "Cookie", age: 4),
Dog(name: "Charlie", age: 2),
];
final sorted = dogs
.sortedBy((dog) => dog.name)
.thenByDescending((dog) => dog.age);
// Bark, Cookie, Charlie (7), Charlie (2), Tom
copied to clipboard
.distinctBy() #
Get distinct elements from a list.
final list = ['this', 'is', 'a', 'test'];
final distinctByLength = list.distinctBy((it) => it.length); // ['this', 'is', 'a']
copied to clipboard
.flatten() #
Get a new lazy Iterable of all elements from all collections in a collection.
final nestedList = [[1, 2, 3], [4, 5, 6]];
final flattened = nestedList.flatten(); // [1, 2, 3, 4, 5, 6]
copied to clipboard
.chunkWhile() & .splitWhen() #
Chunk entries as long as two elements match a predicate:
final list = [1, 2, 4, 9, 10, 11, 12, 15, 16, 19, 20, 21];
final increasingSubSequences = list.chunkWhile((a, b) => a + 1 == b);
// increasingSubSequences = [[1, 2], [4], [9, 10, 11, 12], [15, 16], [19, 20, 21]]
copied to clipboard
splitWhen is the opposite of chunkWhile that starts a new chunk every time
the predicate didn't match.
int #
buildString() #
Builds new string by populating newly created StringBuffer using provided builderAction
and then converting it to String.
final word = buildString((sb) {
for (var i = 0; i < 10; i++) {
sb.write(i);
}
});
// 0123456789
copied to clipboard
.ordinal #
Returns an ordinal number of String type for any integer
final a = 1.ordinal(); // 1st
final b = 108.ordinal(); // 108th
copied to clipboard
String #
.capitalize #
Returns a copy of the string having its first letter uppercased, or the original string, if it's empty or already starts with an upper case letter.
final word = 'abcd'.capitalize(); // Abcd
final anotherWord = 'Abcd'.capitalize(); // Abcd
copied to clipboard
.decapitalize #
Returns a copy of the string having its first letter lowercased, or the original string, if it's empty or already starts with a lower case letter.
final word = 'abcd'.decapitalize(); // abcd
final anotherWord = 'Abcd'.decapitalize(); // abcd
copied to clipboard
.isAscii #
Returns true if the string is ASCII encoded.
final isAscii = 'abc123 !,.~'.isAscii; // true
final isNotAscii = '§3'.isAscii; // false
copied to clipboard
.isBlank #
Returns true if this string is empty or consists solely of whitespace characters.
final notBlank = ' .'.isBlank; // false
final blank = ' '.isBlank; // true
copied to clipboard
.isDouble #
Returns true if the string can be parsed as a double.
final a = ''.isDouble; // false
final b = 'a'.isDouble; // false
final c = '1'.isDouble; // true
final d = '1.0'.isDouble; // true
final e = '123456789.987654321'.isDouble; // true
final f = '1,000'.isDouble; // false
copied to clipboard
.isInt #
Returns true if the string can be parsed as an integer.
final a = ''.isInt; // false
final b = 'a'.isInt; // false
final c = '1'.isInt; // true
final d = '1.0'.isInt; // false
final e = '1,000'.isInt; // false
copied to clipboard
.isLatin1 #
Returns true if the string is Latin 1 encoded.
final isLatin1 = '§Êü'.isLatin1; // true
final isNotLatin1 = 'ő'.isLatin1; // false
copied to clipboard
.isLowerCase #
Returns true if the entire string is lower case.
final a = 'abc'.isLowerCase; // true
final b = 'abC'.isLowerCase; // false
final c = ' '.isLowerCase; // true
final d = ''.isLowerCase; // false
copied to clipboard
.isNotBlank #
Returns true if this string is not empty and contains characters except whitespace characters.
final blank = ' '.isNotBlank; // false
final notBlank = ' .'.isNotBlank; // true
copied to clipboard
.isNullOrEmpty #
Returns true if the String is either null or empty.
final isNull = null.isNullOrEmpty; // true
final isEmpty = ''.isNullOrEmpty; // true
final isBlank = ' '.isNullOrEmpty; // false
final isLineBreak = '\n'.isNullOrEmpty; // false
copied to clipboard
.isNotNullOrEmpty #
Returns true if the String is neither null nor empty.
final isNull = null.isNullOrEmpty; // true
final isEmpty = ''.isNullOrEmpty; // true
final isBlank = ' '.isNullOrEmpty; // false
final isLineBreak = '\n'.isNullOrEmpty; // false
copied to clipboard
.isNullOrBlank #
Returns true if the String is either null or blank.
final isNull = null.isNullOrBlank; // true
final isEmpty = ''.isNullOrBlank; // true
final isBlank = ' '.isNullOrBlank; // true
final isLineBreak = '\n'.isNullOrBlank; // true
final isFoo = ' foo '.isNullOrBlank; // false
copied to clipboard
.isNotNullOrBlank #
Returns true if the String is neither null nor blank.
final isNull = null.isNullOrBlank; // true
final isEmpty = ''.isNullOrBlank; // true
final isBlank = ' '.isNullOrBlank; // true
final isLineBreak = '\n'.isNullOrBlank; // true
final isFoo = ' foo '.isNullOrBlank; // true
copied to clipboard
.isUpperCase #
Returns true if the entire string is upper case.
final a = 'ABC'.isUpperCase; // true
final b = 'ABc'.isUpperCase; // false
final c = ' '.isUpperCase; // true
final d = ''.isUpperCase; // false
copied to clipboard
.md5 #
Calculates the MD5 digest and returns the value as a string of hexadecimal digits.
final a = 'abc'.md5; // 900150983cd24fb0d6963f7d28e17f72
final b = 'ഐ⌛酪Б👨👨👧👦'.md5; // c7834eff7c967101cfb65b8f6d15ad46
copied to clipboard
.urlEncode #
Translates a string into application/x-www-form-urlencoded format using a specific encoding scheme.
const originalUrl = 'Hello Ladies + Gentlemen, a signed OAuth request!';
final encodedUrl = originalUrl.urlEncode;
// 'Hello%20Ladies%20+%20Gentlemen,%20a%20signed%20OAuth%20request!'
copied to clipboard
.urlDecode #
Decodes an application/x-www-form-urlencoded string using a specific encoding scheme.
const encodedUrl = 'Hello%20Ladies%20+%20Gentlemen,%20a%20signed%20OAuth%20request!';
final decodedUrl = encodingUrl.urlDecode;
// 'Hello Ladies + Gentlemen, a signed OAuth request!'
copied to clipboard
.removePrefix(), .removeSuffix() and .removeSurrounding() #
Remove a prefix, a suffix, or both from a given string:
final name = 'James Bond'.removePrefix('James '); // Bond
final milliseconds = '100ms'.removeSuffix('ms'); // 100
final text = '<p>Some HTML</p>'
.removeSurrounding(prefix: '<p>', suffix: '</p>'); // Some HTML
copied to clipboard
.reversed #
Returns a new string with characters in reversed order.
final emptyString = ''.reversed; // ''
final reversed = 'abc🤔'.reversed; // '🤔cba'
copied to clipboard
.slice() #
Returns a new substring containing all characters including indices [start] and [end].
If [end] is omitted, it is being set to lastIndex.
final sliceOne = 'awesomeString'.slice(0,6)); // awesome
final sliceTwo = 'awesomeString'.slice(7)); // String
copied to clipboard
.toDoubleOrNull() #
Parses the string as a double and returns the result or null if the String is not a valid representation of a number.
final numOne = '1'.toDoubleOrNull(); // 1.0
final numTwo = '1.2'.toDoubleOrNull(); // 1.2
final blank = ''.toDoubleOrNull(); // null
copied to clipboard
.toInt() #
Parses the string as an integer and returns the result. The radix (base) thereby defaults to 10. Throws a FormatException if parsing fails.
final a = '1'.toInt(); // 1
final b = '100'.toInt(radix: 2); // 4
final c = '100'.toInt(radix: 16); // 256
final d = '1.0'.toInt(); // throws FormatException
copied to clipboard
.toIntOrNull() #
Parses the string as an integer or returns null if it is not a number.
final number = '12345'.toIntOrNull(); // 12345
final notANumber = '123-45'.toIntOrNull(); // null
copied to clipboard
.toUtf8() #
Converts String to UTF-8 encoding.
final emptyString = ''.toUtf8(); // []
final hi = 'hi'.toUtf8(); // [104, 105]
final emoji = '😄'.toUtf8(); // [240, 159, 152, 132]
copied to clipboard
.toUtf16() #
Converts String to UTF-16 encoding.
final emptyString = ''.toUtf16(); // []
final hi = 'hi'.toUtf16(); // [104, 105]
final emoji = '😄'.toUtf16(); // [55357, 56836]
copied to clipboard
.orEmpty() #
Returns the string if it is not null, or the empty string otherwise.
String? nullableStr;
final str = nullableStr.orEmpty(); // ''
copied to clipboard
.matches() #
Returns true if this char sequence matches the given regular expression.
print('as'.matches(RegExp('^.s\$'))) // true
print('mst'.matches(RegExp('^.s\$'))) // false
copied to clipboard
Time utils #
dartf exports @jogboms great ⏰ time.dart package so you can do the following:
int secondsInADay = 1.days.inSeconds;
Duration totalTime = [12.5.seconds, 101.milliseconds, 2.5.minutes].sum();
DateTime oneWeekLater = DateTime.now() + 1.week;
copied to clipboard
Check out ⏰ time.dart for more information and examples.
num #
.coerceIn() #
Ensures that this value lies in the specified range.
final numberInRange = 123.coerceIn(0, 1000); // 123
final numberOutOfRange = -123.coerceIn(0, 1000); // 0
copied to clipboard
.toBytes() #
Converts this value to binary form.
.toChar() #
Converts this value to character
final character = 97.toChar(); // a
copied to clipboard
range #
rangeTo #
Creates a range between two ints (upwards, downwards and with custom steps)
// upwards with default step size 1
for (final i in 1.rangeTo(5)) {
print(i); // 1, 2, 3, 4, 5
}
// downwards with custom step
for (final i in 10.rangeTo(2).step(2)) {
print(i); // 10, 8, 6, 4, 2
}
copied to clipboard
Function #
.partial(), .partial2() ... #
Applies some of the required arguments to a function and returns a function which takes the remaining arguments.
void greet(String firstName, String lastName) {
print('Hi $firstName $lastName!');
}
final greetStark = greet.partial('Stark');
greetStark('Sansa'); // Hi Sansa Stark!
greetStark('Tony'); // Hi Tony Stark!
copied to clipboard
File #
.name #
Get the name and extension of a file.
final file = File('some/path/testFile.dart');
print(file.name); // testFile.dart
print(file.nameWithoutExtension); // testFile
copied to clipboard
.appendText() #
Append text to a file.
await File('someFile.json').appendText('{test: true}');
copied to clipboard
.isWithin() #
Checks if a file is inside a directory.
final dir = Directory('some/path');
File('some/path/file.dart').isWithin(dir); // true
copied to clipboard
Directory #
.file(String) #
References a file within a Directory
Directory androidDir = Directory('flutter-app/android');
File manifestFile = androidDir.file("app/src/main/AndroidManifest.xml");
copied to clipboard
References a directory within a Directory
.directory(String) #
Directory androidDir = Directory('flutter-app/android');
Directory mainSrc = androidDir.directory("app/src/main");
copied to clipboard
.contains(FileSystemEntity entity, {bool recursive = false}) #
Checks if a Directory contains a FileSystemEntity. This can be a File or a Directory.
Use the recursive argument to include the subdirectories.
final File someFile = File('someFile.txt');
final Directory someDir = Directory('some/dir');
final Directory parentDir = Directory('parent/dir');
parentDir.contains(someFile);
parentDir.contains(someDir);
parentDir.contains(someFile, recursive: true);
parentDir.contains(someDir, recursive: true);
copied to clipboard
This is the async method, which returns a Future<bool>.
.containsSync(FileSystemEntity entity, {bool recursive = false}) #
Same as .contains(FileSystemEntity entity, {bool recursive = false}) but synchronous. Returns a bool.
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.