> ## Documentation Index
> Fetch the complete documentation index at: https://docs.encorekit.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> Every method, controller, and type in the encore_flutter plugin, with Dart signatures and platform differences

Contracts for the `encore_flutter` plugin: the methods you call, the controller you implement, and the types they exchange. Every symbol on these pages is exported from `package:encore_flutter/encore_flutter.dart`.

<Note>
  **Looking for integration guides?**

  * **New to Encore?** Start with the [Getting Started Guide](/quickstart) for portal-guided setup
  * **Step-by-step integration:** See the [Flutter Quickstart](/publishers/flutter/quickstart/install) for installation and configuration
  * **Wiring results into your app:** See [Integration Patterns](/publishers/flutter/guides/integration-patterns)
</Note>

## Core methods

<CardGroup cols={2}>
  <Card title="configure()" icon="gear" href="/publishers/flutter/sdk-reference/configure">
    Initialize the SDK with your public API key, purchase controller, and unlock mode
  </Card>

  <Card title="identify()" icon="user" href="/publishers/flutter/sdk-reference/identify">
    Associate your user ID with Encore for cross-device tracking
  </Card>

  <Card title="setUserAttributes()" icon="id-card" href="/publishers/flutter/sdk-reference/set-user-attributes">
    Merge structured attributes into the current user's profile
  </Card>

  <Card title="reset()" icon="rotate-left" href="/publishers/flutter/sdk-reference/reset">
    Clear the user ID and attributes on logout
  </Card>
</CardGroup>

## Presenting offers

<CardGroup cols={2}>
  <Card title="placement()" icon="wand-magic-sparkles" href="/publishers/flutter/sdk-reference/placement">
    Immutable builder for presenting offers, resolving to a result record
  </Card>

  <Card title="EncorePurchaseController" icon="credit-card" href="/publishers/flutter/sdk-reference/purchase-controller">
    The controller your app registers so purchases run through your billing code
  </Card>

  <Card title="outcomes" icon="signal-stream" href="/publishers/flutter/sdk-reference/outcomes">
    Broadcast stream of every placement resolution, for passive observers
  </Card>

  <Card title="setClaimEnabled()" icon="toggle-on" href="/publishers/flutter/sdk-reference/set-claim-enabled">
    Dim and disable the claim button on offer cards at runtime
  </Card>
</CardGroup>

## Types

<CardGroup cols={2}>
  <Card title="EncoreUserAttributes" icon="user-tag" href="/publishers/flutter/sdk-reference/user-attributes">
    Every user attribute, its format, and an example value
  </Card>

  <Card title="EncorePresentationResult" icon="square-check" href="/publishers/flutter/sdk-reference/presentation-result">
    The factual record a presentation resolves to
  </Card>

  <Card title="EncoreDismissReason" icon="xmark-circle" href="/publishers/flutter/sdk-reference/dismiss-reason">
    How a presented offer sheet went away
  </Card>
</CardGroup>

## Error handling

<CardGroup cols={2}>
  <Card title="Errors" icon="triangle-exclamation" href="/publishers/flutter/sdk-reference/errors">
    Error values on the result record, and the platform exceptions the plugin can raise
  </Card>
</CardGroup>

## Basic integration

```dart theme={null}
import 'package:encore_flutter/encore_flutter.dart';

// 1. Configure at launch, registering your purchase controller if your
//    app sells a product through Encore offers
await Encore.shared.configure(
  apiKey: 'pk_live_your_key',
  purchaseController: AppPurchases(),
);

// 2. Identify the user after login, and add attributes as you learn them
await Encore.shared.identify(userId: user.id);
await Encore.shared.setUserAttributes(
  EncoreUserAttributes(countryCode: 'US', language: 'en'),
);

// 3. Present an offer and branch on the result
final result = await Encore.placement('cancel_flow').show();
if (result.claim != null || result.publisher == EncorePublisherOutcome.purchased) {
  // The user claimed an offer or completed your purchase.
} else {
  proceedWithCancellation(); // dismissed, declined, nothing appeared, ...
}
```

<Note>
  `show()` never throws on iOS or Android. Failures arrive as `EncoreNotPresented` on the [`EncorePresentationResult`](./presentation-result), so fallback logic lives in one place.
</Note>

<Tip>
  For passive observation (analytics, logging, entitlement sync), listen to [`Encore.shared.outcomes`](./outcomes) once at startup instead of repeating the work at every call site.
</Tip>

## Platform support

The plugin runs on iOS and Android only; it bridges to the native Encore SDKs over platform channels, and all offer UI renders natively. Calls on web or desktop throw `MissingPluginException`. See [Errors](./errors#platform-exceptions).
