Flutter Packages & Plugins(三)
在前两篇中我们分别学习了package的从创建到发布流程和Android平台的实现原理,这一篇我将结合实际工作实践插件开发。
在pub平台上,目前已经有大量可供Flutterk开发使用的库,例如可供网络请求的dio
,用于json解析的json_annotation
,json_serializable
,xml解析的xml
库,以及toast
、path_provider
等,能够满足我们的开发需求,但对于实现我们公司自己的相关业务,仍旧需要我们自己封装,gprs_convert
和xdja_bridge
就是为了解决该问题而开发的。
1. gprs_convert
做过警务通的同学应该都知道jwt gprs server协议,在之前的项目中我们封装了java层对该协议的支持,如果使用Flutter开发警务通项目,就不可避免的需要使用到该协议,这时候如果继续使用java层的代码就不合适了,因此我做了dart层的实现,可以完成从dart对象到xml字符串的转换和从xml字符串到dart对象的解析。
下面是最常用的查询协议的实现
具体使用1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28Future<QueryResponse> queryTest() async {
QueryResponse queryResponse;
try {
QueryRequest queryRequest = QueryRequest();
queryRequest.appKey = '123';
queryRequest.reqDigest = '交通管理';
queryRequest.sessionID = Globals.loginResponse?.sessionID;
queryRequest.beginNo = '1';
// queryRequest.reqType = 'zhcx_czrk';
// queryRequest.addCondition('c_xm', '李刚',
// relation: RelationCharExpression.rightLike);
queryRequest.reqType = 'dxcx_czrk';
queryRequest.addCondition('c_sfzh', '410185198701281039');
// var request = queryRequest.buildXml();
var request = GprsConvert.convertToXml(queryRequest);
print('request:$request');
var response =
await Bridge.gprsServerRequest("192.168.20.152", "2003", request);
// var response = await rootBundle.loadString('data/query_response.xml');
print('response:$response');
// var queryRespon = QueryResponse.parseXml(response);
queryResponse = GprsConvert.parseXml(response, QueryResponse());
print(queryResponse.type);
} on PlatformException catch (e, s) {
print('Stack trace:\n ${e.message}');
}
return queryResponse;
}
2. xdja_bridge
xdja_bride是针对统一认证获取票据、获取安全卡id、执行socket请求的封装。
2.1 dart层
2.2 android层
1 | private fun getSafeCardId(Result) result: { |
3. 问题和思考
在Android平台经过常年的积累,我们已经有大量的公共组件,一时想用flutter来进行实际项目的开发,仍会面临很多的问题,例如我demo中使用socket进行网络请求,而警务通也有更多的项目对接到服务总线,对警务通常用的UI组件仍旧缺失,仍需大量的工作。
从长远来看,flutter对跨平台的支持越来越完善,如果我们能充分利用现有的开发人员,完善相关平台插件的开发,例如统一认证桌面端和android端,安全卡操作相关的业务,未来我们完全可以实现一套代码各个平台运行,缩短项目的使用周期,实现更高的工作效率。

...
...
This is copyright.