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 today
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: GUID issues related to scanning (regression in 1.28.3)
[Fix] android: GUID starting with 0000 were misinterpretted (regression in 1.28.5)
[Improve] simplify api: clear knownServices on reconnection instead of disconnection
knownServices on reconnection instead of disconnectionbondState cache when device is disconnected. unecessary.[Internal] use short UUID where possible
[Fix] guid: uuid was returning 0000 for 16 bit uuid (regression in 1.28.3)
guid.uuid should return lowercase[Improve] guid: add uuid short representation
uuid short representation[Improve] add length checks to MsdFilter & ServiceDataFilter
MsdFilter & ServiceDataFilter[Feature] scanning: add withServiceData filter
withServiceData filterwithMsd filter[Breaking Change] guid.toString() now returns 16-bit short uuid when possible
guid.toString() now returns 16-bit short uuid when possibleGUIDs for advertisingData.serviceUuids & advertisingData.serviceData instead of String[Improve] add more checks for bluetooth being off
[Fix] android: typo compile error (regression in 1.27.3)
[Fix] accidentally changed advertisementData.localName to nullable (regression in 1.27.3)
advertisementData.localName to nullable (regression in 1.27.3)[Perf] scanning: add continuousDivisor option to reduce platform channel & main-thread usage
continuousDivisor option to reduce platform channel & main-thread usage[Perf] scanning: only send advertisment keys over platform channel when they exist
advertisementData.localName -> advertisementData.advName[Add] android: add forceIndications option to setNotifyValue
forceIndications option to setNotifyValue[Breaking Change] scanning: make continousUpdates false by default - it is not typically needed & hurts perf. If your app uses startScan.removeIfGone,…
This release improves the default scanning behavior.
continousUpdates false by default - it is not typically needed & hurts perf. If your app uses startScan.removeIfGone, or your app continually checks the value of scanResult.timestamp or scanResult.rssi, then you will need to explicitly set continousUpdates to true.[Fix] android: scanning would not work if continuousUpdates was false (regression in 1.26.5)
continuousUpdates was false (regression in 1.26.5)[Add] scanning: withRemoteIds, withNames, withKeywords filters
withRemoteIds, withNames, withKeywords filtersandroidScanMode againcontinuousUpdates option replaces former allowDuplicates option[Add] cancelWhenDisconnected: option to cancel on *next* disconnection
cancelWhenDisconnected: option to cancel on next disconnection[Add] events.onCharacteristicWritten
events.onReadRssievents.onCharacteristicWrittenevents.onDescriptorWritten[Fix] android: close gatt after canceling an in-progress connnection (regression in 1.26.1)
[Feature] add support for canceling an in progress connection using device.disconnect
device.disconnectisScanning when onDetachedFromEngine is called (bug in original flutter_blue)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
These releases changed multiple things but then changed them back. For brevity, here are the actual changes:
These releases changed multiple things but then changed them back. For brevity, here are the actual changes:
flutter_blue)device.advName returns the name found during scanningdevice.mtuNow synchronously gets the current mtu valueevents.onDiscoveredServices streamdevice.onServicesChanged -> device.onServicesResetdevice.onNameChanged, in favor of only exposing events.onNameChanged[Breaking Change] android: request mtu of 512 by default.
This release makes mtu behavior more similar on android & iOS.
This release greatly increases reliability on android & ios.
This release greatly increases reliability on android & ios.
[Fix] iOS: connect: return error for invalid remoteId (bug in original flutter_blue)
remoteId (bug in original flutter_blue)[Fix] events API was not accessible through FlutterBluePlus.events
FlutterBluePlus.events[Add] FlutterBluePlus.events.mtu
FlutterBluePlus.events.mtu[Add] FlutterBluePlus.events.onNameChanged
FlutterBluePlus.events.onNameChangedFlutterBluePlus.events.onServicesChanged[Rename] FlutterBluePlus.connectionEvents -> FlutterBluePlus.events.connectionState
FlutterBluePlus.connectionEvents -> FlutterBluePlus.events.connectionStateFlutterBluePlus.events.onCharacteristicReceivedFlutterBluePlus.events.onDescriptorReadFlutterBluePlus.events.bondState[Add] FlutterBluePlus.connectionEvents, a stream of all connection & disconnected events
FlutterBluePlus.connectionEvents, a stream of all connection & disconnected eventsFlutterBluePlus.connectedDevices, to get currently connected devicesdevice.isConnected, convenience accessor[Fix] cannot retrieve platform name from bondedDevices (regression)
bondedDevices (regression)stopScan: should clear results after platform method has been called (bug in original flutter_blue)[Remove] FlutterBluePlus.connectedDevices. This API needs more thought.
FlutterBluePlus.connectedDevices. This API needs more thought.This release renames connectedSystemDevices.
This release renames connectedSystemDevices.
connectedSystemDevices -> systemDevices, because they must be re-connected by your app[Add] new method device.cancelWhenDisconnected(subscription)
device.cancelWhenDisconnected(subscription)[Add] new method FlutterBluePlus.connectedDevices
FlutterBluePlus.connectedDevicesThis release reverts most of the breaking changes made in 1.18.0.
This release reverts most of the breaking changes made in 1.18.0.
bondState stream in 1.18.0prevBondStatedevice.prevBondStateadapterName must request permission (bug in original flutter_blue)[Refactor] bondState: finish refactor started in 1.18.0
bondState: finish refactor started in 1.18.0[Fix] bondState: must *explicitly* check for null prevState (regression in 1.18.0)
bondState: must explicitly check for null prevState (regression in 1.18.0)[Fix] bondState: handle null prevState (regression in 1.18.0)
bondState: handle null prevState (regression in 1.18.0)[Breaking Change] bondState: directly expose prevBond instead of lost/failed flags
This release improves bondState stream
bondState: directly expose prevBond instead of lost/failed flags[Fix] scanResults: clear scan results on stopScan (regression in 1.16.8)
scanResults: clear scan results on stopScan (regression in 1.16.8)[Example] accidentally left performanceOverlay enabled (regression in 1.17.4)
performanceOverlay enabled (regression in 1.17.4)[Example] remove PermissionHandler dependency. It is no longer needed.
PermissionHandler dependency. It is no longer needed.ListView instead of SingleChildScrollView[Fix] android: turnOn throws exception if permission denied (bug in original flutter_blue)
turnOn throws exception if permission denied (bug in original flutter_blue)This bug affected mtu, lastValueStream, adapterState, & bondState.
This bug affected mtu, lastValueStream, adapterState, & bondState.
newStreamWithInitialValue was not emitting initial value. (regression in 1.16.6)[Fix] timeout when connect is called when adapter is off (bug in original flutter_blue)
connect is called when adapter is off (bug in original flutter_blue)disconnect callback when adapter turned off (bug in original flutter_blue)connectable flag was not working (regression in 1.7.0)adapterState when we already have it[Breaking Change/Fix] should update lastValue & lastValueStream when write is called
This release improves lastValue & lastValueStream.
lastValue & lastValueStream when write is calledonNameChanged & onServicesChanged characteristicsdiscoverServices crash "[_NSInlineData intValue]: unrecognized selector sent to instance" (bug in original flutter_blue)descriptor.write would timeout or not work (regression somewhere around ~1.7.0)isNotifying was not updated by setNotifyValue(false) (regression somewhere around ~1.9.0)[Fix] Android: onValueReceived was not working on Android 12 & lower (regression in 1.16.3)
onValueReceived was not working on Android 12 & lower (regression in 1.16.3)[Fix] Android: onCharacteristicReceived not being called (regression in 1.16.3)
onCharacteristicReceived not being called (regression in 1.16.3)[Fix] BluetoothDevice: don't wait for timeout if device becomes disconnected (bug in original flutter_blue)
flutter_blue)[Example] cleaned up Characteristic tile code
[Fix] scanResults & isScanning streams were not re-emitting their current value on listen (regression in 1.5.0)
scanResults & isScanning streams were not re-emitting their current value on listen (regression in 1.5.0)discoverServices: stay on screen after diconnectionconnectingOrDisconnecting codeYour coding agent can read these notes before it upgrades. Set up the MCP server →