Skip to main content
The Courier Flutter SDK gives you prebuilt widgets and Dart APIs. It handles authentication, token management, and real-time delivery on iOS and Android. This page is the Flutter reference: what to install, how to configure both native projects, and the Dart API surface. Each flow is written once and applies to every platform. Available on GitHub and pub.dev.
The SDK’s intl dependency (>=0.19.0 <1.0.0) is incompatible with Flutter 3.32+ (Dart 3.7+), which ships intl 1.0. On dependency resolution errors, pin intl: ^0.19.0 in your pubspec.yaml or wait for an SDK update that widens the constraint.

Installation

iOS setup

Update your deployment target to iOS 15+, then install the CocoaPod:
In ios/Runner/AppDelegate.swift, inherit from CourierFlutterDelegate. It is what carries the APNs token and the push callbacks into Dart.

Android setup

1

Add the Jitpack repository

In your android/build.gradle:
2

Set minimum SDK version

In your app/build.gradle:
Your app must support at least Gradle 8.4.
3

Extend CourierFlutterActivity

In MainActivity. This is what lets the SDK persist user state across app sessions.

Authentication

Courier authenticates with a JWT that your backend mints with your Courier API key, never in client code. covers the token flow, scope strings, reading auth state, signing out, and token refresh. Using the EU datacenter? See . Credentials persist across app sessions, so you sign in once per user rather than on every launch.

Inbox

is the setup flow. These are the types it uses on Flutter. Every callback and action these expose is documented per platform in .
Custom Inbox list item rendering

A list item rendered by the app instead of the prebuilt widget

Inbox needs the enabled in your workspace.

Inbox theme

With no CourierInboxTheme, the widget takes its styling from your app’s Flutter Theme:
  • Button style from Theme.of(context).elevatedButtonTheme.style
  • Loading and unread indicator color from Theme.of(context).primaryColor
  • Text styles from Theme.of(context).textTheme
Pass a theme to override those. Light and dark themes are separate.
Default Inbox on iOSDefault Inbox on Android

Default Inbox on iOS and Android

Styled Inbox on iOSStyled Inbox on Android

Styled Inbox on iOS and Android

Branding from also applies. The SDK reads primary color and footer visibility from your brand settings.

Push notifications

is the setup flow, from connecting APNs and FCM to a device that receives push. It covers the native wiring above, setTokenForProvider, permission, and reading the payload on tap.
Push notifications require a physical device. Simulators and emulators don’t reliably support push token registration or notification delivery.
On iOS, add a to track delivery while your app is closed.

Preferences

is the setup flow. These are the types it uses on Flutter.
Topics and sections are configured in the . See for how preference enforcement works at send time.

Preferences theme

Light and dark themes are separate, and applies automatically when you supply a brandId.

Default and styled Preferences on Flutter

CourierClient

For advanced use cases, CourierClient is a low-level wrapper around the Courier API. Each client holds its own credentials, so you can spin up as many as you need.

Initialization

Token management

Inbox

Preferences

Branding

URL tracking

Pass any tracking URL found inside a push notification payload or inbox message:
See the full Courier API reference at .