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 2 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.
[Rename] isAvailable -> isSupported
isAvailable -> isSupported[Example] Refactor: hugely refactored to use stateful widgets
connectionState & mtu: use broadcast stream[Fix] iOS: iOS Unhandled Exception: type 'int' is not a subtype of type 'bool' (regression in 1.16.3)
com.boskokg.flutter_blue_plus -> com.lib.flutter_blue_plus to be more generic[Fix] setLogLevel would be ignored due to being called twice (regression in 1.10.0)
setLogLevel would be ignored due to being called twice (regression in 1.10.0)[Fix] Android: setNotify would timeout if CCCD descriptor does not exist (regression in 1.5.0)
setNotify would timeout if CCCD descriptor does not exist (regression in 1.5.0)removeIfGone: only push to scanResults when list changes[Fix] platform check in onNameChanged & onServicesChanged was incorrect
onNameChanged & onServicesChanged was incorrect[Add] iOS: add support for onServicesChanged & onNameChanged
onServicesChanged & onNameChanged[Breaking Change] remove BluetoothDevice.type & BluetoothDevice.localName from constructor for simplicity
This release simplifies BluetoothDevice construction.
BluetoothDevice.type & BluetoothDevice.localName from constructor for simplicityservicesStream & isDiscoveringServices deprecated functionslocalName -> platformName to reflect platform specific behaviorsetNotifyValue must take descWrite mutex (bug in original flutter_blue)localName was broken when using connectedSystemDevices (regression in 1.15.10)getPhySupport[Fix] iOS: localName does not match Android (bug in original flutter_blue)
localName does not match Android (bug in original flutter_blue)[Fix] iOS: adapter turnOff: edge case when adapter is turned off while scanning (bug in original flutter_blue)
flutter_blue)flutter_blue)flutter_blue)connectedCount method for clarity[Fix] if any platform exception happens, fbp will deadlock (regression in 1.14.20)
[Fix] android: turning bluetooth off would not fully disconnect devices (regression in 1.14.19)
[Fix] iOS: turning bluetooth off would not fully disconnect devices (regression in 1.14.19)
[Fix] firstWhereOrNull conflict (regression in 1.15.0)
firstWhereOrNull conflict (regression in 1.15.0)[Fix] some typos in disconnect exceptions (regression in 1.15.3)
[Improve] prefer dart exceptions over platform exceptions when device is disconnected
[Fix] stopScan was not awaiting for invokeMethod (regression in 1.15.0)
stopScan was not awaiting for invokeMethod (regression in 1.15.0)[Fix] FlutterBluePlus.scanResults should always return list copy to avoid iteration exceptions (regression in 1.15.0)
FlutterBluePlus.scanResults should always return list copy to avoid iteration exceptions (regression in 1.15.0)Nothing published for this version
[Fix] Android: setNotifyValue: "(code: 5) notifications were not updated" (regression in 1.14.23)
setNotifyValue: "(code: 5) notifications were not updated" (regression in 1.14.23)flutter_blue)[Fix] setNotifyValue & others must be cleared after disconnection (regression in 1.14.21)
setNotifyValue & others must be cleared after disconnection (regression in 1.14.21)[Fix] Android: Hot Restart: could get stuck in infinite loop (regression in 1.14.19)
[Refactor] dart: store lastValue at global level so Desc & Chr classes are fully immutable
lastValue at global level so Desc & Chr classes are fully immutable[Fix] iOS: Hot Restart: could get stuck in infinite loop (regression in 1.14.19)
[Fix] Hot Restart: close all connections when dart vm is restarted (bug in original flutter_blue)
flutter_blue)[Fix] Android: crash uuid128 null deref (regression in 1.14.17)
uuid128 null deref (regression in 1.14.17)[Fix] Android: shortUUID: characteristic not found (bug in original flutter_blue)
flutter_blue)[Fix] macOS: lower required version to 10.11 (equivalent to iOS 9.0)
[Rename] allowSplits -> allowLongWrite
allowSplits -> allowLongWrite[Fix] Android: "dataLen longer than allowed" (regression in 1.14.13)
[Fix] iOS: onMtu was not called (bug in original flutter_blue)
flutter_blue)writeCharacteristic: add allowLongWrite option to do longer writes[Fix] Android: autoconnect was not working. (regression sometime after 1.4.0)
autoconnect was not working. (regression sometime after 1.4.0)bmAdvertisementData[Deprecate] dart: isDiscoveringServices & servicesStream. They can be easily implemented yourself
isDiscoveringServices & servicesStream. They can be easily implemented yourself[Fix] iOS: scan results with empty manufacturer data was not parsed (bug in original flutter_blue)
flutter_blue)[Fix] iOS: disconnectReasonCode & disconnectReasonString are mixed up (bug from when feature was added)
disconnectReasonCode & disconnectReasonString are mixed up (bug from when feature was added)[Improve] Dart: breaking change: rename bondState() -> bondState
device.disconnectReasonbondState() -> bondStateconnect or disconnect multiple times should not re-push to connectionState stream (regression in 1.14.0)connect or disconnect multiple times could fail(regression in 1.14.7)startScan for some phones (regression in 1.13.4)flutter_blue)[Fix] Android: connected & disconnected states not received (regression in 1.14.4)
[Fix] Android: connected & disconnected states not received (regression in 1.14.4)
[Fix] iOS: disconnect would timeout if already disconnected (regression in 1.14.0)
[Fix] iOS: disconnect would timeout if already disconnected (regression in 1.14.0)
[Improve] Dart: adapterState, bondState, mtu, connectiontate could miss changes due to race conditions
adapterState, bondState, mtu, connectiontate could miss changes due to race conditions[Improve] Dart: deprecate disconnecting & connecting states, they're not actually streamed by Android or iOS
disconnecting & connecting states, they're not actually streamed by Android or iOSconnectedSystemDevice & RSSI[Improve] Example: was using deprecated variable name
[Improve] Dart: knownServices should be fully cleared on disconnection
knownServices should be fully cleared on disconnection[Improve] Dart: each FlutterBluePlusException should have unique code for handling
FlutterBluePlusException should have unique code for handlingThis release improves bonding support.
This release improves bonding support.
BluetoothDevice.bondStateconnect & disconnect and others could incorrectly timeout (bug in original flutter_blue)getBondState, getMtu, getConnectionState could skip values (bug in original flutter_blue)servicesList after disconnection. Android requires you call discoverServices againresult.error over exceptions[Fix] Android: discoverServices never returns (regression in 1.13.0)
discoverServices never returns (regression in 1.13.0)turnOn & turnOff must check for permissions (bug in original flutter_blue)startScan should not required BLUETOOTH_CONNECT permission (bug in original flutter_blue)[Fix] Dart: be extra careful to only call connect & disconnect when necessary (regression in 1.13.0)
[Fix] Dart: connect should be no-op if already connected (regression in 1.13.1)
[Fix] Android/iOS: on connection failure, return right away (bug in original flutter_blue)
flutter_blue)This release improves bonding support.
This release improves bonding support.
discoverServices & others can fail if currently in the process of bonding (bug in original flutter_blue)createBond: check for success and throw exception on failureremoveBond: return Future(void) instead of Future(Bool), and throw exception on failure[Fix] Android: min sdk is currently 21, not 19 (bug in original flutter_blue)
flutter_blue)getOrDefault not available in AndroidSdkLevel < 24 (regression in 1.7.0)pair -> createBond[Fix] iOS: FlutterBluePlus.isAvailable 'int' is not a subtype of type 'FutureOr ' (regressed in 1.12.10)
FlutterBluePlus.isAvailable 'int' is not a subtype of type 'FutureOr<bool>' (regressed in 1.12.10)[Fix] Android: null ptr deref during ScanResult connectionState (regressed in 1.10.6) ^^^ connectionState was added to scanResults last week. It was n
ScanResult connectionState (regressed in 1.10.6)
^^^ connectionState was added to scanResults last week. It was not a good idea, and is now fully removed.[Fix] Android: potential null dereference if the platform does not have bluetooth (bug in original flutter_blue)
flutter_blue)DeadObjectException: close all connections when bluetooth is turned off (bug in original flutter_blue)[Improve] Android: turnOff is deprecated in Android
isAvailable returns false the first time, incorrectly (bug in original flutter_blue)NSData, NSString, & NSNumber correctly (bug in original flutter_blue)turnOff is deprecated in Android[Fix] Dart: servicesStream: 'bad state: Stream has already been listened to' (bug in original flutter_blue)
servicesStream: 'bad state: Stream has already been listened to' (bug in original flutter_blue)AndroidManifest.xml to fix build errors in older flutter (regression in 1.12.0)flutter_blue)FlutterBluePlus.isOn returns 'no' first time even though it is on (bug in original flutter_blue)setLogLevel color now optional[Fix] Android: null ptr in setPreferredPhy & setConnectionPriority (regression in 1.7.0)
setPreferredPhy & setConnectionPriority (regression in 1.7.0)[Fix] iOS: mtu returned on iOS was 3 too small (bug in original flutter_blue)
flutter_blue)write & writeWithoutResponse[Improve] Dart: verbose logging: brown == data from platform
[Improve] Dart: add more logging when in verbose mode, with color
[Fix] Android: build error typo (regression in 1.12.3)
Your coding agent can read these notes before it upgrades. Set up the MCP server →