quick_blue 0.4.1+1 icon indicating copy to clipboard operation
quick_blue: ^0.4.1+1 copied to clipboard

A cross-platform BluetoothLE plugin for Flutter.

quick_blue #

A cross-platform (Android/iOS/macOS/Windows/Linux) BluetoothLE plugin for Flutter

Usage #

APIAndroidiOSmacOSWindowsLinux
isBluetoothAvailable✔️✔️✔️✔️✔️
startScan/stopScan✔️✔️✔️✔️✔️
connect/disconnect✔️✔️✔️✔️
discoverServices✔️✔️✔️✔️
setNotifiable✔️✔️✔️✔️
readValue✔️✔️✔️✔️
writeValue✔️✔️✔️✔️
requestMtu✔️✔️✔️✔️

Scan BLE peripheral #

Android/iOS/macOS/Windows/Linux

QuickBlue.scanResultStream.listen((result) {
  print('onScanResult $result');
});

QuickBlue.startScan();
// ...
QuickBlue.stopScan();

Connect BLE peripheral #

Connect to deviceId, received from QuickBlue.scanResultStream

QuickBlue.setConnectionHandler(_handleConnectionChange);

void _handleConnectionChange(String deviceId, BlueConnectionState state) {
  print('_handleConnectionChange $deviceId, $state');
}

QuickBlue.connect(deviceId);
// ...
QuickBlue.disconnect(deviceId);

Discover services of BLE peripheral #

Discover services od deviceId

QuickBlue.setServiceHandler(_handleServiceDiscovery);

void _handleServiceDiscovery(String deviceId, String serviceId) {
  print('_handleServiceDiscovery $deviceId, $serviceId');
}

QuickBlue.discoverServices(deviceId);

Transfer data between BLE central & peripheral #

  • Pull data from peripheral of deviceId

Data would receive within value handler of QuickBlue.setValueHandler Because it is how peripheral(_:didUpdateValueFor:error:) work on iOS/macOS

// Data would receive from value handler of `QuickBlue.setValueHandler`
QuickBlue.readValue(deviceId, serviceId, characteristicId);
  • Send data to peripheral of deviceId
QuickBlue.writeValue(deviceId, serviceId, characteristicId, value);
  • Receive data from peripheral of deviceId
QuickBlue.setValueHandler(_handleValueChange);

void _handleValueChange(String deviceId, String characteristicId, Uint8List value) {
  print('_handleValueChange $deviceId, $characteristicId, ${hex.encode(value)}');
}

QuickBlue.setNotifiable(deviceId, serviceId, characteristicId, true);