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

# Flutter

> Integrating Verisoul in Flutter Apps

*To run the SDK a Verisoul Project ID is required.* Schedule a call [here](https://meetings.hubspot.com/henry-legard) to get started.

## System Requirements

* Flutter SDK 3.0 or higher
* Dart 2.17 or higher
* iOS 14.0 or higher
* Android API level 24 (Android 7.0) or higher
* For Web: Modern browsers with JavaScript enabled
* SDK Size: \~120 KB (plus native iOS and Android SDK dependencies)

## Installation

### Add Dependency

```yaml theme={null}
dependencies:
  flutter:
    sdk: flutter
  #  ...

  verisoul_sdk: 0.4.65
```

### Android Configuration

#### 1. Update Minimum SDK Version

Update the Android minimum `minSdk` to **24** in `android/app/build.gradle`:

```groovy theme={null}
 defaultConfig {
    minSdk = 24
    //...
}
```

#### 2. Add Maven Repository

If an exception occurs during the build stating that the `ai.verisoul:android` package cannot be downloaded, add the following Maven repository inside your `android/build.gradle` file:

```groovy theme={null}
allprojects {
    repositories {
    // ...

     maven { url = uri("https://us-central1-maven.pkg.dev/verisoul/android") }

    }
 }
```

### iOS Configuration

For iOS-specific configuration including Device Check and App Attest setup, please refer to the [iOS SDK Documentation](/integration/frontend/ios#ios-device-check).

## Usage

### Initialize the SDK

Call `configure()` when your application starts, before running your app:

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

void main() {
   WidgetsFlutterBinding.ensureInitialized();
   VerisoulSdk.configure(projectId: "Project ID ", environment: VerisoulEnvironment.prod);
   runApp(const MyApp());
}
```

The `configure()` method initializes the Verisoul SDK with your project credentials. This method must be called once when your application starts.

**Parameters:**

* `projectId`: Your unique Verisoul project identifier
* `environment`: The environment to use `VerisoulEnvironment.prod` for production or `VerisoulEnvironment.sandbox` for testing

### Get Session ID

The `getSessionApi()` method returns the current session identifier after the SDK has collected sufficient device data. This session ID is required to request a risk assessment from Verisoul's API.

**Important Notes:**

* Session IDs are short-lived and expire after 24 hours
* The session ID becomes available once minimum data collection is complete (typically within seconds)
* You should send this session ID to your backend, which can then call Verisoul's API to get a risk assessment

**Example:**

```dart theme={null}
final session = await VerisoulSdk.getSessionApi();
```

### Provide Touch Events

Wrap your App with `VerisoulWrapper` to automatically capture touch events:

```dart theme={null}
runApp(VerisoulWrapper(child: const MyApp()));
```

## Web Support

### Add Verisoul Script

Add the Verisoul script to your `web/index.html`:

```html theme={null}
<script
  async
  src="https://js.verisoul.ai/{env}/bundle.js"
  verisoul-project-id="{project_id}"
></script>
```

**Replace the following parameters:**

* **`{env}`**: Use either `prod` or `sandbox`
* **`{project_id}`**: Your project ID, which must match the environment

### Content Security Policy (CSP)

If your application has a Content Security Policy, update it to include the following Verisoul domains:

```html theme={null}
<meta
  http-equiv="Content-Security-Policy"
  content="script-src 'self' https://js.verisoul.ai; worker-src 'self' blob: data:;connect-src 'self' https://*.verisoul.ai wss://*.verisoul.ai;"
/>
```

### Set Account Data (Web Only)

The `setAccountData()` function provides a simplified way to send user account information to Verisoul directly from the client side. While easy to integrate, this method has important limitations:

* **Offline analysis only**: Data sent via account() is only visible in the Verisoul dashboard
* **No real-time decisions**: Unlike the server-side API, this method doesn't allow your application to receive and act on Verisoul's risk scores in real-time
* **Limited use case**: Designed specifically for initial pilots and evaluation purposes

```dart theme={null}
await VerisoulSdk.setAccountData(
  id: "example-id",
  email: "example@example.com",
  metadata: {"paid": true}
);
```

### Error Codes

The SDK throws `VerisoulException` with the following error codes:

| Error Code                 | Description                                                                                                                                                | Recommended Action                                                                                                  |
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| INVALID\_ENVIRONMENT       | The environment parameter passed to `Verisoul.configure()` is invalid. Valid values are "dev", "sandbox", or "prod".                                       | Ensure the environment parameter is exactly "dev", "sandbox", or "prod" (case-sensitive, no whitespace).            |
| SESSION\_UNAVAILABLE       | A valid session ID could not be obtained. This typically occurs when Verisoul's servers are unreachable due to network blocking or a very slow connection. | Implement exponential backoff. Prompt user to check network or disable network blocker.                             |
| WEBVIEW\_UNAVAILABLE       | WebView is not available on the device. This can occur when WebView is disabled, missing, uninstalled, or corrupted on the device.                         | Prompt user to enable WebView in settings, update Android System WebView, or switch devices.                        |
| WEBVIEW\_RENDERER\_CRASHED | The WebView renderer process crashed, typically due to low memory or resource pressure.                                                                    | Retry the request (SDK will attempt recovery), encourage users to update Android System WebView, or switch devices. |

#### Exception Structure

All errors are thrown as `VerisoulException` with the following properties:

| Property | Type       | Description                                             |
| -------- | ---------- | ------------------------------------------------------- |
| code     | String     | One of the error codes above                            |
| message  | String     | Human-readable error description                        |
| cause    | Throwable? | The underlying exception that caused the error (if any) |

## Example

For a complete working example, see the [Flutter Sample App](/examples/flutter-sample-app).

## Additional Resources

* [Verisoul Flutter SDK on Pub.dev](https://pub.dev/packages/verisoul_sdk)
