nrf_mesh_flutter 6.10.0
nrf_mesh_flutter: ^6.10.0 copied to clipboard
Flutter plugin for Bluetooth Mesh using Nordic nRF Mesh libraries
6.10.0 #
Features #
- Phase 3.1: add
MeshBearerSnapshot/MeshBearerPhaseconnecting states (proxyConnecting,provisioningConnecting) with Dart-side in-flight tracking. - Phase 3.2: add
MeshCapabilities,MeshProxyFilterCapability, and explicit Proxy Filter Dart APIs:setProxyFilterType,addProxyFilterAddresses,removeProxyFilterAddresses. - Android: bridge Nordic Kotlin Mesh explicit Proxy Filter control through
MeshNetworkManager.proxyFilter.
Improvements #
- Queue bearer transitions (
connectProxy/disconnectProxy/connectProvisioning/disconnectProvisioning) and explicit Proxy Filter mutations through the shared command queue for more stable sequencing. - Clean up Android/iOS proxy and provisioning connection failure paths so half-open bearers are closed before retry.
- Flush the latest debounced mesh-network update before stream close.
- Example app: surface aggregated capability snapshot instead of only a boolean Proxy Filter probe.
Documentation #
- README now documents capability aggregation, Android explicit Proxy Filter support, and the verified iOS
automaticOnlySDK boundary for Proxy Filter. - README install snippet and CocoaPods podspec aligned with 6.10.0.
6.9.7 #
Fixes #
- iOS: Parse 16-byte Mesh Device UUID from provisioning service data and unprovisioned beacons during scan; cache UUID for
provisionDevicewhen Flutter round-trips an empty list. - iOS: Scan without CoreBluetooth service-UUID filter so devices that only advertise Mesh data in Service Data / manufacturer payloads are discovered.
- Android: Implement real BLE scanning (was a no-op); emit discovered devices with Mesh UUID parsing and provisioning UUID cache (parity with iOS).
- Example: Fix home screen bottom overflow with a scrollable layout; cancel scan subscriptions on stop/dispose; show UUID hint and disable Provision when no mesh UUID is present.
Documentation #
- README install snippet and CocoaPods podspec aligned with 6.9.7.
6.9.6 #
Documentation #
- README: align install snippet with 6.9.6 and correct dependency documentation to list the actual Dart runtime packages and Nordic Kotlin Mesh Android artifacts.
Native (iOS) #
- Ensure iOS has a real Nordic Mesh DB after
loadNetwork()/ legacy fallback imports and beforeprovisionDevice(), preventing provisioning from failing with "Mesh DB is not loaded" after startup.
6.9.5 #
Native (iOS) #
- Add Swift Package Manager (SPM) support for the iOS plugin (
ios/nrf_mesh_flutter/Package.swift) to improve pub.dev platform scoring.
6.9.4 #
Documentation (Phase 0.x + planning) #
- README: Phase 3 «current plugin note» +
MeshBearerSnapshotmodel section. - README: Phase 0.1 receive-path inventory table (streams vs opcode / source / destination / gaps).
- README: Phase 0.2 explicit gap list (inbound AppKey index, TTL, experimental RX deprecation).
- README +
pubspec.yaml: dependency policy — prefer SDK / in-repo helpers; avoid new optional third-party Dart packages; dev tooling limited toflutter_test,flutter_lints,pigeon.
API #
- Deprecate
setExperimentalRxMetadataEnabled(Phase 1.3): prefer Kotlin Mesh publicnetworkEventspath; Android logsLog.wwhen reflection mode is enabled. supportsRxAppKeyIndex()(Phase 1.4 probe): returnsfalseon Android and iOS until inbound AppKey index metadata is wired consistently.debounceMeshNetworkUpdates(Phase 2.2): smalldart:asynchelper to debouncemeshNetworkUpdatedStreamwithout extra runtime dependencies.getMeshBearerSnapshot()+MeshBearerSnapshot/MeshBearerPhase(Phase 3.1 partial): unifyisProxyConnected/isProvisioningConnectedwith documented provisioning precedence (no new native deps / Pigeon calls beyond existing probes).supportsProxyFilter()(Phase 3.2 probe): returnsfalse— Proxy Filter configuration not bridged yet.
Example #
- Home demo debounces mesh DB hints via
debounceMeshNetworkUpdatesinstead of ad-hocTimerwiring. - Real P1 page: same
debounceMeshNetworkUpdatesformeshNetworkUpdatedStream; logsgetMeshBearerSnapshot()after proxy connect/disconnect and exposes Bearer + PF probe.
Native (iOS) / Docs #
- CocoaPods podspec version 6.9.4; README install snippet 6.9.4.
6.9.3 #
Documentation #
- Raised dartdoc coverage for the public API (library doc, models, [PlatoJobsNrfMeshManager], provisioning enums).
- Enable
public_member_api_docsinanalysis_options.yamlwith pragmaticignore_for_fileon generated/internal bridge sources.
Example #
- Listen to
meshNetworkUpdatedStreamon the home demo and Real P1 page (debounced logging / refresh).
Native (iOS) / Docs #
- CocoaPods podspec version 6.9.3; README install snippet 6.9.3.
6.9.2 #
Features #
meshNetworkUpdatedStream: cross-platform hint when the native mesh DB may have changed (Android:NetworkUpdated; iOS: post-save / load). Apps should refresh cached topology (getNodes(),getGroups(), keys) as needed.
Native (iOS) #
- Route Nordic persistence through
saveNordicMeshDatabase()so saves notify Flutter;resetLocalMeshState()also notifies after clear. - CocoaPods podspec version 6.9.2.
Docs #
- README: Phase 2 section for
meshNetworkUpdatedStreamand install snippet 6.9.2.
6.9.1 #
Docs (Phase 0 baseline) #
- README: document incoming
messageStreamvsrxAccessMessageStream, and a cross-platform table for source / destination metadata (Android Kotlin MeshMeshMessageReceivedvs iOSMeshNetworkDelegate). - README: clarify
supportsRxSourceAddress/ experimental RX metadata on Android and delegate expectations on iOS. - README install snippet aligned with 6.9.1.
Native (Android) #
- Incoming Access forwarding: populate
MeshMessage.address(source),RxAccessMessage.destination, and reportsupportsRxSourceAddress() == truewhen usingNetworkEvent.MeshMessageReceived(Kotlin Mesh 1.0+), aligning RX metadata with iOS delegate behaviour documented above.
Native (iOS) #
- CocoaPods podspec version 6.9.1 (unchanged
nRFMeshProvision~> 4.8.0).
6.9.0 #
Native (Android) #
- Align Nordic Kotlin Mesh artifacts with 1.0.0 (
core,bearer,bearer-gatt,bearer-pbgatt,bearer-provisioning,provisioning) and update the plugin bridge for API changes (MeshNetworkManager.network,networkEvents/MeshMessageReceived, provisioningdefaultParameters+ immutableProvisioningParameters, updated config message constructors).
Dart / publishing #
- Bump pointycastle to ^4.0.0 (virtual-address CMAC path unchanged).
- Refresh direct dependency constraints (
convert,crypto,plugin_platform_interface) and keepmeta: ^1.17.0aligned with the Flutter SDK /flutter_testpin. - Add
repositoryandissue_trackerfields topubspec.yamlfor package metadata on pub.dev.
Native (iOS) #
- CocoaPods podspec version 6.9.0 (still depends on
nRFMeshProvision~> 4.8.0).
Docs #
- README install snippet aligned with 6.9.0.
6.8.2 #
Docs #
- README: keep install snippet aligned with latest published patch.
- CI: enforce README install snippet version matches
pubspec.yaml.
6.8.0 #
Features #
- M4 Scenes: add Scenes client message wrappers (
SceneStore/Recall/Delete/Get/RegisterGet) and decode incomingSceneStatus/SceneRegisterStatusfromrxAccessMessageStream. - Example: add a Scenes demo page for store/recall/delete/get/register.
6.6.0 #
Features #
- Virtual groups: add
MeshGroup.labelUuidand virtual group workflows (create/remove, sub/unsub, virtual publication, and send withvirtualLabel). - M2 (deliverable loop): add key refresh + remote key deletion + local reset APIs:
removeNetworkKeyRemote(destination, netKeyIndex)removeAppKeyRemote(destination, appKeyIndex, boundNetKeyIndex)getKeyRefreshPhase(destination, netKeyIndex)setKeyRefreshPhaseTransition(destination, netKeyIndex, transition)(2=UseNewKeys, 3=RevokeOldKeys)resetLocalMeshState()
- Bundle import/export parity: iOS
exportConfigurationBundle/importConfigurationBundlenow uses the same JSON bundle shape as Android (meshDbBase64+secureStateJson), with backward-compatible fallback import for legacy raw mesh bytes.
Example #
- Add a group messaging page demonstrating virtual groups.
6.0.0 #
Features #
- M2 (deliverable loop): add node configuration + reset + export/import bundle APIs:
setNodeDefaultTtl(destination, ttl)setNodeRelay(destination, enabled, retransmitCount, retransmitIntervalMs)setNodeGattProxy(destination, enabled)setNodeFriend(destination, enabled)setNodeBeacon(destination, enabled)setNodeNetworkTransmit(destination, count, intervalMs)nodeReset(destination)exportConfigurationBundle(path)/importConfigurationBundle(path)
- Example: extend
RealP1Pageto demo node config + bundle export/import.
5.2.0 #
Features #
- M2 foundation: add key and composition helpers:
addNetworkKey(netKeyIndex, keyHex)addAppKey(appKeyIndex, keyHex)fetchCompositionData(destination, page)getNetworkKeys()/getAppKeys()
- Example: extend
RealP1Pagewith a minimal M2 flow UI (keys + composition).
5.0.1 #
Improvements #
- Android (M2 foundation): align
getNodes()and provisioning result to include best-effort element/model lists from Kotlin Mesh DB when available. - Android (M2 foundation):
getGroups()now prefers returning groups from Kotlin Mesh DB when available.
5.0.0 #
Breaking changes #
- iOS:
getNodes()now returns nodes from the Nordic Mesh DB when available (elements/models/subscriptions/publications are sourced from the DB).
Features #
- iOS (M2 foundation): return provisioned nodes with populated elements/models after provisioning completion.
- iOS (M2 foundation): group management uses Mesh DB groups when available.
4.0.1 #
Features #
- iOS: implement PB-GATT provisioning using Nordic iOS library
ProvisioningManager. - iOS: support interactive Output OOB continuation via:
provideProvisioningOobNumeric(deviceId, value)provideProvisioningOobAlphaNumeric(deviceId, value)
Fixes #
- iOS: avoid Objective-C name collisions with Nordic types by renaming the Pigeon transport model to
FlutterUnprovisionedDevice.
4.0.0 #
Breaking changes #
- API: add interactive Output OOB continuation methods:
provideProvisioningOobNumeric(deviceId, value)provideProvisioningOobAlphaNumeric(deviceId, value)
Features #
- Android: full provisioning flow (Kotlin Mesh
ProvisioningManager) over PB-GATT (0x1827) with persistent Mesh DB updates. - Android:
getNodes()now returns nodes from the Kotlin Mesh DB when available.
Improvements #
- Provisioning:
provisioningEventStreamis now driven by native provisioning states (capabilities, auth actions, completion, failures).
3.11.0 #
Features #
- Android: implement PB-GATT provisioning connection management via
connectProvisioning/disconnectProvisioning/isProvisioningConnected(Mesh Provisioning Service0x1827).
Improvements #
- CI: add a PR check to enforce
CHANGELOG.mdordering (latest first) and ensure the top changelog version matchespubspec.yaml.
Fixes #
- Docs: ensure the latest version stays at the top of
CHANGELOG.md.
3.10.0 #
Features #
- Provisioning (foundation): add
connectProvisioning/disconnectProvisioning/isProvisioningConnected.- iOS: implements PB-GATT connection + provisioning service discovery and emits progress via
provisioningEventStream. - Android: not implemented yet (returns false).
- iOS: implements PB-GATT connection + provisioning service discovery and emits progress via
3.9.3 #
3.9.2 #
Improvements #
- Provisioning: emit additional best-effort events (
capabilitiesReceivedand OOB prompts when applicable) to makeprovisioningEventStreammore useful for UI and logging.
3.9.1 #
Improvements #
- Provisioning: make
ProvisioningParametersharder to misuse by adding typed factories (noOob/staticOob/outputOob/inputOob) and validating static OOB payloads (hex, even length, 1..32 bytes). Backward-compatible constructor remains supported.
3.9.0 #
Features #
- Provisioning: add
provisioningEventStreamto expose lifecycle events (start/complete/failure and future OOB prompts). Native implementations currently emit best-effort events; this establishes a stable contract for upcoming full provisioning support.
3.8.0 #
Features #
- API: add
rxAccessMessageStream(Dart) to expose a stable RX event contract with best-effort metadata (source/destination) alongside raw opcode/parameters. - iOS: forward RX access events with source + destination via
MeshNetworkDelegate. - Android: forward RX access events; metadata is best-effort (source is only available when experimental metadata extraction is enabled).
3.7.0 #
Features #
- Android: add
setExperimentalRxMetadataEnabled(bool)to explicitly control whether internal APIs (reflection) may be used to extract RX source address metadata. Default is disabled, which uses public APIs only.
3.6.1 #
Docs #
- CHANGELOG: switch to English-only release notes (remove Chinese section in 3.5.0 and translate remaining Chinese entry).
3.6.0 #
Features #
- API: add
supportsRxSourceAddress()so apps can detect whether the native side can reliably populate the source address for incoming Access messages. - Android: expose
clearSecureStorage()to clear persisted secure mesh state (IV index / sequence / SeqAuth etc.) for debugging or when switching Mesh DBs.
3.5.1 #
3.5.0 #
Features #
- Android — persistent secure state (PR-2): replace in-memory
SecurePropertiesStoragewithSharedPreferences-backed persistence for IV Index (including update flag / transition timing where applicable), per-source sequence numbers, SeqAuth-related values, and local provisioner identity so Access-layer sending stays consistent across process restarts. - Android — richer incoming metadata (PR-1): when possible, subscribe to internal
incomingMeshMessagesvia reflection to obtainReceivedMessage-style envelopes and forward source addresses together with opcode/parameters into DartmessageStream; falls back to the public flow if reflection is unavailable. - Dart — explicit raw Access API (PR-3): add
RawAccessMessagewith validation (opcode UInt32, parameter bytes, unicast/group destination, 12-bit AppKey index) plusPlatoJobsNrfMeshManager.sendAccess(...); extendMeshMessage.fromMapfor round-tripping; add unit tests.
3.0.1 #
Fixes #
- Dart: fix Generic OnOff/Level
Setopcodes + parameters to match Mesh Model spec (add TID and correct optional transition/delay encoding). - Android: implement real Access
sendMessage(...)over Proxy + AppKeyIndex, and forwardincomingMeshMessagesinto DartmessageStreamfor a full P2 send/receive loop. - Example (Android): fix debug build by excluding a duplicate
META-INF/versions/9/OSGI-INF/MANIFEST.MFJava resource during packaging.
3.0.0 #
Features #
- P2: iOS now forwards incoming Access messages (via
MeshNetworkDelegate) into DartmessageStream, and implements realsendMessage(...)over GATT Proxy using an AppKey + destination address. - iOS: real GATT Proxy connection via
NordicMesh/GattBearer,MeshNetworkManagerimport/export of Mesh Configuration Database 1.0.1, and real Foundation Config messages (bind/unbind AppKey, subscription add/delete, publication set) when a proxy is connected. - Android: when a proxy is connected, real config send no longer falls back to in-memory state on failure; errors surface to the app. When not on a live path, legacy in-memory config remains for UI dev.
- Example: new P1 Real Flow page (
real_p1_page.dart) to import mesh JSON, scan, connect proxy, and run bind/sub/pub with a log console. - iOS: fix Pigeon-generated ObjC
MeshMessage.parameterstype (idinstead of invaliddynamicin headers). - iOS: CocoaPods
nrf_mesh_flutterpod name alignment,use_frameworks! :linkage => :staticin example fornRFMeshProvisionstatic framework.
2.0.1 #
Features #
- Add Proxy connection APIs (
connectProxy/disconnectProxy/isProxyConnected) to unblock real transport work for P1. - Android: start wiring Kotlin BLE + GATT bearer for Proxy connections (foundation for real Config message delivery).
2.0.0 #
Breaking Changes #
- Android: remove legacy dependency
no.nordicsemi.android:meshand switch to Nordic Kotlin Mesh library dependencies.
Features #
- P1 configuration APIs (bind/unbind AppKey, subscriptions, publication) are available in Dart and bridged to native.
getNodes()now exposes model bindings/subscriptions/publication fields for UI and debugging.- iOS/Android support JSON persistence for network state (save/load/export/import), including nodes/groups and configuration fields.
- Example app includes a config demo view for validating P1 flows.
1.1.3 #
Features #
- Add address + appKeyIndex fields to
MeshMessageand pass through the Pigeon bridge for outgoing messages. - Decode incoming messages into typed
GenericOnOffStatus/GenericLevelStatuswhen possible (fallback toUnknownMessage). - Improve Pigeon-to-Dart model conversion to populate network keys/app keys/nodes/groups when provided by the platform.
1.1.2 #
Developer Experience #
- Extend fake bridge with outbound observability (record/stream sent messages).
- Add failure/delay injection for provisioning and network import/export.
- Add in-memory export/import storage to simulate persistence in tests.
1.1.1 #
Developer Experience #
- Enhance mock bridge with a scriptable scenario API (queued device discoveries + incoming messages).
- Add sendMessage failure injection helpers for tests and UI flows.
- Update README mock section and bump install snippet.
1.1.0 #
Developer Experience #
- Add a mockable bridge (
FakePlatoJobsMeshBridge) for UI development without Mesh hardware. - Add unit tests covering the fake bridge and stream behavior.
- Update example app manifests for Android 12+/14+ and iOS Bluetooth usage descriptions.
- Expand README with provisioning flow + mocking + permission/background notes.
1.0.0 #
0.4.0 #
Features #
- Migrated Android implementation to use Nordic's Kotlin Mesh Library
- Updated Android package name from
com.example.nrf_mesh_fluttertocom.platojobs.nrf_mesh - Improved Android code structure and documentation
- Added comprehensive documentation for Android implementation
- Updated build.gradle.kts with correct package configuration
0.3.0 #
- Renamed core class from
NrfMeshManagertoPlatoJobsNrfMeshManager. - Updated platform interface to
PlatoJobsMeshBridge. - Updated iOS and Android native implementation class names.
Features #
- Unified naming convention with
PlatoJobsprefix - Improved documentation with detailed API reference
- Added PROJECT_SPECIFICATIONS.md for maintenance guidelines
- Enhanced Pigeon code generation setup
- Updated example app to use new naming convention
0.2.0 #
- Refactored interface package using plugin_platform_interface
- Added pigeon: ^26.3.4 for automatic MethodChannel code generation
- Fixed type conversion and null safety issues
- Optimized platform interface implementation
0.1.0 #
- Initial release
- Support for mesh network management (create, load, save, export, import)
- Support for device scanning and provisioning
- Support for mesh message sending and receiving
- Support for node and group management
- Support for iOS and Android platforms