useful_extension 1.0.2+4
useful_extension: ^1.0.2+4 copied to clipboard
Integrate other language code style to extensions.
useful_extension #
Integrate other languages (like Java and Kotlin) code style to extensions.
Java Util Function Extension #
| Dart Class | Java Class | Dart Prototype |
|---|---|---|
| Consumer<T> | Consumer<T> | void Function(T) |
| Predicate<T> | Predicate<T> | bool Function(T) |
| Action | Action | void Function() |
| Supplier<R> | Supplier<R> | R Function() |
| Transformer<T, R> | Function<T, R> | R Function(T) |
| BiConsumer<T, U> | BiConsumer<T, U> | void Function(T, U) |
| BiPredicate<T, U> | BiPredicate<T, U> | bool Function(T, U) |
| BiTransformer<T, U, R> | BiFunction<T, U, R> | R Function(T, U) |
Kotlin Style Extension #
| Operator | Parameter | Returns |
|---|---|---|
| let | self | self |
| apply | - | self |
| also | self | R |
| run | - | R |
Simple Usage #
String name = null;
name?.let((it){
print("it=$it");
});
Because
nameis null, soletnot execute.
String name = "Hello";
name?.let((it){
print("it=$it");
});
Because
nameis not null, so outputs "it=Hello".
Use to Initialize Instance
By cascade style
People john = People()
..name = "John"
..age = 18;
By let operator
People john = People().let((it) {
it.name = "John";
it.age = 18;
});
Operator Chains
100.also((it) => it * it)
.also((it) => it.toString())
.also((it) => double.parse(it))
.let((it) => print("result=$it"));
Functions Invocation
You can call invoke to execute a Function.
Dart style Function execution
Function func = () => print("Execute");
func();
Use invoke instead of Dart style execution
Function func = () => print("Execute");
func.invoke();
Use invoke and let to Simplified Null Safety Style
Dart style Function null safety
Function func = null;
if(func != null) func();
Instead of invoke and let style
Function func = null;
func?.invoke();
invoke also Supports Parameters and Returns
Parameters and returns will auto transform and keep type-safe.
typedef Func1 = bool Function(String s, int i);
typedef Func2 = String Function(int i);
Func1 func1 = null;
bool result1 = func1?.invoke("String", 100);
Func2 func2 = null;
String result2 = func2?.invoke(100);
func2?.invoke(true); /// compile error
bool r = func2?.invoke(100); /// compile errpr
Kotlin Collection Extension #
Iterable<E> #
Properties
| Property | Type | R/W |
|---|
| lastIndex | int | R |
|---|
| - | - | - |
|---|
Methods
| Return Type | Method |
|---|---|
| Iterable<IndexedValue> | withIndex() |
| Iterable<E> | whereNot(bool test(E element)) |
| Iterable<int> | indexes() |
| E | elementAtOr(int index, [E defaultValue = null]) |
| E | firstOr([E defaultValue = null]) |
| E | lastOr([E defaultValue = null]) |
Dart Basic Extension #
Operator cast #
Use cast instead of as to make chain style.
dynamic o = "Hello";
(o as String).length;
o.cast<String>().length;
((o as String) as String).length;
o.cast<String>().cast<String>().length;