flutter_classic_bluetooth 0.1.3
flutter_classic_bluetooth: ^0.1.3 copied to clipboard
Bluetooth Classic (RFCOMM/SPP) serial plugin for Flutter. Discover, pair and connect to ESP32, HC-05 and serial devices on Android, Windows, macOS, Linux, iOS.
0.1.3 #
Added #
- Line / frame reading for serial data:
Stream<Uint8List>.lines()and.frames()extensions plus theBtcFrameSplittertransformer reassemble delimiter-terminated messages that span multipleinputchunks..lines()splits on\n, strips a trailing\r, and decodes toString, so ESP32 / HC-05 / Arduino serial output reads cleanly withconnection.input.lines(). A.decoded()helper streams multi-byte-safe text. - Request/response:
BtcConnection.sendAndReceive()(and the same onBtcReconnectingConnection) writes a command and returns the first response line (or the first line matching awherepredicate) with framing and a timeout handled for you. Ideal for AT-command devices. BtcStreamSink.writeLine()/BtcReconnectingConnection.sendLine(): write text with a trailing newline (CRLF by default).- One-shot
FlutterClassicBluetooth.scan(): starts discovery, collects results for a timeout (de-duplicated and merged), stops, and returns them sorted by signal strength. PlusBtcDevice.mergedWith()to combine repeated sightings. BtcReconnectingConnectionnow exposesattemptsandlastErrorfor UIs that show reconnect progress.- Connection RSSI (macOS):
BtcConnection.readRssi()reads the live signal strength of an open link viaIOBluetoothDevice. Gated by the newBtcPlatformCapabilities.canReadConnectionRssiflag; Android, iOS, Windows and Linux throwBtcUnsupportedException(no public Classic API for connection RSSI). Discovery-time RSSI stays available everywhere onBtcDevice.rssi. - Linux: the plugin registers an auto-accepting BlueZ pairing agent
(
org.bluez.Agent1), so Secure Simple Pairing ("just works") devices (ESP32, most HC-05/06) pair frombondDevice()without a desktop dialog. Devices that require typing a PIN/passkey still need a system agent.
0.1.2 #
Added #
- Auto-reconnect:
connectWithReconnect()returns aBtcReconnectingConnectionthat transparently re-establishes the link when it drops, with a configurableBtcReconnectPolicy(exponential backoff, max attempts, per-attempt timeout). Itsinputandstatestreams are stable across reconnects, so you subscribe once. NewBtcReconnectStateenum.
Changed #
- Discoverability: lead the package
description, README title and opening with the terms developers actually search (Bluetooth Classic, RFCOMM/SPP, serial, ESP32, HC-05) so the package surfaces for those queries. - Docs: add a Roadmap section to the README, a checked list of shipped capabilities plus planned items.
0.1.1 #
Reliability and completeness pass across all five platforms, plus API ergonomics.
Added #
BtcUuid.spp, andconnect()/startServer()now defaultuuidto it. The common case is justconnect(address: ...)(HC-05/06, ESP32, Arduino, ...).connect()gains an optionaltimeout(throwsBtcTimeoutException).BtcConnection.stateStreamemitsdisconnecting→disconnectedonfinish()/close().BtcStreamSinkgainswriteString,writeBytes,addStreamandallSent.BtcDiscoveryExceptionfordiscoveryFailederrors.
Fixed #
- Android: marshal method/event-channel work to the main thread; shared atomic connection ids; receivers emit an initial snapshot and use the API 34 exported-receiver flag; no more orphaned permission/activity futures.
- Windows: register the per-connection/server/
bond_stateevent channels (inbound data was dropped); deliver accepted clients; publish an SDP record; honorsecure; surfaceWSAStartupfailure;setDiscoverableviaBluetoothEnableDiscovery. - Linux: discovery, adapter state/power, discoverability, paired-device listing
and pairing now run over the BlueZ D-Bus API (
org.bluez) as the primary path, so they work for an unprivileged user (no root / CAP_NET_RAW). Discovery is event-driven via BlueZ signals (BR/EDR-filtered) with live adapter on/off; raw HCI is an automatic fallback. Connect/server/data use AF_BLUETOOTH RFCOMM, with the channel resolved from the UUID via SDP. Bundled GoogleTest bumped to v1.15.2 so the example configures on CMake 4.x. - macOS: device discovery, accepted-client delivery, async connect/write,
main-thread events, and pairing via
IOBluetoothDevicePair(unpair via System Settings). - iOS: real adapter-state stream via CoreBluetooth;
isEnabledfrom the radio state with an MFi-accessory fallback.
Changed #
- Capability flags and the documentation tables reflect each platform's real support.
- SDK constraint set to
>=3.3.0 <4.0.0.
Note: Android, Windows and Linux are verified on-device. macOS native code is reviewed but should be compiled on macOS before production use.
0.1.0 #
- Initial release.
- Unified Dart API for Bluetooth Classic (RFCOMM) communication.
- Android: Full support (discovery, pairing, connect, server, discoverability).
- Windows: Discovery, pairing, connect, server via Winsock2/AF_BTH.
- macOS: Discovery, pairing, connect, server via IOBluetooth.
- Linux: Discovery, connect, server via BlueZ/RFCOMM. Pairing requires external tools.
- iOS: MFi accessory support via ExternalAccessory framework.
- Platform capabilities API for runtime feature detection.
- Multiple simultaneous RFCOMM connections.
- Stream-based data I/O with
BtcConnection. - Typed exception hierarchy (
BtcExceptionand subtypes). - Example app with 7 screens demonstrating all features.
