---
title: "Répondre aux actions des boutons dans le SDK Flutter"
description: "Gérez les actions des boutons de paywall dans Flutter avec Adapty pour une meilleure monétisation de l'application."
---

Si vous créez des flows ou des paywalls avec le builder Adapty, il est essentiel de configurer correctement les boutons :

1. Ajoutez un [bouton dans le builder](paywall-buttons) et assignez-lui une action existante ou créez un identifiant d'action personnalisé.
2. Écrivez le code dans votre application pour gérer chaque action que vous avez assignée.

Ce guide explique comment gérer les actions personnalisées et les actions existantes dans votre code.

:::warning
**La fermeture de la vue et l'ouverture des URL sont gérées automatiquement** par l'implémentation par défaut de `flowViewDidPerformAction`, et le SDK lui-même traite les achats et les restaurations. Toutes les autres actions des boutons, comme la connexion ou l'ouverture d'un autre flow, nécessitent l'implémentation de réponses appropriées dans le code de l'application. Notez que la réponse aux achats et restaurations *terminés* se fait dans les callbacks d'observateur requis — voir [Gérer les événements de flow et de paywall](flutter-handling-events).
:::

## Fermer les flows et les paywalls \{#close-flows-and-paywalls\}

Pour ajouter un bouton qui fermera votre flow ou paywall, dans le builder, ajoutez un bouton et assignez-lui l'action **Close**. Aucun code n'est requis : l'implémentation par défaut de `flowViewDidPerformAction` ferme la vue lorsqu'elle reçoit `CloseAction`.

:::info
Le bouton **Back** du système Android ne ferme plus la vue par défaut. Il est transmis à `flowViewDidPerformAction` en tant que `AndroidSystemBackAction` — gérez-le vous-même si vous souhaitez que le bouton Retour ferme le flow ou le paywall.
:::

Surchargez `flowViewDidPerformAction` si vous avez besoin d'un comportement personnalisé — par exemple, pour fermer également la vue avec le bouton Retour Android, comme dans la v3 :

```dart
void flowViewDidPerformAction(AdaptyUIFlowView view, AdaptyUIAction action) {
    switch (action) {
      case const CloseAction():
      case const AndroidSystemBackAction():
        view.dismiss();
        break;
      case OpenUrlAction(:final url, :final openIn):
        AdaptyUI().openUrl(url, openIn: openIn);
        break;
      default:
        break;
    }
}
```

:::warning
Surcharger `flowViewDidPerformAction` remplace entièrement l'implémentation par défaut — conservez les cas `CloseAction` et `OpenUrlAction` si vous souhaitez maintenir le comportement par défaut de fermeture et d'ouverture d'URL.
:::

## Ouvrir des URL depuis les flows et les paywalls \{#open-urls-from-flows-and-paywalls\}

