[![pub package](https://img.shields.io/pub/v/flutter_blue.svg)](https://pub.dartlang.org/packages/flutter_blue)

FlutterBlue



## Introduction FlutterBlue is a bluetooth plugin for [Flutter](http://www.flutter.io), a new mobile SDK to help developers build modern apps for iOS and Android. ## Cross-Platform Bluetooth LE FlutterBlue aims to offer the most from both platforms (iOS and Android). Using the FlutterBlue instance, you can scan for and connect to nearby devices ([BluetoothDevice](#bluetoothdevice-api)). Once connected to a device, the BluetoothDevice object can discover services ([BluetoothService](lib/src/bluetooth_service.dart)), characteristics ([BluetoothCharacteristic](lib/src/bluetooth_characteristic.dart)), and descriptors ([BluetoothDescriptor](lib/src/bluetooth_descriptor.dart)). The BluetoothDevice object is then used to directly interact with characteristics and descriptors. ## Usage ### Obtain an instance ```dart FlutterBlue flutterBlue = FlutterBlue.instance; ``` ### Scan for devices ```dart /// Start scanning var scanSubscription = flutterBlue.scan().listen((scanResult) { // do something with scan result }); /// Stop scanning scanSubscription.cancel(); ``` ### Connect to a device ```dart /// Create a connection to the device var deviceConnection = flutterBlue.connect(device).listen((s) { if(s == BluetoothDeviceState.connected) { // device is connected, do something } }); /// Disconnect from device deviceConnection.cancel(); ``` ### Discover services ```dart List services = await device.discoverServices(); services.forEach((service) { // do something with service }); ``` ### Read and write characteristics ```dart // Reads all characteristics var characteristics = service.characteristics; for(BluetoothCharacteristic c in characteristics) { List value = await device.readCharacteristic(c); print(value); } // Writes to a characteristic await device.writeCharacteristic(c, [0x12, 0x34]) ``` ### Read and write descriptors ```dart // Reads all descriptors var descriptors = characteristic.descriptors; for(BluetoothDescriptor d in descriptors) { List value = await device.readDescriptor(d); print(value); } // Writes to a descriptor await device.writeDescriptor(d, [0x12, 0x34]) ``` ### Set notifications ```dart await device.setNotifyValue(characteristic, true); device.onValueChanged(characteristic).listen((value) { // do something with new value }); ``` ## Reference ### FlutterBlue API | | Android | iOS | Description | | :--------------- | :----------------: | :------------------: | :-------------------------------- | | scan | :white_check_mark: | :white_check_mark: | Starts a scan for Bluetooth Low Energy devices. | | connect | :white_check_mark: | :white_check_mark: | Establishes a connection to the Bluetooth Device. | | state | :white_check_mark: | :white_check_mark: | Gets the current state of the Bluetooth Adapter. | | onStateChanged | :white_check_mark: | :white_check_mark: | Stream of state changes for the Bluetooth Adapter. | ### BluetoothDevice API | | Android | iOS | Description | | :-------------------------- | :------------------: | :------------------: | :-------------------------------- | | discoverServices | :white_check_mark: | :white_check_mark: | Discovers services offered by the remote device as well as their characteristics and descriptors. | | services | :white_check_mark: | :white_check_mark: | Gets a list of services. Requires that discoverServices() has completed. | | readCharacteristic | :white_check_mark: | :white_check_mark: | Retrieves the value of a specified characteristic. | | readDescriptor | :white_check_mark: | :white_check_mark: | Retrieves the value of a specified descriptor. | | writeCharacteristic | :white_check_mark: | :white_check_mark: | Writes the value of a characteristic. | | writeDescriptor | :white_check_mark: | :white_check_mark: | Writes the value of a descriptor. | | setNotifyValue | :white_check_mark: | :white_check_mark: | Sets notifications or indications on the specified characteristic. | | onValueChanged | :white_check_mark: | :white_check_mark: | Notifies when the characteristic's value has changed. | | state | :white_check_mark: | :white_check_mark: | Gets the current state of the Bluetooth Device. | | onStateChanged | :white_check_mark: | :white_check_mark: | Notifies of state changes for the Bluetooth Device. | ## 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**.