Flutter插件flechette的使用方法详解

Flutter插件flechette的使用方法详解

该插件包括以下功能:

  • 通用辅助类,如元组(tuple)和结果(result)。
  • 类似Scala的集合API。例如:groupByzipWithIndexsliding(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

回到顶部