Morpheme Extension

Fork and modify from dartx and export package time.

Scope Functions

.run

Calls the specified function block with it value as its receiver and returns its result.

String? getValue() => '1';
final value = getValue();

value?.run((it) => doSomething(it));

.let

Calls the specified function block with it value as its argument and returns its result.

String? getValue() => '1';
final value = getValue();
final let = value?.let((it) => int.parse(it)); // 1 (int)

.also

Calls the specified function block with it value as its argument and returns block value.

String? getValue() => '1';
final value = getValue();
int itValue = 0;
final also = value?.also((it) {
    itValue = int.parse(it);
});

print(also);        // 1 (String)
print(itValue);     // 1 (int)

.takeIf

Returns T value if it satisfies the given predicate or null, if it doesn't.

final a = 10.takeIf((it) => it % 2 == 0); // 10
final b = 9.takeIf((it) => it % 2 == 0); // null

.takeUnless

Returns T value if it does not satisfy the given predicate or null, if it does.

final value = 10.takeUnless((it) => it % 2 == 0); // null
final value = 9.takeUnless((it) => it % 2 == 0); // 9

int

.plus

Return int this plus with value.

final a = 1.plus(1);  // 2
final b = 200.plus(50);  // 250

.minus

Return int this minus with value.

final a = 1.minus(1);  // 0
final b = 200.minus(50);  // 150

.ordinal

Returns an ordinal number of String type for any integer

final a = 1.ordinal();  // 1st
final b = 108.ordinal();  // 108th

double

.plus

Return double this plus with value.

final a = 1.0.plus(1.5);  // 2.5
final b = 200.5.plus(50.5);  // 251.0

.minus

Return double this minus with value.

final a = 1.5.minus(1.0);  // 0.5
final b = 200.5.minus(50.5);  // 150

String

.isEmail

Return boolean checks whether the String is a valid email.

final isEmail = 'example@gmail.com'.isEmail; // true
final isNotEmail = 'example@'.isEmail; // false

.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

.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

.isBlank

Returns true if this string is empty or consists solely of whitespace characters.

final notBlank = '   .'.isBlank; // false
final blank = '  '.isBlank; // true

.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

.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

.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

.isNotBlank

Returns true if this string is not empty and contains characters except whitespace characters.

final blank = '  '.isNotBlank; // false
final notBlank = '   .'.isNotBlank; // true

.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

.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

.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

.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

.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

.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!'

.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!'

.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

.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

.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

.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

.toUtf8()

Converts String to UTF-8 encoding.

final emptyString = ''.toUtf8(); // []
final hi = 'hi'.toUtf8(); // [104, 105]
final emoji = '😄'.toUtf8(); // [240, 159, 152, 132]

.toUtf16()

Converts String to UTF-16 encoding.

final emptyString = ''.toUtf16(); // []
final hi = 'hi'.toUtf16(); // [104, 105]
final emoji = '😄'.toUtf16(); // [55357, 56836]

.orEmpty()

Returns the string if it is not null, or the empty string otherwise.

String? nullableStr;
final str = nullableStr.orEmpty(); // ''

.matches()

Returns true if this char sequence matches the given regular expression.

print('as'.matches(RegExp('^.s\$'))) // true
print('mst'.matches(RegExp('^.s\$'))) // false

Iterable Num

.sum

Return int this plus with value.

final a = [50, 10, 40].sum();  // 100

.average

Return int this plus with value.

final a = [50, 10].average();  // 30.0

.median

Return int this plus with value.

final a = [1, 2, 3, 4, 5].median();  // 3
final b = [5, 4, 3, 2, 1].median();  // 3

Time utils

Morpheme extension 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;

Check out ⏰ time.dart for more information and examples.

Libraries

morpheme_extension