nrf_mesh_flutter 6.10.0 copy "nrf_mesh_flutter: ^6.10.0" to clipboard
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 / MeshBearerPhase connecting 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 automaticOnly SDK 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 provisionDevice when 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 before provisionDevice(), 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» + MeshBearerSnapshot model 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 to flutter_test, flutter_lints, pigeon.

API #

  • Deprecate setExperimentalRxMetadataEnabled (Phase 1.3): prefer Kotlin Mesh public networkEvents path; Android logs Log.w when reflection mode is enabled.
  • supportsRxAppKeyIndex() (Phase 1.4 probe): returns false on Android and iOS until inbound AppKey index metadata is wired consistently.
  • debounceMeshNetworkUpdates (Phase 2.2): small dart:async helper to debounce meshNetworkUpdatedStream without extra runtime dependencies.
  • getMeshBearerSnapshot() + MeshBearerSnapshot / MeshBearerPhase (Phase 3.1 partial): unify isProxyConnected / isProvisioningConnected with documented provisioning precedence (no new native deps / Pigeon calls beyond existing probes).
  • supportsProxyFilter() (Phase 3.2 probe): returns false — Proxy Filter configuration not bridged yet.

Example #

  • Home demo debounces mesh DB hints via debounceMeshNetworkUpdates instead of ad-hoc Timer wiring.
  • Real P1 page: same debounceMeshNetworkUpdates for meshNetworkUpdatedStream; logs getMeshBearerSnapshot() 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_docs in analysis_options.yaml with pragmatic ignore_for_file on generated/internal bridge sources.

Example #

  • Listen to meshNetworkUpdatedStream on 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 meshNetworkUpdatedStream and install snippet 6.9.2.

6.9.1 #

Docs (Phase 0 baseline) #

  • README: document incoming messageStream vs rxAccessMessageStream, and a cross-platform table for source / destination metadata (Android Kotlin Mesh MeshMessageReceived vs iOS MeshNetworkDelegate).
  • 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 report supportsRxSourceAddress() == true when using NetworkEvent.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, provisioning defaultParameters + immutable ProvisioningParameters, 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 keep meta: ^1.17.0 aligned with the Flutter SDK / flutter_test pin.
  • Add repository and issue_tracker fields to pubspec.yaml for 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.1 #

Docs #

  • README: update install snippet version and remove stale "Latest" list.

6.8.0 #

Features #

  • M4 Scenes: add Scenes client message wrappers (SceneStore/Recall/Delete/Get/RegisterGet) and decode incoming SceneStatus / SceneRegisterStatus from rxAccessMessageStream.
  • Example: add a Scenes demo page for store/recall/delete/get/register.

6.6.0 #

Features #

  • Virtual groups: add MeshGroup.labelUuid and virtual group workflows (create/remove, sub/unsub, virtual publication, and send with virtualLabel).
  • 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/importConfigurationBundle now 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 RealP1Page to 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 RealP1Page with 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: provisioningEventStream is 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 Service 0x1827).

Improvements #

  • CI: add a PR check to enforce CHANGELOG.md ordering (latest first) and ensure the top changelog version matches pubspec.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).

3.9.3 #

Fixes #

  • Docs: fix CHANGELOG.md ordering (latest first).

Improvements #

  • iOS: include best-effort serviceUuid in scan results and scan for both provisioning (0x1827) and proxy (0x1828) services.

3.9.2 #

Improvements #

  • Provisioning: emit additional best-effort events (capabilitiesReceived and OOB prompts when applicable) to make provisioningEventStream more useful for UI and logging.

3.9.1 #

Improvements #

  • Provisioning: make ProvisioningParameters harder 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 provisioningEventStream to 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 #

Docs #

  • README: recommend using sendAccess(...) (RawAccessMessage) for raw Access payloads and clarify that messageStream address can be null on some platforms.

CI #

  • Add GitHub Actions workflow to enforce formatting, analysis, tests, and pub publish --dry-run on PRs and main.

3.5.0 #

Features #

  • Android — persistent secure state (PR-2): replace in-memory SecurePropertiesStorage with SharedPreferences-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 incomingMeshMessages via reflection to obtain ReceivedMessage-style envelopes and forward source addresses together with opcode/parameters into Dart messageStream; falls back to the public flow if reflection is unavailable.
  • Dart — explicit raw Access API (PR-3): add RawAccessMessage with validation (opcode UInt32, parameter bytes, unicast/group destination, 12-bit AppKey index) plus PlatoJobsNrfMeshManager.sendAccess(...); extend MeshMessage.fromMap for round-tripping; add unit tests.

3.0.1 #

Fixes #

  • Dart: fix Generic OnOff/Level Set opcodes + parameters to match Mesh Model spec (add TID and correct optional transition/delay encoding).
  • Android: implement real Access sendMessage(...) over Proxy + AppKeyIndex, and forward incomingMeshMessages into Dart messageStream for a full P2 send/receive loop.
  • Example (Android): fix debug build by excluding a duplicate META-INF/versions/9/OSGI-INF/MANIFEST.MF Java resource during packaging.

3.0.0 #

Features #

  • P2: iOS now forwards incoming Access messages (via MeshNetworkDelegate) into Dart messageStream, and implements real sendMessage(...) over GATT Proxy using an AppKey + destination address.
  • iOS: real GATT Proxy connection via NordicMesh / GattBearer, MeshNetworkManager import/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.parameters type (id instead of invalid dynamic in headers).
  • iOS: CocoaPods nrf_mesh_flutter pod name alignment, use_frameworks! :linkage => :static in example for nRFMeshProvision static 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:mesh and 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.4 #

Fixes #

  • Publish from a clean git state (eliminate pub.dev validation warning).

1.1.3 #

Features #

  • Add address + appKeyIndex fields to MeshMessage and pass through the Pigeon bridge for outgoing messages.
  • Decode incoming messages into typed GenericOnOffStatus / GenericLevelStatus when possible (fallback to UnknownMessage).
  • 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.4 #

Docs #

  • Fix CHANGELOG.md ordering (latest first).

1.0.3 #

Docs #

  • Fix CHANGELOG.md ordering and formatting (latest first).

1.0.2 #

Docs #

  • 更新 README:补充更明确的错误处理方式(统一异常类型)与更完整的权限说明。

1.0.1 #

Fixes #

  • 移除对 flutter_reactive_ble 的强依赖,避免与项目中其他 BLE 插件(如 flutter_blue_plus)产生依赖冲突。

1.0.0 #

Breaking Changes #

  • 统一跨平台通道与 Pigeon 代码生成配置(nrf_mesh_flutter / com.platojobs.nrf_mesh)。

Features #

  • 统一错误映射:将平台 PlatformException 转换为可读的 PlatoJobsMeshException
  • 增加应用层 Command Queue(串行发送 + 超时 + 背压),提升高频指令稳定性。

0.4.0 #

Features #

  • Migrated Android implementation to use Nordic's Kotlin Mesh Library
  • Updated Android package name from com.example.nrf_mesh_flutter to com.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 NrfMeshManager to PlatoJobsNrfMeshManager.
  • Updated platform interface to PlatoJobsMeshBridge.
  • Updated iOS and Android native implementation class names.

Features #

  • Unified naming convention with PlatoJobs prefix
  • 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
2
likes
160
points
75
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Flutter plugin for Bluetooth Mesh using Nordic nRF Mesh libraries

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

convert, crypto, flutter, meta, plugin_platform_interface, pointycastle

More

Packages that depend on nrf_mesh_flutter

Packages that implement nrf_mesh_flutter