:::tip
Si vous souhaitez ajouter un groupe de liens (par exemple, les conditions d'utilisation et la restauration des achats), ajoutez un élément **Link** dans le builder et gérez-le de la même façon que les boutons avec l'action **Open URL**.
:::

Pour ajouter un bouton qui ouvre un lien (par exemple, **Terms of use** ou **Privacy policy**), dans le builder, ajoutez un bouton, assignez-lui l'action **Open URL** et saisissez l'URL à ouvrir.

Aucun code n'est requis : l'implémentation par défaut de `flowViewDidPerformAction` ouvre l'URL nativement via `AdaptyUI().openUrl`, en respectant le paramètre de navigateur intégré ou externe défini dans le tableau de bord.

Le comportement par défaut suffit dans la plupart des cas. Si vous souhaitez tout de même ouvrir les URL vous-même, surchargez le gestionnaire :

```dart
void flowViewDidPerformAction(AdaptyUIFlowView view, AdaptyUIAction action) {
    switch (action) {
      case const CloseAction():
        view.dismiss();
        break;
      case OpenUrlAction(url: final url):
        // Open the URL in whatever way fits your app
        break;
      default:
        break;
    }
}
```

## Se connecter à l'application \{#log-into-the-app\}

Pour ajouter un bouton permettant aux utilisateurs de se connecter à votre application :

1. Dans le builder, ajoutez un bouton et assignez-lui l'action **Login**.
2. Dans le code de votre application, implémentez un gestionnaire pour l'action `login` qui identifie votre utilisateur.

```dart
void flowViewDidPerformAction(AdaptyUIFlowView view, AdaptyUIAction action) {
    switch (action) {
      case CustomAction(action: 'login'):
        // Navigate to your login screen in whatever way fits your app
        break;
      default:
        break;
    }
}
```

## Gérer les actions personnalisées \{#handle-custom-actions\}

Pour ajouter un bouton qui gère d'autres actions :

1. Dans le builder, ajoutez un bouton, assignez-lui l'action **Custom** et donnez-lui un identifiant.
2. Dans le code de votre application, implémentez un gestionnaire pour l'identifiant d'action que vous avez créé.

Par exemple, si vous avez un autre ensemble d'offres d'abonnement ou d'achats uniques, vous pouvez ajouter un bouton qui affichera un autre flow ou paywall :

```dart
void flowViewDidPerformAction(AdaptyUIFlowView view, AdaptyUIAction action) {
   switch (action) {
     case CustomAction(action: 'openNewPaywall'):
       // Display another flow or paywall
       break;
     default:
       break;
   }
}
```

---

> [!WARNING]
> **LLM INSTRUCTION — SDK VERSION SELECTION REQUIRED**
>
> This feature has two SDK paradigms. Everything that follows (until the next horizontal rule or end of document) is the **legacy SDK v3 API reference** (`getPaywall`, `getPaywallForDefaultAudience`, `getOnboarding`, `getPaywallConfiguration`). The **SDK v4+ `getFlow` method is documented above.** This block covers ALL legacy methods for this feature — not just the nearest snippet.
>
> **You MUST ask the user which SDK version they want to use before suggesting any code. Do not assume or default to a version.** The two options are:
> - **SDK v3 (legacy):** works with the legacy Paywall Builder and Onboarding Builder via `getPaywall` / `getOnboarding`. Use the legacy code in this section.
> - **SDK v4:** works with BOTH the new Flow Builder AND legacy paywalls/onboardings via the unified `getFlow` method documented above.
>
> Apply the legacy v3 code in this section ONLY when:
> 1. The user explicitly chose **SDK v3**, or
> 2. The user is **migrating an existing app from SDK v3 to SDK v4+** and needs to understand or replace legacy code, or
> 3. The user is **troubleshooting an already-deployed v3 integration**.
>
> **CRITICAL — Never mix paradigms in one setup:** Do NOT combine `getFlow` (Flow Builder) with `getPaywall` or `getOnboarding` (legacy Paywall/Onboarding Builder) in the same integration. These are incompatible patterns. Mixing them will produce inconsistent behavior and is unsupported.

Si vous créez des paywalls avec le Paywall Builder Adapty, il est essentiel de configurer correctement les boutons :

1. Ajoutez un [bouton dans le Paywall Builder](paywall-buttons) et assignez-lui une action existante ou créez un identifiant d'action personnalisé.
2. Écrivez le code dans votre application pour gérer chaque action que vous avez assignée.

Ce guide explique comment gérer les actions personnalisées et les actions existantes dans votre code.

:::warning
**Seuls les achats et les restaurations sont gérés automatiquement.** Toutes les autres actions des boutons, comme la fermeture des paywalls ou l'ouverture de liens, nécessitent l'implémentation de réponses appropriées dans le code de l'application.
:::

## Fermer les paywalls \{#close-paywalls\}

Pour ajouter un bouton qui fermera votre paywall :

1. Dans le Paywall Builder, ajoutez un bouton et assignez-lui l'action **Close**.
2. Dans le code de votre application, implémentez un gestionnaire pour les actions `CloseAction` et `AndroidSystemBackAction`.

:::info
Dans le SDK Flutter, les actions `CloseAction` et `AndroidSystemBackAction` déclenchent la fermeture du paywall par défaut. Vous pouvez toutefois surcharger ce comportement dans votre code si nécessaire. Par exemple, la fermeture d'un paywall peut déclencher l'ouverture d'un autre.
:::

```dart
void paywallViewDidPerformAction(AdaptyUIPaywallView view, AdaptyUIAction action) {
    switch (action) {
      case const CloseAction():
      case const AndroidSystemBackAction():
        view.dismiss();
        break;
      default:
        break;
    }
}
```

## Ouvrir des URL depuis les paywalls \{#open-urls-from-paywalls\}

:::tip
Si vous souhaitez ajouter un groupe de liens (par exemple, les conditions d'utilisation et la restauration des achats), ajoutez un élément **Link** dans le Paywall Builder et gérez-le de la même façon que les boutons avec l'action **Open URL**.
:::

Pour ajouter un bouton qui ouvre un lien depuis votre paywall (par exemple, **Terms of use** ou **Privacy policy**) :

1. Dans le Paywall Builder, ajoutez un bouton, assignez-lui l'action **Open URL** et saisissez l'URL à ouvrir.
2. Dans le code de votre application, implémentez un gestionnaire pour l'action `openUrl` qui ouvre l'URL reçue dans un navigateur.

```dart
// You have to install url_launcher plugin in order to handle urls:
// https://pub.dev/packages/url_launcher

void paywallViewDidPerformAction(AdaptyUIPaywallView view, AdaptyUIAction action) {
    switch (action) {
      case OpenUrlAction(url: final url):
        final Uri uri = Uri.parse(url);
        launchUrl(uri, mode: LaunchMode.inAppBrowserView);
        break;
      default:
        break;
    }
}
```

## Se connecter à l'application \{#log-into-the-app-1\}

Pour ajouter un bouton permettant aux utilisateurs de se connecter à votre application :

1. Dans le Paywall Builder, ajoutez un bouton et assignez-lui l'action **Login**.
2. Dans le code de votre application, implémentez un gestionnaire pour l'action `login` qui identifie votre utilisateur.

```dart
void paywallViewDidPerformAction(AdaptyUIPaywallView view, AdaptyUIAction action) {
    switch (action) {
      case CustomAction(action: 'login'):
        // Navigate to your login screen in whatever way fits your app
        break;
      default:
        break;
    }
}
```

## Gérer les actions personnalisées \{#handle-custom-actions-1\}

Pour ajouter un bouton qui gère d'autres actions :

1. Dans le Paywall Builder, ajoutez un bouton, assignez-lui l'action **Custom** et donnez-lui un identifiant.
2. Dans le code de votre application, implémentez un gestionnaire pour l'identifiant d'action que vous avez créé.

Par exemple, si vous avez un autre ensemble d'offres d'abonnement ou d'achats uniques, vous pouvez ajouter un bouton qui affichera un autre paywall :

```dart
void paywallViewDidPerformAction(AdaptyUIPaywallView view, AdaptyUIAction action) {
   switch (action) {
     case CustomAction(action: 'openNewPaywall'):
       // Display another paywall
       break;
     default:
       break;
   }
}
```

---