Skip to content

Latest commit

 

History

History
 
 

quick_blue

quick_blue

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

Usage

API Android iOS macOS Windows Linux
availabilityChangeStream ✔️ ✔️ ✔️ ✔️ ✔️
isBluetoothAvailable ✔️ ✔️ ✔️ ✔️ ✔️
startScan/stopScan ✔️ ✔️ ✔️ ✔️ ✔️
connect/disconnect ✔️ ✔️ ✔️ ✔️ ✔️
discoverServices ✔️ ✔️ ✔️ ✔️ ✔️
setNotifiable ✔️ ✔️ ✔️ ✔️ ✔️
readValue ✔️ ✔️ ✔️ ✔️ ✔️
writeValue ✔️ ✔️ ✔️ ✔️ ✔️
requestMtu ✔️ ✔️ ✔️ ✔️

Receive BLE availability changes

iOS/macOS

QuickBlue.availabilityChangeStream.listen((state) {
  debugPrint('Bluetooth state: ${state.toString()}');
});

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);