NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #821 most downloaded on pub.dev
Flutter plugin for connecting and communicating with Bluetooth Low Energy devices.
Last release 3 days ago
03 Oct 2026
Release timing varies
gaps range from 2 weeks to 2 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
5 versions withdrawn
withdrawn after publishing
5 years old
301 releases · first in 2022
One column per quarter.
[Fix] Android: mConnectionState & mMtu not cleared when onDetachedFromEngine (regression in 1.10.10)
mConnectionState & mMtu not cleared when onDetachedFromEngine (regression in 1.10.10)[Fix] Example: Android: add back INTERNET permission for debug and profile modes. needed for debugging (regression in 1.12.0)
INTERNET permission for debug and profile modes. needed for debugging (regression in 1.12.0)BluetoothManager during onMethodCall, as opposed to app startup[Improve] Android: simplify build.grade to not set specific gradle version. it is uneeded
build.grade to not set specific gradle version. it is uneededThis release simplifies permissions.
This release simplifies permissions.
scan could be initiated twice causing bad state (bug in original flutter_blue)MutexFactory to properly prevent race conditions[Fix] Android/iOS: setLogLevel, getAdapterState, getAdapterName returning error when adapter not available
setLogLevel, getAdapterState, getAdapterName returning error when adapter not available[Fix] Dart: ensure only 1 mutex per characteristic to prevent race issues and dropped packets (bug in original flutter_blue)
flutter_blue)writeWithoutResponse should use at least 1 mutex per remoteId, to improve throughput[Fix] Dart: writeWithoutResponse should have its own mutex to prevent dropped packets (bug in original flutter_blue)
writeWithoutResponse should have its own mutex to prevent dropped packets (bug in original flutter_blue)[Fix] iOS: crash discoverServices crash after bluetooth adapter is toggled on/off (regressed sometime after 1.4.0)
discoverServices crash after bluetooth adapter is toggled on/off (regressed sometime after 1.4.0)DeviceScreen when bluetooth adapter is turned offadapterState and connectionState as strings[Fix] Android: null ptr exception getting Mtu (regression in 1.10.10)
[Fix] Dart: writeWithoutResponse should wait for completion, to prevent dropped packets (bug in original flutter_blue)
writeWithoutResponse should wait for completion, to prevent dropped packets (bug in original flutter_blue)[Improve] Android: remove shouldClearGattCache connect option. It should be discouraged (called manually) (added in ~1.6.0)
shouldClearGattCache connect option. It should be discouraged (called manually) (added in ~1.6.0)[Improve] Dart: add back servicesList, but with simpler api
servicesList, but with simpler apiThis release removes recent changes to the API causing issues.
This release removes recent changes to the API causing issues.
includeConnectedSystemDevices scan setting, it was too complicatedservicesList (introduced in 1.10.6)connectedDevices -> connectedSystemDevices[Fix] Android: platform exception when scanning with includeConnectedSystemDevices (regression in 1.10.6)
includeConnectedSystemDevices (regression in 1.10.6)connectionState should only be concerned with our apps connectionState (bug in original flutter_blue)[Fix] Android: turnOn and turnOff could timeout if already on or already off (regression in 1.10.0)
turnOn and turnOff could timeout if already on or already off (regression in 1.10.0)[Fix] Android: requestMtu (regression in 1.10.6)
requestMtu (regression in 1.10.6)[Improve] Dart: disconnect should wait for disconnect to complete
disconnect should wait for disconnect to complete[Improve] Dart: for convenience, scan results now also include connected devices see: includeConnectedDevice
includeConnectedDeviceconnectionState to ScanResultBluetoothDevice.servicesList for convenience, which calls discoverServices automatically.BluetoothDevice.services -> BluetoothDevice.servicesStream[Fix] iOS: "API MISUSE: Cancelling connection for unused peripheral."
[Improve] iOS: add remoteId to error strings when connection fails, etc
remoteId to error strings when connection fails, etc[Improve] Android: handle scan failure.
[Fix] Dart: setLogLevel recursion (regression in 1.10.0)
setLogLevel recursion (regression in 1.10.0)NSError instread of obj-c exceptions to avoid uncaught exceptions[Improve] Example: add error handling to descriptor read & write
[BREAKING CHANGE] Dart: turnOn & turnOff now wait for completion, return void instead of bool, and can throw
This release improves error handling and reliability.
turnOn & turnOff now wait for completion, return void instead of bool, and can throwFlutterBluePlus instead of FlutterBluePlus.instance. Multiple instances is not supported by any platform.getAdapterState && getConnectionState are more robusttry/catch over catchError as dart debugger doesn't work with catchError as well[Fix] iOS: serviceUUIDs always null in scan results (regression in 1.7.0)
serviceUUIDs always null in scan results (regression in 1.7.0)[Fix] iOS: characteristic read not working. (regression in 1.9.0)
device.readRssi failure in rssiStream gracefully[Improve] Dart: add back uuid convenience variable for BluetoothDescriptor (deprecated in 1.8.6)
setNotify returning error even though it succeeded (regression in 1.9.0)Characteristic.isNotifying was not working (regression in 1.9.0)BluetoothDescriptor (deprecated in 1.8.6)[Fix] Dart: readRssi: "Invalid argument: Instance of 'DeviceIdentifier'" (regression in 1.9.0)
readRssi: "Invalid argument: Instance of 'DeviceIdentifier'" (regression in 1.9.0)[Breaking Change/Fix] Android: When read is called onValueChangedStream is pushed to as well. This change was made to make both platforms behave the s…
This release marks the end of major work to improve reliability and simplicity of the FlutterBluePlus codebase. Please submit bug reports.
read is called onValueChangedStream is pushed to as well. This change was made to make both platforms behave the same way. It is an unavoidable limitation of iOS. See: https://github.com/chipweinberger/flutter_blue_plus/issues/419BluetoothCharacteristic.state variable not working (reggression in 1.8.6)FlutterBluePlus.state variable not working (reggression in 1.8.6)BluetoothCharacteristic.value -> lastValueStreamBluetoothDescriptor.value -> lastValueStreamBluetoothCharacteristic.onValueChangedStream -> onValueReceivedBluetoothDescriptor.onValueChangedStream -> onValueReceivedadapterState to use methodChannelBmSetNotificationResponse removed. It is simpler to reuse BmWriteDescriptorResponsesecondaryServiceUuid code its own getServicePair functionMessageMaker to be a bit more legible[Fix] Android/iOS: connectionState not being updated (regression in 1.8.6)
connectionState not being updated (regression in 1.8.6)adapterState shouldve been getAdapterState (regression in 1.8.6)[Improve] Dart: add 15 seconds default timeout for ble communication
[rename] Dart: BluetoothDevice.id -> remoteId
BluetoothDevice.id -> remoteIdcharacteristicUuid / serviceUuid / descriptorUuidFlutterBluePlus.name -> adapterNameBluetoothDevice.name -> localNameFlutterBluePlus.state -> adapterStateBluetoothDevice.state -> connectionStateautoReconnect (iOS 17 only)[Fix] iOS: check for nil peripheral. (regression in 1.8.3)
onDetachedFromEngine (bug in original flutter_blue)[Improve] Android: make connectivity checks more robust
[Improve] Android: writeCharacteristic: return error if longer than mtu
writeCharacteristic: return error if longer than mtu[Improve] Android: support sdk 33 for writeCharacteristic and writeDescriptor
writeCharacteristic and writeDescriptorconnect on already connected device is now considered successlocateGatt issueshouldClearGattCache is now called after connection, not before[Fix] Android: characteristic properties check was incorrect (regression in 1.7.8)
This release improves error handling.
This release improves error handling.
charactersticReadreadDescriptordiscoverServicesmtureadRssisetNotifyValuecharactersticWritewriteDescriptor[Improve] Android: add more useful errors for read and write characterist errors
[Fix] Dart: scanning: "Bad state: Cannot add event after closing" (regression in 1.5.0)
autoConnect to false by defaultpubspec.lock so users default to latest version[Fix] Dart: BmBluetoothService.is_primary was not set (regression in 1.7.0)
BmBluetoothService.is_primary was not set (regression in 1.7.0)BmAdvertisementData.connectable was not set (regression in 1.7.0)writeCharacteristic, setNotification, writeDescriptor (regression in 1.7.0)ACCESS_FINE_LOCATION by default (Android 12+)[Improve] Example: fix deprecations
BluetoothAdapterState not being updated (regression in 1.7.0)analysis_options.yaml[Fix] Android: Android 13 access fine location error (bug in original flutter_blue)
flutter_blue)[Fix] Android: exception thrown when descriptor.write is called (regression in 1.7.0)
descriptor.write is called (regression in 1.7.0)[Fix] Android: exception thrown when characteristic.write is called (regression in 1.7.0)
characteristic.write is called (regression in 1.7.0)bmCharacteristicProperties was not being set correctly (regression in 1.7.0)[Fix] iOS: when connecting, exception is thrown (regression in 1.7.0)
[refactor] removed protobuf dependency
This release removes Protobuf.
turnOn and turnOff not working (regression in 1.6.1)guid exception with serviceUUID is empty (bug in original flutter_blue)compileSdkVersion 31 -> 33minSdkVersion 19 -> 21 to remove lollipop checksstartScanremote_id[Fix] Android: compile error (regression in 1.6.0)
This release reformats a bunch of Android code.
This release reformats a bunch of Android code.
BufferStream listen on stopScan (regression in 1.5.0)[Fix] Android: setNotification was throwing exception (regression in 1.5.0)
[Fix] Dart: issue where startScan can hang forever (regression in 1.5.0)
flutter_blue)[Improve] Android: replace deprecated bluetooth enable with Enable-Intent
This release closes many open issues on Github.
writeCharacteristic (and other similar functions) exception could be missed (bug in original flutter_blue)setNotifyValue should check for success and throw error on failure (bug in original flutter_blue)connect, disconnect, readRssi, writeCharacteristic, readCharacteristic (bug in original flutter_blue)flutter_blue)flutter_blue)Enable-IntentmaxSdkVersion=30 in manifestsetPreferredPhremoveBondrequestConnectionPriorityCBCentralManagerOptionShowPowerAlertKey for better UI popupsAndroid: Prevent deprecation warnings #107 (thanks to sqcsabbey)
Android: Add clear gatt cache method #142 (thanks to joistaus)
Android: Opt-out of the neverForLocation permission flag for the BLUETOOTH_SCAN permission. (thanks to navaronbracke)
If neverForLocation is desired,
opt back into the old behavior by adding an explicit entry to your Android Manifest:
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
Android: Scan BLE long range -devices #139 (thanks to jonik-dev)
Android: Prevent deprecation warnings #107 (thanks to sqcsabbey)
Allow native implementation to handle pairing request #109 (thanks to JRazek)
Reverted: Ios: fixed manufacturer data parsing #104 (thanks to sqcsabbey)
Ios: fixed manufacturer data parsing #104 (thanks to sqcsabbey)
connect timeout fixed (thanks to crazy-rodney, sophisticode, SkuggaEdward, MousyBusiness and cthurston)
Read RSSI from a connected BLE device #1 (thanks to sophisticode)
Remove connect to BLE device after BLE device has disconnected #11 (fixed by sophisticode)
Copyright reverted to Paul DeMarco
Possible crash fix caused by wrong raw data (fixed by narrit)
Your coding agent can read these notes before it upgrades. Set up the MCP server →