From 0d4f062f63ca28cfabd5a710bb3a38384c692285 Mon Sep 17 00:00:00 2001 From: Nicolas CHAIX Date: Mon, 3 Aug 2026 13:12:48 +0200 Subject: [PATCH 1/3] Fix DCS and SPI events never reaching Flutter listeners Two long-standing wire-string mismatches meant these events were silently dropped in the default branch of the events handler: - DCS: both native platforms send "onDCSSignatureReady"/"onDCSSignatureError" (the iOS SDK's own listener properties are named that way), but the Dart handler matched "onDcsSignature*". Aligned the two case strings with native. The public EventListener field names are unchanged to avoid a breaking API change. - SPI: the Dart handler had no case arm for any of the 7 SPI events even though EventListener declares them all. Added the missing arms. Android also sent 4 of them without the "on" prefix, unlike iOS; aligned those on the "on..." form. Also wire onDcsSignatureReady/onDcsSignatureError and onIntegrationError into the example app so the DCS fix is observable in the event log. --- CHANGELOG.md | 2 + .../fluttersdk/DidomiEventStreamHandler.kt | 8 +-- example/lib/events_helper.dart | 13 ++++ lib/events/events_handler.dart | 59 ++++++++++++++++++- 4 files changed, 76 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93b4deb..55d858e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## 2.31.0 - Update latest versions of native Android (2.47.0) and iOS (2.47.0) sdks. +- Fix DCS signature events (`onDcsSignatureReady`, `onDcsSignatureError`) never being triggered. +- Fix SPI screen events never being triggered. ## 2.30.0 - Update latest versions of native Android (2.46.0) and iOS (2.46.0) sdks. diff --git a/android/src/main/kotlin/io/didomi/fluttersdk/DidomiEventStreamHandler.kt b/android/src/main/kotlin/io/didomi/fluttersdk/DidomiEventStreamHandler.kt index 1502d03..890c09a 100644 --- a/android/src/main/kotlin/io/didomi/fluttersdk/DidomiEventStreamHandler.kt +++ b/android/src/main/kotlin/io/didomi/fluttersdk/DidomiEventStreamHandler.kt @@ -82,7 +82,7 @@ class DidomiEventStreamHandler : EventChannel.StreamHandler, DidomiEventListener @Deprecated("SPI purposes are now displayed in preferences screen.", replaceWith = ReplaceWith("noticeClickMoreInfo")) override fun noticeClickViewSPIPurposes(event: NoticeClickViewSPIPurposesEvent) { - sendEvent("noticeClickViewSPIPurposes") + sendEvent("onNoticeClickViewSPIPurposes") } override fun noticeClickMoreInfo(event: NoticeClickMoreInfoEvent) { @@ -127,7 +127,7 @@ class DidomiEventStreamHandler : EventChannel.StreamHandler, DidomiEventListener @Deprecated("SPI purposes are now displayed in preferences screen.", replaceWith = ReplaceWith("noticeClickMoreInfo")) override fun preferencesClickViewSPIPurposes(event: PreferencesClickViewSPIPurposesEvent) { - sendEvent("preferencesClickViewSPIPurposes") + sendEvent("onPreferencesClickViewSPIPurposes") } override fun preferencesClickSaveChoices(event: PreferencesClickSaveChoicesEvent) { @@ -180,7 +180,7 @@ class DidomiEventStreamHandler : EventChannel.StreamHandler, DidomiEventListener @Deprecated("SPI purposes now trigger the same events as other purposes.", replaceWith = ReplaceWith("preferencesClickPurposeAgree")) override fun preferencesClickSPIPurposeAgree(event: PreferencesClickSPIPurposeAgreeEvent) { - sendEvent("preferencesClickSPIPurposeAgree", mapOf("purposeId" to event.purposeId)) + sendEvent("onPreferencesClickSPIPurposeAgree", mapOf("purposeId" to event.purposeId)) } @Deprecated("SPI purposes now trigger the same events as other purposes.", replaceWith = ReplaceWith("preferencesClickPurposeDisagree")) @@ -200,7 +200,7 @@ class DidomiEventStreamHandler : EventChannel.StreamHandler, DidomiEventListener @Deprecated("SPI purposes now trigger the same events as other purposes.", replaceWith = ReplaceWith("preferencesClickSaveChoices")) override fun preferencesClickSPIPurposeSaveChoices(event: PreferencesClickSPIPurposeSaveChoicesEvent) { - sendEvent("preferencesClickSPIPurposeSaveChoices") + sendEvent("onPreferencesClickSPIPurposeSaveChoices") } /* diff --git a/example/lib/events_helper.dart b/example/lib/events_helper.dart index b1f3db1..5f0ef7d 100644 --- a/example/lib/events_helper.dart +++ b/example/lib/events_helper.dart @@ -148,6 +148,19 @@ class EventsHelper { onEvent("Language has not changed: $reason"); }; + // DCS signature events + didomiListener.onDcsSignatureReady = () { + onEvent("DCS signature is ready"); + }; + didomiListener.onDcsSignatureError = () { + onEvent("DCS signature generation failed"); + }; + + // External SDKs integration events + didomiListener.onIntegrationError = (event) { + onEvent("Integration error on ${event.integrationName}: ${event.reason}"); + }; + // Widgets events didomiListener.onShowWidget = (event) { onEvent("Widget displayed (widgetId: ${event.widgetId}, layerName: ${event.layerName})"); diff --git a/lib/events/events_handler.dart b/lib/events/events_handler.dart index ccc9b31..269c7ed 100644 --- a/lib/events/events_handler.dart +++ b/lib/events/events_handler.dart @@ -238,6 +238,61 @@ class EventsHandler { } break; + /// SPI screen events + + case "onNoticeClickViewSPIPurposes": + for (var listener in listeners) { + // ignore: deprecated_member_use_from_same_package + listener.onNoticeClickViewSPIPurposes(); + } + break; + + case "onPreferencesClickViewSPIPurposes": + for (var listener in listeners) { + // ignore: deprecated_member_use_from_same_package + listener.onPreferencesClickViewSPIPurposes(); + } + break; + + case "onPreferencesClickSPIPurposeAgree": + final String spiPurposeAgreeId = event["purposeId"].toString(); + for (var listener in listeners) { + // ignore: deprecated_member_use_from_same_package + listener.onPreferencesClickSPIPurposeAgree(spiPurposeAgreeId); + } + break; + + case "onPreferencesClickSPIPurposeDisagree": + final String spiPurposeDisagreeId = event["purposeId"].toString(); + for (var listener in listeners) { + // ignore: deprecated_member_use_from_same_package + listener.onPreferencesClickSPIPurposeDisagree(spiPurposeDisagreeId); + } + break; + + case "onPreferencesClickSPICategoryAgree": + final String spiCategoryAgreeId = event["categoryId"].toString(); + for (var listener in listeners) { + // ignore: deprecated_member_use_from_same_package + listener.onPreferencesClickSPICategoryAgree(spiCategoryAgreeId); + } + break; + + case "onPreferencesClickSPICategoryDisagree": + final String spiCategoryDisagreeId = event["categoryId"].toString(); + for (var listener in listeners) { + // ignore: deprecated_member_use_from_same_package + listener.onPreferencesClickSPICategoryDisagree(spiCategoryDisagreeId); + } + break; + + case "onPreferencesClickSPIPurposeSaveChoices": + for (var listener in listeners) { + // ignore: deprecated_member_use_from_same_package + listener.onPreferencesClickSPIPurposeSaveChoices(); + } + break; + /// Consent events case "onVendorStatusChanged": @@ -304,13 +359,13 @@ class EventsHandler { /// DCS signature events - case "onDcsSignatureError": + case "onDCSSignatureError": for (var listener in listeners) { listener.onDcsSignatureError(); } break; - case "onDcsSignatureReady": + case "onDCSSignatureReady": for (var listener in listeners) { listener.onDcsSignatureReady(); } From 0ce88101a9ada026439d16eaf273d965d839888e Mon Sep 17 00:00:00 2001 From: Nicolas CHAIX Date: Tue, 4 Aug 2026 16:16:22 +0200 Subject: [PATCH 2/3] disable slack notification --- .github/workflows/publish.yml | 51 ++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d4ceabb..cc95279 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -29,28 +29,29 @@ jobs: skip_test: true dry_run: false - notify: - name: Notify Slack - needs: publish - # Release context is only available when triggered by a release (not workflow_dispatch) - if: github.event_name == 'release' - runs-on: ubuntu-latest - - steps: - - name: Send release announcement to Slack - env: - SLACK_WEBHOOK: ${{ secrets.RELEASES_SLACK_WEBHOOK }} - RELEASE_TAG: ${{ github.event.release.tag_name }} - RELEASE_BODY: ${{ github.event.release.body }} - RELEASE_URL: ${{ github.event.release.html_url }} - run: | - # Extract the changelog from the release body: - # drop the "More info" trailer and the leading "- " list markers. - # Trailing blank lines are stripped by the command substitution. - changelog=$(printf '%s\n' "$RELEASE_BODY" | tr -d '\r' | sed -e '/^More info:/,$d' -e 's/^- //') - - text=$(printf '*Flutter SDK version `%s`* is now available :rocket:\n```%s```\nhttps://pub.dev/packages/didomi_sdk/versions/%s\n%s' \ - "$RELEASE_TAG" "$changelog" "$RELEASE_TAG" "$RELEASE_URL") - - jq -n --arg text "$text" '{ text: $text }' \ - | curl --silent --show-error --fail -X POST -H 'Content-Type: application/json' -d @- "$SLACK_WEBHOOK" +# Disable notify steps: either use a dedicated webhook or look for expected parameters (message build from those params) +# notify: +# name: Notify Slack +# needs: publish +# # Release context is only available when triggered by a release (not workflow_dispatch) +# if: github.event_name == 'release' +# runs-on: ubuntu-latest +# +# steps: +# - name: Send release announcement to Slack +# env: +# SLACK_WEBHOOK: ${{ secrets.RELEASES_SLACK_WEBHOOK }} +# RELEASE_TAG: ${{ github.event.release.tag_name }} +# RELEASE_BODY: ${{ github.event.release.body }} +# RELEASE_URL: ${{ github.event.release.html_url }} +# run: | +# # Extract the changelog from the release body: +# # drop the "More info" trailer and the leading "- " list markers. +# # Trailing blank lines are stripped by the command substitution. +# changelog=$(printf '%s\n' "$RELEASE_BODY" | tr -d '\r' | sed -e '/^More info:/,$d' -e 's/^- //') +# +# text=$(printf '*Flutter SDK version `%s`* is now available :rocket:\n```%s```\nhttps://pub.dev/packages/didomi_sdk/versions/%s\n%s' \ +# "$RELEASE_TAG" "$changelog" "$RELEASE_TAG" "$RELEASE_URL") +# +# jq -n --arg text "$text" '{ text: $text }' \ +# | curl --silent --show-error --fail -X POST -H 'Content-Type: application/json' -d @- "$SLACK_WEBHOOK" From 28c9b7a1c8fd714dc28374434e4898f0732eb8f5 Mon Sep 17 00:00:00 2001 From: Nicolas CHAIX Date: Tue, 4 Aug 2026 19:58:32 +0200 Subject: [PATCH 3/3] remove SPI from change log - deprecated --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 55d858e..729450f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,6 @@ ## 2.31.0 - Update latest versions of native Android (2.47.0) and iOS (2.47.0) sdks. - Fix DCS signature events (`onDcsSignatureReady`, `onDcsSignatureError`) never being triggered. -- Fix SPI screen events never being triggered. ## 2.30.0 - Update latest versions of native Android (2.46.0) and iOS (2.46.0) sdks.