NutrientController class abstract

Base class for Nutrient controllers.

This is the foundation for the adapter-as-controller pattern. Platform adapters extend this class, allowing them to serve as both platform adapters and controllers.

Adapter-as-Controller Pattern

Instead of having separate adapter and controller objects, the adapter itself serves as the controller:

NutrientController (this class)
       ↑ extends
PlatformAdapter (e.g., AndroidAdapter, IOSAdapter, NutrientWebAdapter)
       ↑ extends
YourAdapter ─────► implements YourController
       │
       └── The adapter IS the controller

Creating a Custom Controller

  1. Define your controller interface implementing NutrientControllerInterface:
abstract class MyController implements NutrientControllerInterface {
  Future<int> getPageCount();
  Future<int> getCurrentPageIndex();
}
  1. Have your platform adapters implement your controller:
class MyAndroidAdapter extends AndroidAdapter implements MyController {
  PdfDocument? _document;

  @override
  Future<int> getPageCount() => Future.value(_document?.getPageCount() ?? 0);
}
  1. Use typed controller access in your view:
NutrientView<MyController>(
  documentPath: 'document.pdf',
  onControllerReady: (controller) async {
    // Type-safe access to your APIs
    final pageCount = await controller.getPageCount();
  },
)

Lifecycle

The controller goes through these lifecycle states:

  1. Created - Controller instance exists but view not ready
  2. Ready - View is created and isReady is true
  3. Disposed - Controller is disposed (isDisposed is true)

Lifecycle Methods

  • markReady - Called by platform view when ready (internal)
  • onReady - Override to perform initialization when ready
  • dispose - Override to clean up resources
Implemented types

Constructors

NutrientController()

Properties

document NutrientDocumentInterface
The open PDF document and its document-level operations.
no setteroverride
events Stream<NutrientEvent>
A broadcast stream of cross-platform typed SDK events.
no setteroverride
hashCode int
The hash code for this object.
no setterinherited
isDisposed bool
Whether the controller has been disposed.
no setteroverride
isReady bool
Whether the controller is ready for use.
no setteroverride
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
viewHandle NutrientViewHandle?
The internal view handle for accessing native instances.
no setter

Methods

attachViewHandle(NutrientViewHandle viewHandle) → void
Attach the view handle to this controller.
consumeViewAttached() bool
For platform adapters: atomically check-and-clear the view-attached flag.
convertPdfPointToViewPoint(int pageIndex, Offset point) Future<Offset>
Converts a point from PDF page coordinates to the page view's coordinate space.
override
convertViewPointToPdfPoint(int pageIndex, Offset point) Future<Offset>
Converts a point from the page view's coordinate space to PDF page coordinates.
override
dispose() Future<void>
Dispose of this controller and release resources.
override
emitEvent(NutrientEvent event) → void
Emits a cross-platform event to all events subscribers.
enterAnnotationCreationMode([AnnotationTool? annotationTool]) Future<bool?>
Enters annotation creation mode for the specified annotationTool.
override
exitAnnotationCreationMode() Future<bool?>
Exits annotation creation mode and returns to normal viewer interaction.
override
getVisibleRect(int pageIndex) Future<Rect>
Gets the visible rect of the given page.
override
getZoomScale(int pageIndex) Future<double>
Gets the current zoom scale of the given page.
override
markReady() Future<void>
Mark the controller as ready for use.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
onReady() Future<void>
Called when the controller becomes ready.
setAnnotationConfigurations(Map<String, dynamic> configurations) Future<bool>
Sets annotation preset configurations for the viewer's annotation toolbar.
override
setAnnotationEditingToolbarItems(List<AnnotationEditingItem> items) Future<void>
No-op default — annotation editing toolbar customization is opt-in per platform (Web/Android/iOS adapters override this).
override
setAnnotationMenuConfiguration(Map<String, dynamic> configuration) Future<bool>
Configures the annotation context menu (items to show, disable, or hide).
override
setAnnotationToolbarItems(List<AnnotationToolbarItem> items) Future<void>
No-op default — annotation creation toolbar customization is opt-in per platform (Android/iOS adapters override this; Web routes annotation tools through the main toolbar).
override
setMainToolbarItems(List<ToolbarItem> items) Future<void>
No-op default — toolbar customization is opt-in per platform. The Android/iOS/Web adapters override this; controllers that don't support it simply ignore the request.
override
toString() String
A string representation of this object.
inherited
zoomToRect(int pageIndex, Rect rect) Future<void>
Zooms to the given rect on the given page.
override

Operators

operator ==(Object other) bool
The equality operator.
inherited