在 flutter 中如何优雅的实现:电子秤连接、数据获取(适配Android、Windows)

引言

当下使用 flutter 作为技术栈开发的公司越来越多,场景越来越繁杂。小编在业务中使用 flutter 开发了一个连接电子秤的 flutter 库,适用于 Android、Windows 平台。flutter-package 已发布到 pub,实现代码已开源。

使用须知

flutter_weigh_serial 该库支持串口方式连接(包括usb转串口)的电子称重设备。

注意:Windows 平台使用该库,仍需要在 Windows 设备上安装电子秤对应的串口驱动,否则搜索不到对应设备串口。

使用方式

  • 添加依赖
dart 复制代码
dependencies:
  flutter_weigh_serial: ^1.0.0+1
  • 提供 api
  1. 搜索并连接称重器
  2. 监听称重器数据返回(返回数据模型 WeighResult )
  3. 断开称重器

示例代码如下:

dart 复制代码
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 结构如下:
dart 复制代码
class WeighResult {
  /// 重量  单位是kg
  final double weight;

  /// 结果是否稳定  稳定:true  不稳定: false
  final bool isStable;
}

支持扩展

flutter_weigh_serial 库内根据设备的 vId、pId 内置了一组称重设备的白名单,配置在 WeighSerialConfig 中,如下所示:

dart 复制代码
// 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 包含在上述组合内时,即认为是称重设备,可以连接并读取数据。

  • 支持使用者自行扩展未在配置中的称重设备,示例如下:

dart 复制代码
//示例,扩展 vId 为 1111, pId 为 1234,1235 的称重设备
WeighSerialConfig.weighDeviceList[1111] = [1234,1235];

demo - 效果示例

具体的 demo 实现可参考: github.com/liyufengrex...

相关推荐
陈随易1 小时前
bm2,Node.js 与 Bun 项目部署新选择
前端·后端·程序员
福兮说2 小时前
canvas 旋转图片的六个坑:四角被裁、Math.ceil 多出 1px 黑边、JPG 角发黑、翻转方向反了
前端·javascript·图像处理·canvas
传人once4 小时前
多图片上传预览功能如何写
前端·css·html·jquery·html5
传奇开心果编程4 小时前
【现代声明式UI学与练】第7课 组件通信——父传子、子传父、跨层级通信、状态提升与 Context
学习·flutter·react native·ui·swiftui·android jetpack
Eric.464 小时前
Wan‑Animate+MiniMax-H3 本地部署 AI 漫剧流水线:8G 显存动作迁移与动态分镜工程实战
前端·人工智能·comfyui·ai漫剧
库拉镜像AI牛牛6 小时前
短剧内容自动化生产:知漫剧工作室落地教程
大数据·服务器·前端·人工智能·语音识别
律宏阔6 小时前
Flutter 列表图片内存优化:CachedNetworkImage 与 ClipRRect 的取舍
前端·flutter
行者全栈架构师6 小时前
【鸿蒙心迹】相册文搜图工程化落地:HarmonyOS 7.0 端侧 AI 检索全链路实战与 5 个踩坑解法
前端
律宏阔6 小时前
Dart 3 Record:解决 Future.wait 异构返回值的类型问题
前端·flutter
Seraphina366 小时前
DVWA(XSS Reflected/Stored High,CSRF Low)
前端·xss·csrf