作用
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 ) { } }); } }