0 purchases
dartx nullsafety
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:
dartx:
copied to clipboard
After you import the library, you can use the extensions.
import 'package:dartx/dartx.dart';
var 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).
var list = [0, 1, 2, 3, 4, 5];
var last = list.slice(-1); // [5]
var lastHalf = list.slice(3); // [3, 4, 5]
var allButFirstAndLast = list.slice(1, -2); // [1, 2, 3, 4]
copied to clipboard
.sortedBy() & .thenBy() #
Sort lists by multiple properties.
var 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),
];
var 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.
var list = ['this', 'is', 'a', 'test'];
var 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.
var nestedList = [[1, 2, 3], [4, 5, 6]];
var flattened = nestedList.flatten(); // [1, 2, 3, 4, 5, 6]
copied to clipboard
.chunkWhile() & .splitWhen() #
Chunk entries as long 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.
String #
.chars #
Get a list of single character strings from a string. Supports emojis.
var chars = 'family๐จโ๐จโ๐งโ๐ฆ'.chars; // ['f', 'a', 'm', 'i', 'l', 'y', '๐จโ๐จโ๐งโ๐ฆ']
copied to clipboard
.isBlank #
Returns true if this string is empty or consists solely of whitespace characters.
var notBlank = ' .'.isBlank; // false
var blank = ' '.isBlank; // true
copied to clipboard
.toIntOrNull() #
Parses the string as an integer or returns null if it is not a number.
var number = '12345'.toIntOrNull(); // 12345
var notANumber = '123-45'.toIntOrNull(); // null
copied to clipboard
.removePrefix(), .removeSuffix() and .removeSurrounding() #
Remove a prefix, a suffix, or both from a given string:
var name = 'James Bond'.removePrefix('James '); // Bond
var milliseconds = '100ms'.removeSuffix('ms'); // 100
var text = '<p>Some HTML</p>'
.removeSurrounding(prefix: '<p>', suffix: '</p>'); // Some HTML
copied to clipboard
Time utils #
Dartx 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.
var numberInRange = 123.coerceIn(0, 1000); // 123
var numberOutOfRange = -123.coerceIn(0, 1000); // 0
copied to clipboard
.toBytes() #
Converts this value to binary form.
range #
rangeTo #
Creates a range between two ints (upwards, downwards and with custom steps)
// upwards with default step size 1
for (var i in 1.rangeTo(5)) {
print(i); // 1, 2, 3, 4, 5
}
// downwards with custom step
for (var i in 10.rangeTo(2).step(2)) {
print(i); // 10, 8, 6, 4, 2
}
copied to clipboard
Function #
.invoke() - DEPRECATED #
Use call() instead. This is very useful for null checks.
var func = (String value) {
print(value);
}
func?.call('hello world');
copied to clipboard
.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!');
}
var 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.
var 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.
var dir = Directory('some/path');
File('some/path/file.dart').isWithin(dir); // true
copied to clipboard
Directory #
.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.
License #
Copyright 2019 Simon Leier
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
copied to clipboard
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.