Utility

Platform Pub Package Test License: MIT Donate Issue Forks Stars

Utility provides functionality to improve dart code and make things faster and more easy.

If you find utility useful.

Table of Contents

Lets Get Started

1. Depend on it

Add this to your package's pubspec.yaml file:

dependencies:
  utility: 1.0.3

2. Install it

You can install packages from the command line:

with pub:

$  pub get

with Flutter:

$  flutter packages get

3. Import it

Now in your Dart code, you can use:

import 'package:utility/utility.dart';

Usage

List Operations

slice

Creates a slice of list from start up to endexclusive.

var list = [1, 2, 3, 4];

//It slices the list elements and hence modifies this list
list.slice(2); // list = [3, 4]

// Do not want to alter the list object ??
var list = [1, 2, 3, 4];

//It creates copy of list slices the list elements and creates new list
list.slice(2); // list = [3, 4]

removeFirst();

Removes items at 0 position in the list.

var list = <int>[1, 5, 2, 4];
var firstItem = list.removeFirst();
// altered list = [5, 2, 4];

random

returns random value from list. If list is empty then it returns null

var list = <int>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var randomValue = list.random(); // 3 // 3 will not be removed from list

// If remove = true is passed as argument then polled random item will be removed from list

// before list is
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

var randomValue list.random(remove: true); // 5
// after calling with remove = true
// [1, 2, 3, 4, 6, 7, 8, 9, 10]

// If secure = true is passed as argument then Random.secure() is used
var randomValue list.random(secure: true); // 5

isGrowable

returns true if it is Growable list otherwise false.

// On Non-Growable List
var list = List<dynamic>(8);
var isGrowable = list.isGrowable; // false

// On Growable List
var list2 = List<dynamic>();
var isGrowable = list2.isGrowable; // true

drop

removes n number of elements from the beginning of list

//If used as method, it directly alter the list's object
var list = <int>[1, 2, 3, 4, 5];
list.drop(); // list = [2, 3, 4, 5];

var list = <int>[1, 2, 3, 4, 5];
list.drop(3); // list = [4, 5];

var list = <int>[1, 2, 3];
list.drop(5); // list = []; // does not throw error :D

//If used as function,
//it creates a new copy of the output and list's object is untouched
var list = <int>[1, 2, 3, 4, 5];
var newObject = list.dropRight(); // newObject = [1, 2, 3, 4];

var list = <int>[1, 2, 3, 4, 5];
var newObject = list.dropRight(3); // newObject = [1, 2];

var list = <int>[1, 2, 3];
var newObject = list.dropRight(5); // newObject = []; // does not throw error :D

dropRight

removes n number of elements from the ending of list

//If used as method, it directly alter the list's object
var list = <int>[1, 2, 3, 4, 5];
list.dropRight(); // list = [1, 2, 3, 4];

var list = <int>[1, 2, 3, 4, 5];
list.dropRight(3); // list = [1, 2];

var list = <int>[1, 2, 3];
list.dropRight(5); // list = []; // does not throw error :D

//If used as function,
//it creates a new copy of the output and list's object is untouched
var list = <int>[1, 2, 3, 4, 5];
var newObject = list.dropRight(); // newObject = [1, 2, 3, 4];

var list = <int>[1, 2, 3, 4, 5];
var newObject = list.dropRight(3); // newObject = [1, 2];

var list = <int>[1, 2, 3];
var newObject = list.dropRight(5); // newObject = []; // does not throw error :D

dropRightWhile

starts removing elements from the ending of list until condition becomes false.

var list = <int>[2, 1, 3, 4, 5];
list.dropRightWhile((element) => element >= 3); // list = [2, 1];

dropWhile

starts removing elements from the starting of list until condition becomes false

var list = <int>[2, 1, 3, 4, 5];
list.dropWhile((element) => element <= 3); // list = [4, 5];

flatten

Flattens list a single level deep.

It returns newObject of flattened list and does not affects the list object called-upon

var list = [2, [1, 3], [4, [1, [2]] ] ];
var newList = list.flatten(); // newList = [2, 1, 3, 4, [1, [2] ] ];

flattenDepth

Recursively flatten list up to depth times.

It returns newObject of flattened list and does not affects the list object called-upon

var list = [2, [1, 3], [4, [1, [2]] ] ];
var newList = list.flattenDepth(1); // newList = [2, 1, 3, 4, [1, [2] ] ];

flatterDeep

Recursively flattens list.

It returns newObject of deeply flattened list and does not affects the list object called-upon.

var list = [2, [1, 3], [4, [1, [2]] ] ];
var newList = list.flattenDeep(); // newList = [2, 1, 3, 4, 1, 2];

chunk

Creates a new list of elements split into groups the length of size.

If list can't be split evenly, the final chunk will be the remaining elements.


// It returns new Object of Chunked data;
var list = ['a', 'b', 'c', 'd'];

var newChunkedList = list.chunk(3);// newChunkedList = [['a', 'b', 'c'], ['d']];

compact

Creates an list of elements where the values of the list are not Falsey.

Avoid calling it on fixed-length list.

//It alters the list object if the list is not fixed-length list.
var list = ['a', null, '', false, 'b'];
var compactedData = list.compact(); // ['a', 'b'];

//It returns new Object of compacted data;
var list = ['a', null, '', false, 'b'];
//here the list object is not altered
var compactedData_new_object = compact(list); // ['a', 'b'];

heapSort

Sorts the list in O(nLog(n)) time complexity.


var list = <int>[97, 4, 5, 26, 6];
// With `inPlace` set to `false` it returns new sorted list.
var newSortedList = list.heapSort(inPlace: false);
// newSortedList = [4, 5, 6, 26, 97];

