xservice_kit yaml使用
xservice_kit 的功能是管理channel通信,详细介绍之后开篇再讲,接上一篇,这篇主要介绍使用:官方文档 里面有介绍、集成说明、使用文档、原理介绍,如果看完明白了,就没必要往下看你啦。
Xservice的优势:
• 统一标准化配置
• 一份配置三端代码生成,告别重复手写代码工作。
• 消息类型显示指定,方便消息定义和调用,增加类型安全性。
• 方便支持双向一对一,一对多消息代码生成。
• 自定义消息过滤支持,防止自定义类型序列化过程中的异常。
看完是不是很心动呐,安装介绍pub文档即可,里面有详细说明。在使用的过程中 yaml的生成规则,感觉描述的不是很清楚,接下来结合yaml自动生成channel三端代码,介绍一下自己理解的Xservice使用。
Xservice的使用步骤官方文档给出如下:
• 在Flutter工程pubspec.yaml加入xservice_kit依赖: xservice_kit:^0.0.27
• 安装node(代码生成工具使用node开发),然后npm install xservice -g
• 编写配置文件
• 运行xservice命令行生成代码
• 将生成代码移动到项目,然后在程序的开始调用Serviceloader
前两步自行安装即可。
编写配置文件:
先给自己编写的yaml文件
name : TestService
messages:
-
name : MessageToFlutter
returnType : Map
messageType : native
channelType : method
args :
-
name : url
type : String
-
name : params
type : Map
-
name : MessageToNative
returnType : Map
messageType : flutter
channelType : method
args :
-
name : params
type : List
下面针对配置参数介绍下:
name : TestService // 自定义Service名字
messages:
-
name : MessageToFlutter // NA调用的Flutter方法名
returnType : Map // 返回数据类型
messageType : native // 在native侧生成的代码
channelType : method // Channel类型
args :
-
name : MessageToFlutterArg1 // 参数名字
type : String // 参数类型
- // - 要缩进对齐,格式有要求
name : MessageToFlutterArg2 // 参数名字
type : Map // 参数类型
// 以上有俩参数 一个是字典一个是string 则native侧会创建一个【字典】包装俩参数。
// 只有一个参数时,type为什么类型,参数即是什么类型,如下:List在Android侧对应的
args :
-
name : MessageToFlutterArg1
type : List
Type 支持的数据类型如下:
"int":"0",
"double":"0.0",
"bool":"false",
"String":'""',
"List”:"[]"
"Map”:"{}"
运行xservice命令行生成代码
命令如下:
xservice -o flutterService -p channel -t yaml /Users/whqfor/Desktop/ServicesYaml
在/usr/local/lib/node_modules/xservice/index.js
这个文件里可以找到生成channel代码的逻辑,这里只做简单解读:
先介绍命令里的参数
.arguments('<directory>')
.option('-o , --output <output>' , 'A directory to save the output')
.option('-t , --type <type>' , 'input file type support json and yaml default is json')
.option('-p , --package <package>' , 'Java package')
.action(function(directory){
program.directory = directory;
start(directory);
}).parse(process.argv);
这一段是index.js 里的命令解释,结合自己的使用说明一下,
-o flutterService
定义输出的路径,默认是在用户目录下,命令执行完之后,生成的三端代码会存放在这里。
-p channel
主要是给Android小伙伴使用,Android的package 路径里添加的例如:
package channel.TestService.handlers;
目录结构和package是对应的的,如下:
-t yaml
配置文件的类型,推荐yaml格式,也支持json格式
/Users/whqfor/Desktop/ServicesYaml
存放yaml文件的地址
执行完生成的结构如下:
最后将生成的文件拷贝到项目里即可,iOS的拷贝打开iOS工程,copy if need,Android和dart的代码可以直接拖到项目里。