Charge-ScanItem
作用ScanItem是蓝牙扫描结果的封装模型。它的职责是把 FlutterBluePlus 的ScanResult系统级扫描结果转换成你业务中使用的ScanItem业务级设备模型。类比理解FlutterBluePlus.ScanResult → 原始数据像生肉 ScanItem → 加工后的数据像熟食定义属性var _deviceMac ;//设备MAC地址 var _bleName ; //设备蓝牙名称 var _rssi -1; //信号强度 late BluetoothDevice device; //原始蓝牙设备对象 bool _isValidity false; //设备是否有效是否通过验证getter/setter// ✅ 标准的 getter对外暴露只读属性 int get rssi _rssi; String get deviceMac _deviceMac; String get bleName _bleName; String get address device.remoteId.str; // ⭐ 直接从 device 获取 bool get isValidity _isValidity; // ⭐ 特殊的 setter允许外部修改 RSSI set rssi(int value) { _rssi value; }构造函数1手动创建ScanItem.from({ required String name, required String deviceMac }) { _bleName name; _deviceMac deviceMac; } //作用用于手动构造ScanItem(比如从缓存中恢复) 为什么从缓存中恢复只需要MAC地址和名字构造函数2从扫描结构解析ScanItem(ScanResult result) { _rssi result.rssi; device result.device; _bleName result.device.platformName; // 遍历制造商数据 result.advertisementData.manufacturerData.forEach((key, value) { if(key 1602) { // 这里可以解析厂商自定义数据 } }); }代码示例import package:flutter_blue_plus/flutter_blue_plus.dart; ///蓝牙设备类 class ScanItem{ ///设备MAC地址 var _deviceMac ; ///设备名字 var _bleName ; //信号强度 var _rssi -1; late BluetoothDevice device; bool _isValidity false; //get方法 int get rssi _rssi; String get deviceMac _deviceMac; String get bleName _bleName; String get address device.remoteId.str; bool get isValidity _isValidity; //set方法 set rssi(int value) { _rssi value; } //构造函数1 ScanItem.from({ required String name, required String deviceMac }) { _bleName name; _deviceMac deviceMac; } //构造函数2-从扫描结果解析 ScanItem(ScanResult result) { //注意这里的是 ScanResult _rssi result.rssi; device result.device; _bleName result.device.platformName; //遍历厂商数据 //这个厂商数据需要后期重新协定 //苹果手机扫描不出来mac地址所以需要根据协定 //mac地址安全验证是否连接设备电量是否在充电等等都需要协议协定 result.advertisementData.manufacturerData.forEach((key, value) { if(key 1602 ) { } }); } }