var list = <int>[97, 04, 5, 26, 6];
// With `inPlace` set to `true (default)` it sorts the list in its place.
list.heapSort(); // list = [4, 5, 6, 26, 97];

Number Operations

>>> (mimic)

As dart don't have >>>. So to achieve functionality of >>> a mimic can be used.

// 20 >>> 3 = 6
var value = 20.zeroFillRightShift(3); // value = 6

zeroFillRightShift(int number, int amount)

As operator >>> is not available in dart, So zeroFillRightShift function helps to mimics the working of >>>.

// var t = 20 >>> 3;
var t = zeroFillRightShift(20, 3); // 6

// Thus above function helps to provide operation of `>>>`

// 20 >>> 3 = 6
var value = 20.zeroFillRightShift(3); // value = 6

xor

It returns xor operation.

// 20 ^ 3 = 23
var value = 20.xor(3); // value = 23

divide

It returns quotient as integer on divison.

// ( In Python ) -> [20 // 10 = 2]
// ( In Dart )   -> [20 / 10 = 2.0] (oops) :p

// But we need 2 as result.
var value = 20.divide(10);       // value = 2
var value = 20.divide(10.0);     // value = 2
var value = (20.0).divide(10);   // value = 2
var value = (20.0).divide(10.0); // value = 2
var dividend = 20;
var divisor = 10;
var value = dividend.divide(divisor); // value = 2

String Operations

slice

Creates a slice of string from start up to, but not including, end.

var string = '__justkawal;

// It slices the string and returns modified string
var slicedString string.slice(2); // slicedString = 'justkawal';

enumVal

Returns the value of the enum

enum justkawal {
  just,
  kawal,
}
'${justkawal.just}'.enumVal; // just
'${justkawal.kawal}'.enumVal; // kawal

toNumber

Returns converted number

'2604 '.toNumber; // 2604
'  26.04 '.toNumber; // 26.04

count

Counts and returns the number of occurrences of value.

'justkawal'.count('a');       // 2
'justkawal'.count('just');    // 1
'justkawal'.count('flutter'); // 0

isNumber

Returns true, if the string is number other-wise false

'123'.isNumber; // true
'justkawal'.isNumber; // false

isBinary

Returns true if the string is binary, other-wise false

'1010'.isBinary; // true
'justkawal'.isBinary; // false

isDecimal

Returns true if the string is decimal, other-wise false

'123'.isDecimal; // true
'justkawal'.isDecimal; // false

isOctal

Returns true if the string is octal, other-wise false

'123'.isOctal; // true
'justkawal'.isOctal; // false

isHex

Returns true if the string is good hex, other-wise false

'123'.isHex; // true
'justkawal'.isHex; // false

deburr

Converts string from Latin-1 to normal basic latin letters.

'hey kàwàl'.deburr; // hey kawal

unicodeWords

Returns list of unicode words from the string.

'hey kàwàl'.unicodeWords; // [kàwàl]

asciiWords

Returns list of ascii words from the string.

'hey kàwàl'.asciiWords; // [hey]

hasUnicodeWord

Returns true if string contains any occurence of unicode word other-wise false.

'hey kàwàl'.hasUnicodeWord; // true
'hey'.hasUnicodeWord;      // false

capitalize

Converts the first character of string to upper case and the remaining to lower case.

'justkawal'.capitalize; // Justkawal
'JUSTKAWAL'.capitalize; // Justkawal

lowerFirst

Converts the first character of string to lower case.

'Justkawal'.lowerFirst; // justkawal
'JUSTKAWAL'.lowerFirst; // jUSTKAWAL

upperFirst

Converts the first character of string to upper case.

'justkawal'.upperFirst; // Justkawal
'jUSTKAWAL'.upperFirst; // JUSTKAWAL

words

Returns list of words

'kàwàl vu'.words; // ['kàwàl', 'vu']

Case Conversions

camelCase

Converts the string to camelCase and returns it.

'___just__kawal__'.camelCase; // justKawal
'  just  Kawal  '.camelCase; // justKawal
'-----just--Kawal--'.camelCase; // justKawal

kebabCase

Converts the string to kebabCase and returns it.

'___hello__world__'.kebabCase(); // hello-world
'  hello  World  '.kebabCase(); // hello-world
'-----hello--world--'.kebabCase(); // hello-world

lowerCase

Converts the string to lowerCase and returns it.

'___hello__world__'.lowerCase(); // hello world
'  hello  World  '.lowerCase(); // hello world
'-----hello--world--'.lowerCase(); // hello world

snakeCase

Converts the string to snakeCase and returns it.

'___hello__world__'.snakeCase(); // hello_world
'  helloWorld  '.snakeCase(); // hello_world
'-----hello--world--'.snakeCase(); // hello_world

nameCase

Converts the string to nameCase and returns it.

'___kaWaljeet__sInGH__'.nameCase(); // Kawaljeet Singh
'  justKawal  '.nameCase(); // Just Kawal
'-----kawaljeet--singh--'.nameCase(); // Kawaljeet Singh

repeat

Returns repeated string, n number of times

'justkawal'.repeat(1); // justkawal
'123'.repeat(2); // 123123
'1'.repeat(5); // 11111

pad

Pads the string on the left and right sides if it's shorter than length.

Padding characters will be truncated if they can't be evenly divided by length.

var pad1 = 'abc'.pad(8); // '  abc   '

var pad2 = 'abc'.pad(8, '=_'); // '=_abc=_='

var pad3 = 'abc'.pad(3); // 'abc'

Features coming in next version

On-going implementation for future:

  • Some more Functions

Libraries

utility