Flutter插件flechette的使用方法详解
Flutter插件flechette的使用方法详解
该插件包括以下功能:
- 通用辅助类,如元组(tuple)和结果(result)。
- 类似Scala的集合API。例如:
groupBy
,zipWithIndex
,sliding(n)
,fold
。
flechette/struct
结果(Result)
final success = Result.success(1);
final failure = Result<T>.failure('error key', 'error message');
success.isSuccess // => true;
failure.isSuccess // => false;
success.map((s) => s * 2); // => Result.success(2);
success.flatMap((s) => Result.success('100')); // => Result.success('100');
success.flatMap((s) => Result.failure(...)); // => Result.failure(...);
元组(Tuple)
final tpl = $(1, 'a'); // 创建元组
tpl.$0 // => 1
tpl.$1 // => 'a'
tpl.swap(); // => ('a', 1);
tpl.mapN((l, r) => T); // => T
flechette/syntax
集合/可迭代对象(Iterable)
final l = [1, 2, 3, 4, 5];
l.zipWithIndex // => [(1,0), (2,1), (3,2), (4,3), (5,4)]
l.slide // => [(1,2), (2,3), (3,4), (4,5)]
[1, 2, 3, 4, 5, 6, 7].sliding(4) // => [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7]];
l.zip(['a', 'b', 'c', 'd', 'e']); // => [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e')]
l.intersect(-1) // => [1, -1, 2, -1, 3, -1, 4, -1, 5];
flatmap(iterable)
import 'package:flechette/syntax/flatmap_iterable.dart';
final l = [1, 2, 3, 4, 5].flatMap((e) => Iterable<int>.generate(e)); // => [0, 0, 1, 0, 1, 2, ...];
集合/映射(Map)
final map = {'a': 1, 'b': 2, 'c': 3};
map.updateWith(key)((v) => v == null ? 'newItem' : '$v already exists');
可选值(Optional)
final T? t = ???;
t
.map((a) => b)
.filter((b) => cond(b))
.getOrElse(() => els);
const int? a = 1;
const int? b = null;
a.fold(() => 'none!')((e) => (e * 100).toString()); // => '100'
b.fold(() => 'none!')((e) => (e * 100).toString()); // => 'none!'
import 'package:flechette/syntax/flatmap_optional.dart';
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].flatMap((e) => e % 2 == 0 ? e : null); // => [2, 4, 6, 8, 10];
dart/core
DateTimeX.attemptParse('...'); // => Result<DateTime>
UriX.attemptParse('...'); // => Result<DateTime>
完整示例Demo
import 'package:flechette/flechette.dart';
// 忽略打印
void main() {
final m = [1, 2, 3, 4, 5, 6]
.groupBy((p0) => p0 % 2 == 0)
.updateWith(true)((maybe) => maybe.flatMap((e) => e.map((e) => e * 2)));
// => {true: [4, 8, 12], false: [1, 3, 5]};
final l = [1, 2, 3, 4, 5].slide().map((e) => e.swap());
// => [($<int, int>(2, 1), $<int, int>(3, 2), $<int, int>(4, 3), $<int, int>(5, 4))];
final s = [1, 2, 3, 4, 5].flatten();
// => [1, 2, 3, 4, 5];
final n = [1, null, 2, null, 3].flatten();
// => [1, 2, 3];
final z = [1, 2, 3, 4, 5].zip(['a', 'b', 'c']);
// => [(1, a), (2, b), (3, c)];
print(m);
print(l);
print(s);
print(n);
print(z);
}
更多关于Flutter插件flechette的使用方法详解的实战教程也可以访问 https://www.itying.com/category-92-b0.html