引言
当下使用 flutter 作为技术栈开发的公司越来越多,场景越来越繁杂。小编在业务中使用 flutter 开发了一个连接电子秤的 flutter 库,适用于 Android、Windows 平台。flutter-package 已发布到 pub,实现代码已开源。
- pub 地址:https://pub.dev/packages/flutter_weigh_serial
- github 开源:https://github.com/liyufengrex/flutter_weigh_serial
使用须知
flutter_weigh_serial 该库支持串口方式连接(包括usb转串口)的电子称重设备。
注意:Windows 平台使用该库,仍需要在 Windows 设备上安装电子秤对应的串口驱动,否则搜索不到对应设备串口。
使用方式
- 添加依赖
dependencies:
flutter_weigh_serial: ^1.0.0+1
- 提供 api
- 搜索并连接称重器
- 监听称重器数据返回(返回数据模型
WeighResult
) - 断开称重器
示例代码如下:
import 'package:flutter_weigh_serial/flutter_weigh_serial.dart';
class _MyAppState extends State<MyApp> {
late WeighSerialProvider weighSerialProvider;
@override
void initState() {
super.initState();
weighSerialProvider = WeighSerialProvider();
}
@override
void dispose() {
weighSerialProvider.close(); //退出页面时断开连接
super.dispose();
}
...
// 连接称重设备的方法如下:
void _connectWeigh() {
weighSerialProvider.findAndConnect().then(
(success) {
if (success) {
//搜索到称重设备并连接成功
weighSerialProvider.weighListener?.listen(
(data) {
// 获取到称重数据,返回数据模型 *WeighResult*
log('称重数据 - ${data.toMap().toString()}');
},
);
} else {
Fluttertoast.showToast(msg: '称重设备连接失败');
}
},
onError: (e) {
Fluttertoast.showToast(msg: '称重设备连接失败(${e.toString()})');
},
);
}
}
- 称重返回的模型数据 WeighResult 结构如下:
class WeighResult {
/// 重量 单位是kg
final double weight;
/// 结果是否稳定 稳定:true 不稳定: false
final bool isStable;
}
支持扩展
flutter_weigh_serial
库内根据设备的 vId、pId 内置了一组称重设备的白名单,配置在 WeighSerialConfig
中,如下所示:
// vId - pId
static Map<int, List<int>> weighDeviceList = {
1027: [
24577,
24592,
24593,
24596,
24597,
],
4292: [
60000,
60016,
60017,
],
1659: [
8963,
9123,
9139,
9155,
9171,
9187,
9203,
],
6790: [
21795,
29987,
21972,
],
9025: [],
5824: [1155],
1003: [8260],
7855: [4],
3368: [516],
1155: [22336],
11914: [
5,
10,
],
};
当连接设备的 vId、pId 包含在上述组合内时,即认为是称重设备,可以连接并读取数据。
支持使用者自行扩展未在配置中的称重设备,示例如下:
//示例,扩展 vId 为 1111, pId 为 1234,1235 的称重设备
WeighSerialConfig.weighDeviceList[1111] = [1234,1235];
demo - 效果示例
具体的 demo 实现可参考: https://github.com/liyufengrex/flutter_weigh_serial