Flutter federated plugin (Melos monorepo) wrapping the Sourcepoint CMP SDKs for Android & iOS, plus optional WebView extensions. Uses FVM-pinned Flutter SDK at .fvm/flutter_sdk. Always invoke Dart/Flutter via fvm (e.g. fvm flutter ..., fvm dart ...).
sourcepoint_unified_cmp— app-facing plugin +example/appsourcepoint_unified_cmp_platform_interface— platform interface (Pigeon-generated messages)sourcepoint_unified_cmp_android(Kotlin) /sourcepoint_unified_cmp_ios(Swift) — native implementationssourcepoint_unified_cmp_flutter_webview_extension,..._flutter_inappwebview_extension— optional webview integrations (with example apps)
- Bootstrap:
melos bootstrap(after./setup_environment.shfor a clean env) - Analyze:
melos run analyze· Format everything:melos run format:all(needsswiftformat,ktlint) - All tests + coverage + cspell:
melos run test:all· Per-package tests:melos run test - Single test:
cd packages/<pkg> && fvm flutter test test/path/to_foo_test.dart --plain-name "name" - Codegen:
melos run generate:pigeon:all,melos run generate:mocks:all - Run example app:
melos run run:example -- -d <device>(variants:run:example:spm,run:example:flutter_webview,run:example:flutter_inappwebview) - Coverage gate:
melos run check-coverage(≥20%, generated*.g.dartexcluded)
- Dart lints:
very_good_analysis5.1.0 (strict;example/excluded). Follow effective-Dart naming:lowerCamelCasemembers,UpperCamelCasetypes,snake_casefiles. Preferfinal/const, trailing commas, single-quoted strings, relative imports inside a package, package imports across packages. Never edit generated*.g.dart/ Pigeon outputs by hand. - Swift:
swiftformat .(see.swiftformat). Kotlin:ktlint --format(skip**/*.g.kt). - Errors: surface via Pigeon
FlutterErrorfrom native; on Dart side use typed exceptions andResult-style returns where present—don’t swallow errors. - Commit hygiene: keep changelogs per-package (Melos manages versioning); don’t hand-bump versions.