---
title: "Flutter PDF annotation events and notifications | Nutrient SDK"
canonical_url: "https://www.nutrient.io/guides/flutter/events-and-notifications/annotation/"
md_url: "https://www.nutrient.io/guides/flutter/events-and-notifications/annotation.md"
last_updated: "2026-07-02T00:00:00.000Z"
description: "Listen for annotation events in Nutrient Flutter SDK when users create, update, delete, select, or deselect annotations."
---

# Annotation events and notifications

Nutrient Flutter SDK emits events when users interact with annotations in a document. Subscribe to the typed `controller.events` streams from the `NutrientDocumentView` `onControllerReady` callback.

The SDK supports the following annotation events:

| Stream                                   | Event                       | Description                                         |
| ---------------------------------------- | --------------------------- | --------------------------------------------------- |
| `controller.events.annotationCreated`    | `AnnotationCreatedEvent`    | The SDK emits this when users create annotations.   |
| `controller.events.annotationUpdated`    | `AnnotationUpdatedEvent`    | The SDK emits this when users update annotations.   |
| `controller.events.annotationDeleted`    | `AnnotationDeletedEvent`    | The SDK emits this when users delete annotations.   |
| `controller.events.annotationSelected`   | `AnnotationSelectedEvent`   | The SDK emits this when users select annotations.   |
| `controller.events.annotationDeselected` | `AnnotationDeselectedEvent` | The SDK emits this when users deselect annotations. |

Each event exposes the following data:

- `event.annotations` — The affected annotations as typed `Annotation` models.

- `event.types` — The `AnnotationType` values for the affected annotations. Use this to filter events by annotation type.

- `event.annotationsJson` — The raw Instant JSON.

The following example listens for created ink annotations:

```dart

NutrientDocumentView(
  documentPath: documentPath,
  onControllerReady: (controller) {
    controller.events.annotationCreated.listen((event) {
      if (event.types.contains(AnnotationType.ink)) {
        for (final annotation in event.annotations) {
          print('Created: ${annotation.type.name} on page ${annotation.pageIndex}');
        }
      }
    });
  },
)

```

For advanced customization, use the Nutrient native and web SDKs. Refer to the [Nutrient Flutter SDK customization](https://www.nutrient.io/guides/flutter/customize.md) guide and the following guides for more information:

- [iOS](https://www.nutrient.io/guides/ios/events-and-notifications.md)

- [Android](https://www.nutrient.io/guides/android/events-and-notifications.md)

- [Web](https://www.nutrient.io/guides/web/events.md)
---

## Related pages

- [PDF events and notifications](/guides/flutter/events-and-notifications.md)
- [Analytics events and notifications](/guides/flutter/events-and-notifications/analytics.md)
- [PDF form events and notifications](/guides/flutter/events-and-notifications/forms.md)
- [Text selection events and notifications](/guides/flutter/events-and-notifications/text-selection.md)
- [Viewer events and notifications](/guides/flutter/events-and-notifications/viewer.md)

