---
title: "Platform adapters"
canonical_url: "https://www.nutrient.io/guides/flutter/platform-adapters/"
md_url: "https://www.nutrient.io/guides/flutter/platform-adapters.md"
last_updated: "2026-07-31T00:00:00.000Z"
description: "Reach the native Android, iOS, and Web SDKs from Flutter by subclassing a platform adapter — the controller behind every NutrientDocumentView."
---

Nutrient Flutter SDK includes platform adapters for extending viewer behavior. Platform adapters give you direct access to the native Nutrient PDF SDKs on Android, iOS, and Web when the cross-platform API doesn’t cover your use case.

Every `NutrientDocumentView` uses an adapter as its controller. This means one object gives you access to the cross-platform API and the native SDK.

Most apps only need the built-in controller. Use the cross-platform API on `controller.document` and `controller.events` for document operations and events that work the same way across platforms. Subclass a platform adapter only when you need native behavior that the cross-platform API doesn’t expose.

Starting with Nutrient Flutter SDK 6, document, annotation, form, bookmark, and event operations use the same bindings architecture. Use platform adapters to access native APIs instead of raw `MethodChannel` calls or the generated Pigeon bridge.

## When you need an adapter

Use this table to choose the right approach for your app:

| You need…                                                                                                            | Use                                                                        |
| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| To view a document and use the **cross-platform API** — annotations, bookmarks, forms, save/export, the event stream | A bare `NutrientDocumentView(...)` — no adapter                            |
| **Custom native behavior** — typed native handles, custom lifecycle hooks, your own controller methods               | A registered controller (`addAdapterClass<T>` + `NutrientDocumentView<T>`) |
| To **hold or drive the controller yourself**, or run **multiple independent views** at once                          | A per-view `adapter:` instance you create and dispose of                   |

## Native bindings per platform

A platform adapter subclasses the base class for its target platform and gives you typed access to the underlying native SDK:

- **Android** — Use `AndroidAdapter`, backed by JNI bindings from the `jni` package.

- **iOS** — Use `IOSAdapter`, backed by Objective-C bindings from the `objective_c` package.

- **Web** — Use `NutrientWebAdapter`, backed by JavaScript interop with `dart:js_interop`.

The adapter is the controller, so one object gives you access to the cross-platform API and native handles.

## Architecture

`NutrientDocumentView` resolves a controller — the platform adapter — that bridges to the native SDK on each platform.![Platform adapters architecture](@/assets/images/guides/flutter/platform-adapters/architecture.svg)

Each adapter extends its platform base class, receives lifecycle callbacks, implements your shared controller interface, and exposes the native SDK objects.![Adapter pattern](@/assets/images/guides/flutter/platform-adapters/adapter-pattern.svg)

## Next steps

Continue with these guides:

- Refer to the [getting started](https://www.nutrient.io/guides/flutter/platform-adapters/getting-started.md) guide to display a document and create your first adapter.

- Refer to the [usage patterns](https://www.nutrient.io/guides/flutter/platform-adapters/usage.md) guide for native configuration, controller operations, and native events.

- Refer to the [platform imports](https://www.nutrient.io/guides/flutter/platform-adapters/platform-imports.md) guide to handle platform-specific imports.
---

## Related pages

- [Android](/guides/flutter/platform-adapters/getting-started.md)
- [Native Sdk Reference](/guides/flutter/platform-adapters/native-sdk-reference.md)
- [Platform Imports](/guides/flutter/platform-adapters/platform-imports.md)
- [Usage](/guides/flutter/platform-adapters/usage.md)

