blues 1.0.0+1
blues: ^1.0.0+1 copied to clipboard
Bluetooth Low Energy plugin for Flutter. This plugin provides a cross-platform (Android, iOS) API to access platform specific Bluetooth Low Energy services.
Flutter Blues Plugin #
Blues is a bluetooth plugin for Flutter and provides Bluetooth LE connectivity for both iOS and Android. It is a fork from the original FlutterBlue plugin with some minor fixes.
Using the Blues instance, you can scan for and connect to nearby devices (BluetoothDevice). Once connected to a device, the BluetoothDevice object can discover services (BluetoothService), characteristics (BluetoothCharacteristic), and descriptors (BluetoothDescriptor). The BluetoothDevice object is then used to directly interact with characteristics and descriptors.
Usage #
Obtain an instance #
Blues flutterBlues = Blues.instance;
Scan for devices #
// Start scanning
flutterBlues.startScan(timeout: Duration(seconds: 4));
// Listen to scan results
var subscription = flutterBlues.scanResults.listen((scanResult) {
// do something with scan result
device = scanResult.device;
print('${device.name} found! rssi: ${scanResult.rssi}');
});
// Stop scanning
flutterBlues.stopScan();
Connect to a device #
// Connect to the device
await device.connect();
// Disconnect from device
device.disconnect();
Discover services #
List<BluetoothService> services = await device.discoverServices();
services.forEach((service) {
// do something with service
});
Read and write characteristics #
// Reads all characteristics
var characteristics = service.characteristics;
for(BluetoothCharacteristic c in characteristics) {
List<int> value = await c.read();
print(value);
}
// Writes to a characteristic
await c.write([0x12, 0x34])
Read and write descriptors #
// Reads all descriptors
var descriptors = characteristic.descriptors;
for(BluetoothDescriptor d in descriptors) {
List<int> value = await d.read();
print(value);
}
// Writes to a descriptor
await d.write([0x12, 0x34])
Set notifications and listen to changes #
await characteristic.setNotifyValue(true);
characteristic.value.listen((value) {
// do something with new value
});
Read the MTU and request larger size #
final mtu = await device.mtu.first;
await device.requestMtu(512);
Note that iOS will not allow that you request the MTU size, but will always try to negotiate the highest possible MTU (iOS supports up to MTU size 185)
Reference #
Blues API #
| Android | iOS | Description | |
|---|---|---|---|
| scan | ✅ | ✅ | Starts a scan for Bluetooth Low Energy devices. |
| state | ✅ | ✅ | Stream of state changes for the Bluetooth Adapter. |
| isAvailable | ✅ | ✅ | Checks whether the device supports Bluetooth. |
| isOn | ✅ | ✅ | Checks if Bluetooth functionality is turned on. |
BluetoothDevice API #
| Android | iOS | Description | |
|---|---|---|---|
| connect | ✅ | ✅ | Establishes a connection to the device. |
| disconnect | ✅ | ✅ | Cancels an active or pending connection to the device. |
| discoverServices | ✅ | ✅ | Discovers services offered by the remote device as well as their characteristics and descriptors. |
| services | ✅ | ✅ | Gets a list of services. Requires that discoverServices() has completed. |
| state | ✅ | ✅ | Stream of state changes for the Bluetooth Device. |
| mtu | ✅ | ✅ | Stream of mtu size changes. |
| requestMtu | ✅ | Request to change the MTU for the device. |
BluetoothCharacteristic API #
| Android | iOS | Description | |
|---|---|---|---|
| read | ✅ | ✅ | Retrieves the value of the characteristic. |
| write | ✅ | ✅ | Writes the value of the characteristic. |
| setNotifyValue | ✅ | ✅ | Sets notifications or indications on the characteristic. |
| value | ✅ | ✅ | Stream of characteristic's value when changed. |
BluetoothDescriptor API #
| Android | iOS | Description | |
|---|---|---|---|
| read | ✅ | ✅ | Retrieves the value of the descriptor. |
| write | ✅ | ✅ | Writes the value of the descriptor. |
Troubleshooting #
Scanning for service UUID's doesn't return any results #
Make sure the device is advertising which service UUID's it supports. This is found in the advertisement packet as UUID 16 bit complete list or UUID 128 bit complete list.
Issues #
Please file any issues, bugs or feature request as an issue on our GitHub page.
Want to contribute #
If you would like to contribute to the plugin (e.g. by improving the documentation, solving a bug or adding a cool new feature), please carefully review our contribution guide and send us your pull request.
Author #
This Blues plugin for Flutter is developed by Baseflow. You can contact us at hello@baseflow.com