{"id":32268853,"url":"https://github.com/usercentrics/flutter-sdk","last_synced_at":"2026-02-21T02:02:08.589Z","repository":{"id":37866942,"uuid":"416296210","full_name":"Usercentrics/flutter-sdk","owner":"Usercentrics","description":"Usercentrics Flutter SDK","archived":false,"fork":false,"pushed_at":"2026-01-27T14:50:09.000Z","size":1696,"stargazers_count":6,"open_issues_count":0,"forks_count":12,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-01-28T01:45:05.516Z","etag":null,"topics":["applications","cmp","flutter","mobile","privacy"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/usercentrics_sdk","language":"Dart","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Usercentrics.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-10-12T10:48:08.000Z","updated_at":"2026-01-27T14:51:23.000Z","dependencies_parsed_at":"2023-11-17T16:45:48.302Z","dependency_job_id":"9b6fd804-2366-41b5-8a4e-aed99604b25f","html_url":"https://github.com/Usercentrics/flutter-sdk","commit_stats":{"total_commits":45,"total_committers":7,"mean_commits":6.428571428571429,"dds":0.5111111111111111,"last_synced_commit":"497989a1738d41b63c17b622c2dd5046da8c398d"},"previous_names":[],"tags_count":75,"template":false,"template_full_name":null,"purl":"pkg:github/Usercentrics/flutter-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Usercentrics%2Fflutter-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Usercentrics%2Fflutter-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Usercentrics%2Fflutter-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Usercentrics%2Fflutter-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Usercentrics","download_url":"https://codeload.github.com/Usercentrics/flutter-sdk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Usercentrics%2Fflutter-sdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29671513,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T00:11:43.526Z","status":"online","status_checked_at":"2026-02-21T02:00:07.432Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["applications","cmp","flutter","mobile","privacy"],"created_at":"2025-10-22T22:18:58.366Z","updated_at":"2026-02-21T02:02:08.583Z","avatar_url":"https://github.com/Usercentrics.png","language":"Dart","readme":"\u003cimg src=\"https://i.ibb.co/Pr2KmHg/uc-logo.png\" height=\"110\" alt=\"Usercentrics\" /\u003e\n\n# Usercentrics\n\n\u003cp align=\"left\"\u003e\n  \u003ca href=\"https://github.com/Usercentrics/flutter-sdk/actions/workflows/ci.yml\"\u003e\n    \u003cimg alt=\"build and test status\" src=\"https://github.com/Usercentrics/flutter-sdk/actions/workflows/ci.yml/badge.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://pub.dev/packages/usercentrics_sdk\"\u003e\n    \u003cimg alt=\"Version\" src=\"https://img.shields.io/pub/v/usercentrics_sdk\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://twitter.com/intent/follow?screen_name=usercentrics\"\u003e\n    \u003cimg src=\"https://img.shields.io/twitter/follow/usercentrics?style=social\u0026logo=twitter\"\n            alt=\"follow on Twitter\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n# Already a customer?\n\nIn case you wish to report an issue, we provide a [dedicated page](https://usercentricssupport.zendesk.com/hc/en-us/requests/new) specifically for this purpose. By accessing the provided link and submitting a ticket our team will address your concerns with the utmost efficiency, ensuring a prompt resolution.\n\n# Welcome!\n\nYou are now one step closer from making **privacy** a core feature in your application. We are very happy that you decided to make this a priority. We are here to help you **build trust** with your users.\n\n## The Usercentrics Apps SDK\nThe Usercentrics Apps SDK is a native Consent Management Platform solution for mobile apps, mobile games \u0026 TV applications, that enables the collection, documentation, and management of your user's privacy choices, in order to ensure legal compliance for legal regulations around the world.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://docs.usercentrics.com/cmp_in_app_sdk/latest/assets/media/predefinedUI.png\" alt=\"Usercentrics UI\" /\u003e\n\u003c/p\u003e\n\n## Requirements\n\n* Dart 2.17.1 or higher\n* Flutter 1.20.0 or higher\n* Android 4.1 (API 16) or higher with Kotlin 1.5 or higher\n* iOS 11 or higher\n\nTo meet the requirements:\n\n\u003cdetails\u003e\n\u003csummary\u003eAndroid with Kotlin version lower than 1.5\u003c/summary\u003e\n\u003cp\u003e\n\nIf you have an incompatible Kotlin version you may see the following error when you run app on Android:\n\n```\ne: Incompatible classes were found in dependencies. Remove them from the classpath or use '-Xskip-metadata-version-check' to suppress errors\n```\n\nThis error is easy to solve, you only need to increase the version that is usually in the `android/build.gradle` file. Use a recent stable Kotlin version, for example: `1.5.31`.\n\n![build.gradle](https://i.ibb.co/vBv9Tcy/kotlin-version.png)\n\n\u003c/p\u003e\n\u003c/details\u003e  \n\n\u003cdetails\u003e\n\u003csummary\u003eAndroid version lower than 5.0 (API 21)\u003c/summary\u003e\n\u003cp\u003e\n\nIf you support an Android version lower than 5.0 (API 21) and you don't have the [multidex](https://developer.android.com/studio/build/multidex) enabled in your project, you may see the following error when you run your app on Android:\n\n```\nD8: Cannot fit requested classes in a single dex file (# methods: 66055 \u003e 65536)\n```\n\nYou can change the minimum version of your application to 5.0 (API 21). That configuration is usually in the `android/app/build.gradle` file. Make sure that `minSdkVersion` is `21` or higher.\n\n![Multidex dependency](https://i.ibb.co/HXrzbWw/multidex-version.png)\n\nAlthough Android 5.0 version already supports 99% of all devices, if you still want to have support for Android 4.1 (API 16) you have to do the following:\n\n1. Add the multidex library to your application dependencies that is usually in the `android/app/build.gradle` file.\n\n```groovy\nimplementation \"androidx.multidex:multidex:2.0.1\"\n```\n\n![Multidex dependency](https://i.ibb.co/m9Y0YKx/multidex-dep.png)\n\n2. Enable the option in the application build `defaultConfig`. It is usually in the same `android/app/build.gradle` file.\n\n```groovy\nmultiDexEnabled true\n```\n\n![Multidex enabled](https://i.ibb.co/9pHd0DS/multidex-enabled.png)\n\n3. Make your application class initialize multidex. There are several options to do that, in Flutter the easiest way is to add it to the manifest. The manifest is usually located at `android/app/src/main/AndroidManifest.xml`.\n\n```groovy\nandroid:name=\"androidx.multidex.MultiDexApplication\"\n```\n\n![Multidex application](https://i.ibb.co/41zFWt5/multidex-application.png)\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eiOS version lower than 11\u003c/summary\u003e\n\u003cp\u003e\n\nIf you have a iOS target version lower than **11** or you have no version at all (it defaults to version 9) you may see the following error when you run your app on iOS:\n\n```\n[!] Automatically assigning platform `iOS` with version `9.0` on target `Runner` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.\n```\n\nThis error is easy to solve, you have to do the following:\n\n1. Define or increase the version of your Podfile at least to version 11. It is usually located at `ios/Podfile`.\n\n```ruby\nplatform :ios, '11.0'\n```\n\n![Podfile](https://i.ibb.co/rxScM0n/ios-target-podfile.png)\n\n2. Run `flutter pub get` again and open the iOS project using Xcode. It is usually located at `ios/Runner.xcworkspace`. Now, you have to select the `Runner` project and change the `Deployment Target` to the same version.\n\n![Xcode Project](https://i.ibb.co/CJ6tRq3/ios-target-project.png)\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n## Get started!\n\nIn order to use and test the SDK, you will need a Usercentrics Account. Get [started with a free trial](https://usercentrics.com/in-app-sdk/).\n\n## Integration\n\nContinue to our [documentation](https://usercentrics.com/docs/apps/intro/) for a step by step integration guide.\n\n## Example\n\nSee the [example](https://github.com/Usercentrics/flutter-sdk/tree/master/example) directory for a complete sample app using Usercentrics.\n\n## Testing\n\nYou can use your own Usercentrics to test the integration or any other functionality. \n\n1. Implement your own `UsercentricsPlatform` manually or using a mock library such as `mockito`:\n\n```dart\nclass FakeUsercentrics extends UsercentricsPlatform {\n  ...\n}\n```\n\n2. Inject your instance in the testing `delegatePackingProperty` variable:\n\n```dart\ntestWidgets('Initializes Usercentrics', (WidgetTester tester) async {\n  final usercentrics = FakeUsercentrics();\n  Usercentrics.delegatePackingProperty = usercentrics;\n\n  await tester.pumpWidget(const MyApp());\n\n  expect(usercentrics.initializeCount, 1);\n});\n```\n\n3. Clear the instance after the test in order to prevent the tests from interfering with each other:\n```dart\ntearDown(() {\n  Usercentrics.delegatePackingProperty = null;\n});\n```\n\n## Maintainers\n- [Usercentrics](https://github.com/Usercentrics)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusercentrics%2Fflutter-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fusercentrics%2Fflutter-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusercentrics%2Fflutter-sdk/lists"}