---
metadata:
  - name: generator
    content: Diplodoc Platform v5.55.3
alternate:
  - https://yandex.com/support/varioqub-app/en/sdk/plugins/flutter/integration.md
  - https://yandex.com/support/varioqub-app/ru/sdk/plugins/flutter/integration.md
  - href: https://yandex.com/support/varioqub-app/en/sdk/plugins/flutter/integration.md
    type: text/markdown
    title: Markdown version
  - href: https://yandex.com/support/varioqub-app/en/llms.txt?revision=r20853974
    rel: describedby
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com/support/varioqub-app/en/llms.txt?revision=r20853974

# Varioqub Flutter integration

[Varioqub Flutter](https://github.com/appmetrica/varioqub-flutter-plugin) provides a complete suite of app analytics and marketing tools, supporting all major mobile platforms. It includes the Varioqub SDK support for [Android](https://yandex.com/support/varioqub-app/en/sdk/android/integration.md) and [iOS](https://yandex.com/support/varioqub-app/en/sdk/ios/integration.md).

**System requirements:**

- Flutter 2.0 or later.
- [pigeon 10.0](https://pub.dev/packages/pigeon) or later.


To use the Varioqub Flutter plugin, add and initialize the AppMetrica Flutter plugin. For more information on how to do this, see the [AppMetrica Flutter documentation](https://appmetrica.yandex.com/docs/en/sdk/flutter/analytics/quick-start).

Follow this step-by-step guide to enable and initialize Varioqub Flutter.

## General integration recommendations

1. When starting a new session, call the `activateConfig()` method to get the stored flag values.

1. Run `fetchConfig()` in the background to export the new flag values from the server and activate them when the next session starts.

1. We don't recommend calling the `activateConfig()` method mid-session because it can cause inconsistent app behavior.

## Step 1. Enable the Varioqub Flutter plugin {#integration}

From the root of the project, run the command:

```bash
flutter pub add varioqub_plugin
```

After adding the plugin, you'll see a line with the following dependency in the `pubspec.yaml` file:

```yaml
dependencies:
  varioqub_plugin: ^0.1.0
```

## Step 2. Initialize the library

1. Add `varioqub_plugin` import:

   ```js
   import 'package:varioqub_plugin/varioqub_plugin.dart';
   ```

1. Initialize the Varioqub library using the `initVarioqubWithAppMetricaAdapter()` method:

    ```javascript
    Varioqub.initVarioqubWithAppMetricaAdapter({
        clientId: 'appmetrica.1234567',
    });
    ```

To initialize the library, use the `initVarioqubWithAppMetricaAdapter(settings: VarioqubSettings)` method. It takes a `VarioqubSettings` object as a parameter.

Contains required and optional settings:

**Required**

- `clientId`: Project ID specified as `appmetrica.XXXXXX`, where _XXXXXX_ is the app ID from the AppMetrica interface. For example, `VarioqubSettings("appmetrica.1234567")`.

    <!-- source: en/sdk/_includes/application-id.md -->
    {% note tip %}

    You can find the app ID on the **Settings** page in AppMetrica: copy it from **General settings** → **App ID**.

    {% endnote %}
    <!-- endsource: en/sdk/_includes/application-id.md -->

**Optional**

- `clientFeatures`: List of custom parameters. For example, you can pass a flag indicating if the user is subscribed to newsletters.

- `fetchThrottleIntervalSeconds`: Interval between config updates, in seconds. This is only recommended for testing purposes.

- `url`: Changes the URL for server responses. Only used for testing.

- `logs`: Enables internal logging. To help us diagnose your problem, please enable logging and attach the log file with a description of the problem when submitting your support request.

- `activateEvent`: Sends an event when the flag configuration is activated. Event sending is enabled by default.

## Step 3. Set the default configuration

You can set a default configuration so your app uses the required parameter values before it connects to a server with remote configuration. To do this, pass the list of parameters using the method `setDefaults(Map<String,String> defaults)`.

You can download the default XML configuration file on the [Flag configuration](https://yandex.com/support/varioqub-app/en/web/config.md#create) page.

## Step 4. Run a background update of the flag configuration and activate it

To use the most recent flag configuration from the interface, run a background configuration update using the `fetchConfig()` method.

Each time you receive the latest version of the configuration (most often this occurs when starting a new session), you need to activate it using the `activateConfig()` method.

<!-- source: en/sdk/_includes/config-note.md -->
{% note tip %}

Main use case:

Regularly download the configuration and activate it when the app is launched. That guarantees your flags won't change during user sessions. We recommend launching activation as soon as possible.

{% endnote %}
<!-- endsource: en/sdk/_includes/config-note.md -->

```javascript
Varioqub.fetchConfig().then((value) {
    if (value.status == 0) {
        Varioqub.activateConfig();
    } else {
        log("Error while fetching config - ${value.error}");
    }
});
```

## Getting flags from the interface

Flag values are retrieved and returned in the following order:

1. Flag is present in the experiment.
2. Flag is present in the loaded configuration.
3. Flag is present in the default configuration.

Flag getters:

- `Varioqub.getString(key, default)`.

Code example:

```javascript
Varioqub.getString("key", "default_value");
```

## Obtaining the device ID to test the experiment {#get-id}

To get the device ID, use the `Varioqub.getId()` method:

```javascript
Varioqub.getId();
```

<!-- source: en/sdk/_includes/getid-empty.md -->
{% note info %}

Before the first successful `fetchConfig` call, the `Varioqub.getId()` method may return empty responses.

{% endnote %}
<!-- endsource: en/sdk/_includes/getid-empty.md -->

To learn more about creating and testing experiments, see [Creating an experiment](https://yandex.com/support/varioqub-app/en/web/create.md).


<!-- source: en/_includes/feedback.md -->
<details>
    <summary class="button">Contact support</summary>
    <div style="padding: 15px;
     margin: 10px 0;
     background: #FFFFFF;
     border-radius: 10px;
     border: 1px solid var(--yc-color-line-generic);">
     <iframe style="background: #FFFFFF;"
        height="700"
        width="100%"
        frameborder="0"
        src="https://forms.yandex.com/surveys/2617/?iframe=1&lang=en">
    </iframe>
</details>


<!-- endsource: en/_includes/feedback.md -->

