getPrinters method
void
getPrinters({
- Duration refreshDuration = const Duration(seconds: 5),
- List<
ConnectionType> connectionTypes = const [ConnectionType.BLE, ConnectionType.USB],
Implementation
void getPrinters({
Duration refreshDuration = const Duration(seconds: 5),
List<ConnectionType> connectionTypes = const [
ConnectionType.BLE,
ConnectionType.USB,
],
}) async {
if (connectionTypes.isEmpty) {
return;
}
if (refresher != null) {
refresher?.cancel();
refresher = null;
}
List<Printer> btlist = [];
if (connectionTypes.contains(ConnectionType.BLE)) {
if (subscription != null) {
subscription?.cancel();
subscription = null;
}
await FlutterBluePlus.stopScan();
await FlutterBluePlus.startScan();
final systemDevices = (await FlutterBluePlus.systemDevices([]))
.map((e) => Printer(
address: e.remoteId.str,
name: e.platformName,
connectionType: ConnectionType.BLE,
isConnected: e.isConnected,
))
.toList();
btlist.addAll(systemDevices);
if (Platform.isAndroid) {
// Bonded devices
final bondedDevices = (await FlutterBluePlus.bondedDevices)
.map((e) => Printer(
address: e.remoteId.str,
name: e.platformName,
connectionType: ConnectionType.BLE,
isConnected: e.isConnected,
))
.toList();
btlist.addAll(bondedDevices);
}
log('Scanning for BLE devices');
subscription = FlutterBluePlus.scanResults.listen((device) {
final devices = device.map(
(e) {
return Printer(
address: e.device.remoteId.str,
name: e.device.platformName,
connectionType: ConnectionType.BLE,
isConnected: e.device.isConnected,
);
},
).toList();
devices.removeWhere(
(element) => element.name == null || element.name == '',
);
// If the device is already in the list, update it
for (var e in devices) {
final index = btlist.indexWhere((i) => i.address == e.address);
if (index < 0) {
btlist.add(e);
} else {
btlist[index] = e;
}
}
});
}
List<Printer> list = [];
if (connectionTypes.contains(ConnectionType.USB)) {
_usbSubscription?.cancel();
_usbSubscription =
Stream.periodic(refreshDuration, (x) => x).listen((event) async {
final devices =
await FlutterThermalPrinterPlatform.instance.startUsbScan();
List<Printer> templist = [];
for (var e in devices) {
final map =
Map<String, dynamic>.from(e is String ? jsonDecode(e) : e);
final device = Printer(
vendorId: map['vendorId'].toString(),
productId: map['productId'].toString(),
name: map['name'],
connectionType: ConnectionType.USB,
address: map['vendorId'].toString(),
isConnected: false,
);
final isConnected =
await FlutterThermalPrinterPlatform.instance.isConnected(device);
device.isConnected = isConnected;
templist.add(device);
}
list = templist;
});
}
refresher = Stream.periodic(refreshDuration, (x) => x).listen((event) {
_devicesstream.add(list + btlist);
});
}