Skip to content

SDK-6019: Make Flutter ND plugin pure-Dart; surface attribution to client - #82

Merged
CTLalit merged 1 commit into
feat/SDK-6013-flutter-ios-podspec-version-floorfrom
feat/SDK-6019-flutter-pure-dart
Aug 13, 2026
Merged

SDK-6019: Make Flutter ND plugin pure-Dart; surface attribution to client#82
CTLalit merged 1 commit into
feat/SDK-6013-flutter-ios-podspec-version-floorfrom
feat/SDK-6019-flutter-pure-dart

Conversation

@CTLalit

@CTLalit CTLalit commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Jira: SDK-6019 — epic SDK-5820

Supersedes the native portions of #77 / #78 / #81 — makes the plugin pure-Dart and surfaces attribution to the host via callbacks. Part of stack #80 (6 PRs).


Attribution now flows through the host's clevertap_plugin Dart APIs, so the
ND plugin's native side is removed entirely and the plugin becomes pure Dart.
Supersedes the native portions of SDK-6009/6010/6013.

  • Remove flutter/android/ and flutter/ios/ (native plugin + the SDK-6013
    podspec); drop the flutter.plugin.platforms block from pubspec — now a
    regular Flutter/Dart package. Keep flutter/LICENSE.
  • NativeDisplayBridge slimmed to a pure-Dart helper: setLogLevel(NDLogLevel)
    and syncLogLevelFromCore(int) → NDLogger.syncFromCoreSdk (client-wins guard
    intact). All MethodChannel/EventChannel usage and fetchConfig/eventStream/
    pushEvent/pushViewed/pushClicked/getCoreDebugLevel removed.
  • Attribution surfaced to the host via NativeDisplayView callbacks:
    onNotificationViewed(unitId) — fired once per impression via ViewedUnitsTracker;
    onNotificationClicked(unitId, elementId, extras) — extras built by
    ActionAttributionExtras. New NotificationClickScope (mirrors UnitIdScope) lets
    elements read the callback from context. Host feeds these into
    clevertap_plugin pushDisplayUnitViewedEvent / pushDisplayUnitElementClickedEvent.
  • Re-lower the version floor: with compileSdk 36 gone, the binding constraint is
    webview_flutter 4.9.0 → Flutter 3.24 / Dart 3.5 (down from SDK-6013's 3.27).
  • Tests: replace native arg-shape tests with pure-Dart log-level tests; add
    native_display_attribution_test.dart (viewed once/impression, click extras).
  • gitignore the pub-generated flutter/.flutter-plugins* registrants.

flutter pub get resolves; flutter analyze clean; flutter test 213 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com


Stack created with GitHub Stacks CLIGive Feedback 💬

…ient

Attribution now flows through the host's clevertap_plugin Dart APIs, so the
ND plugin's native side is removed entirely and the plugin becomes pure Dart.
Supersedes the native portions of SDK-6009/6010/6013.

- Remove flutter/android/ and flutter/ios/ (native plugin + the SDK-6013
  podspec); drop the flutter.plugin.platforms block from pubspec — now a
  regular Flutter/Dart package. Keep flutter/LICENSE.
- NativeDisplayBridge slimmed to a pure-Dart helper: setLogLevel(NDLogLevel)
  and syncLogLevelFromCore(int) → NDLogger.syncFromCoreSdk (client-wins guard
  intact). All MethodChannel/EventChannel usage and fetchConfig/eventStream/
  pushEvent/pushViewed/pushClicked/getCoreDebugLevel removed.
- Attribution surfaced to the host via NativeDisplayView callbacks:
  onNotificationViewed(unitId) — fired once per impression via ViewedUnitsTracker;
  onNotificationClicked(unitId, elementId, extras) — extras built by
  ActionAttributionExtras. New NotificationClickScope (mirrors UnitIdScope) lets
  elements read the callback from context. Host feeds these into
  clevertap_plugin pushDisplayUnitViewedEvent / pushDisplayUnitElementClickedEvent.
- Re-lower the version floor: with compileSdk 36 gone, the binding constraint is
  webview_flutter 4.9.0 → Flutter 3.24 / Dart 3.5 (down from SDK-6013's 3.27).
- Tests: replace native arg-shape tests with pure-Dart log-level tests; add
  native_display_attribution_test.dart (viewed once/impression, click extras).
- gitignore the pub-generated flutter/.flutter-plugins* registrants.

flutter pub get resolves; flutter analyze clean; flutter test 213 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 83018470-0f8d-4f5b-950c-ce9fa67534bd

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@CTLalit
CTLalit merged commit 8d8eee2 into feat/SDK-5821-flutter-models Aug 13, 2026
1 check passed
@clevertap-heimdall clevertap-heimdall Bot added the type/refactor Internal restructuring with no behaviour change — tech-debt paydown label Aug 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type/refactor Internal restructuring with no behaviour change — tech-debt paydown

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant