Flutter JSON-RPC代码生成插件json_rpc_codegen的使用
Flutter JSON-RPC代码生成插件json_rpc_codegen的使用
安装
作为构建包,你需要安装注解和 build_runner:
dependencies:
json_rpc_codegen: ^latest
dev_dependencies:
build_runner: ^latest
json_rpc_codegen_builder: ^latest
使用
API 使用非常基础。你创建一个抽象的 Dart 类来描述接口,代码生成器会为你完成其余的工作。
import 'package:json_rpc_codegen/json_rpc_codegen.dart';
part 'my_class.g.dart';
enum Stage { all, pre, post }
@jsonRpc
abstract class _MyClass {
void startServerTask({
required int id,
required String taskName,
bool verbose = false,
double? scale,
});
@clientDefaults
double getProgress(int id, [Stage stage = Stage.all]);
}
这将为客户端和 服务器生成大量的代码。查看文档以了解如何控制哪些类会被生成。 默认情况下,以下内容将会被生成:
MyClassClientMixin
: 一个 Mixin,它在ClientBase
类上包含了接口的所有客户端实现。MyClassServerMixin
: 一个 Mixin,在ServerBase
类上包含了接口的所有服务器实现。MyClassClient
: 一个使用MyClassClientMixin
的的类,可以直接使用。MyClassServer
: 一个使用MyClassServerMixin
的的类,可以直接使用。
在大多数情况下,你会直接使用 MyClassClient
和 MyClassServer
。 如果你想将多个接口组合成一个,或者如果你正在处理 Peer,你可以使用 mixins。
以下是生成后的代码示例:
class MyClassClient {
void startServerTask({
required int id,
required String taskName,
// 所有可选参数都是 nullable,因为默认值由服务器管理
bool? verbose,
double? scale,
});
// 非空方法变为等待结果的 Future
Future<double> getProgress(
int id, [
// 客户端默认设置在客户端
Stage stage = Stage.all,
]);
}
// 服务器是抽象的,因为你需要实现服务器方法的逻辑
abstract class MyClassServer {
// 所有服务器方法使用 FutureOr 并且可以是同步或异步
[@protected](/user/protected)
FutureOr<void> startServerTask(
int id,
String taskName,
// 服务器默认设置由实现决定
bool verbose,
double? scale,
);
[@protected](/user/protected)
FutureOr<double> getProgress(
int id,
// 客户端默认设置在服务器
Stage stage,
);
}
更多关于Flutter JSON-RPC代码生成插件json_rpc_codegen的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复