Flutter函数类型定义插件func_types的使用
Flutter函数类型定义插件func_types的使用
提供了用于Dart的功能类型。
为什么应该使用这个库? 有许多库提供功能类型,但它们提供了太多的方法来规避对值的安全处理。此库通过明确标记可能导致异常的操作为“不安全”,来强制执行对值的安全处理。
重要事项
这是一个预发布版本,公共API可能会更改。
特性
提供了以下类型:
- ✅ Option
- ✅ Either
- ✅ Result
- ExTrace(Exception/错误和StackTrace的包装器)
还为上述类型的Iterable提供了扩展函数。
开始使用
更多示例可以在git仓库的example文件夹中找到。
使用方法
Option
void main(List<String>? nullableArgs) {
final maybeArgs = Option.of(nullableArgs);
// 匹配两种情况
maybeArgs.match(
onSome: (args) => print('Arguments were provided'),
onNone: () => print('Missing arguments'));
// 仅匹配非空值
maybeArgs.ifSome((args) => print('Arguments were provided'));
// 异步
() async {
await maybeArgs
.ifSomeAsync((args) async => print('Arguments were provided'));
}();
// 仅匹配空值
maybeArgs.ifNone(() => print('Missing arguments'));
// 异步
() async {
await maybeArgs.ifNoneAsync(() async => print('Missing arguments'));
}();
// 安全获取内部值
maybeArgs.get(List.empty());
// 使用函数
maybeArgs.getOr(() => List.empty());
// 异步
() async {
await maybeArgs.getOrAsync(() async => List.empty());
}();
}
Either
void main() {
final num = one();
// 匹配两种情况
num.match(
onLeft: (oneStr) {
print(oneStr.runtimeType == String);
},
onRight: (oneInt) {
print(oneInt.runtimeType == int);
}
);
// 仅匹配左值
num.ifLeft((left) => print(left.runtimeType == String));
// 异步
() {
num.ifLeftAsync((left) async => print(left.runtimeType == String));
}();
// 安全获取左值
num.left("2");
// 使用函数
num.leftOr(() => "2");
// 异步
() async {
await num.leftOrAsync(() async => "2");
}();
// 对右值进行相同操作
}
Either<String, int> one() {
return Either.left("1");
}
Result
String failing() {
throw Exception();
}
void main() {
final stringResult = Result.tryCatch(() => failing());
// 匹配两种情况
stringResult.match(
onOk: (okStr) => print(okStr),
onErr: (err) => print("${err.ex}: ${err.stackTrace}"),
);
// 仅匹配成功值
stringResult.ifOk((str) => print(str));
// 异步
() async {
await stringResult.ifOkAsync((str) async => print(str));
}();
// 仅匹配错误值
stringResult.ifErr((err) => print(err));
// 异步
() async {
await stringResult.ifErrAsync((err) async => print(err));
}();
// 安全获取成功值
stringResult.ok("2");
// 使用函数
stringResult.okOr(() => "2");
// 异步
() async {
await stringResult.okOrAsync(() async => "2");
}();
// 安全获取错误值
stringResult.err(ExTrace(Exception(), StackTrace.current));
// 使用函数
stringResult.errOr(() => ExTrace(Exception(), StackTrace.current));
// 异步
() async {
await stringResult
.errOrAsync(() async => ExTrace(Exception(), StackTrace.current));
}();
}
更多关于Flutter函数类型定义插件func_types的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter函数类型定义插件func_types的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,func_types 是一个用于定义和操作函数类型的插件。它可以帮助你更好地管理函数类型,使得代码更加清晰和类型安全。以下是如何使用 func_types 插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml 文件中添加 func_types 插件的依赖:
dependencies:
flutter:
sdk: flutter
func_types: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get 来获取依赖。
2. 导入包
在你的 Dart 文件中导入 func_types 包:
import 'package:func_types/func_types.dart';
3. 定义函数类型
func_types 允许你定义和使用函数类型。例如,你可以定义一个接受两个整数并返回一个整数的函数类型:
typedef IntFunction = Func2<int, int, int>;
这里 Func2 表示一个接受两个参数并返回一个值的函数类型。Func2 的泛型参数分别表示第一个参数类型、第二个参数类型和返回值类型。
4. 使用函数类型
你可以像使用普通函数类型一样使用 IntFunction:
IntFunction add = (int a, int b) => a + b;
void main() {
print(add(2, 3)); // 输出: 5
}
5. 高阶函数
func_types 还支持高阶函数的定义和使用。例如,你可以定义一个接受 IntFunction 作为参数的函数:
int operate(int a, int b, IntFunction func) {
return func(a, b);
}
void main() {
print(operate(2, 3, add)); // 输出: 5
}
6. 其他函数类型
func_types 提供了 Func0 到 Func9 来支持不同参数数量的函数类型。例如:
Func0<R>: 无参数函数,返回类型为R。Func1<A, R>: 接受一个A类型参数,返回类型为R。Func2<A, B, R>: 接受两个参数A和B,返回类型为R。- 依此类推,直到
Func9。
7. 函数组合
func_types 还支持函数组合。例如,你可以将两个函数组合在一起:
Func1<int, int> increment = (int x) => x + 1;
Func1<int, int> square = (int x) => x * x;
void main() {
var composed = compose(square, increment);
print(composed(3)); // 输出: 16 (先递增,再平方)
}

