Skip to content

DrawingConfiguration

DrawingConfiguration is the immutable behavior, presentation, and host integration configuration for a DrawingSession.

Constructor

dart
DrawingConfiguration({
  List<DiagramEditorExtension> extensions = const [],
  DiagramPathEffectRegistry? pathEffects,
  CanvasPolicy canvasPolicy = const InfiniteCanvasPolicy(),
  DrawingGridConfiguration? grid,
  double rotationSnapDegrees = 15,
  DiagramLodPolicy lodPolicy = const DiagramLodPolicy(),
  Color backgroundColor = const Color(0xFFFAFAFA),
  DrawingHooks hooks = const DrawingHooks(),
  DiagramImageSourcePicker imageSourcePicker = pickDiagramImageSource,
})

Properties

All stored properties are final. Nullable constructor inputs for grid and pathEffects become non-null properties.

PropertyTypeDefaultContract
extensionsList<DiagramEditorExtension>Empty listCopied into an unmodifiable list; IDs must be nonempty and unique.
pathEffectsDiagramPathEffectRegistryDiagramPathEffectRegistry.standardRegistry used for transient connector path effects.
canvasPolicyCanvasPolicyconst InfiniteCanvasPolicy()Selects infinite or finite world navigation.
gridDrawingGridConfigurationDrawingGridConfiguration()Visibility, snapping, spacing, and pattern; see grids.
rotationSnapDegreesdouble15Finite angle increment, greater than 0 and at most 360.
lodPolicyDiagramLodPolicyconst DiagramLodPolicy()Full visual detail by default; adaptive detail is opt-in.
backgroundColorColorColor(0xFFFAFAFA)Flutter canvas background color.
hooksDrawingHooksconst DrawingHooks()Admission, completed-change, region, and connection callbacks; see hooks.
imageSourcePickerDiagramImageSourcePickerpickDiagramImageSourceImage picker callback supplied at construction.
finiteCanvasbool getterDerivedtrue when canvasPolicy is FiniteCanvasPolicy.

DiagramImageSourcePicker is Future<DiagramImageSource?> Function(); returning null cancels image selection.

copyWith

dart
DrawingConfiguration copyWith({
  List<DiagramEditorExtension>? extensions,
  DiagramPathEffectRegistry? pathEffects,
  CanvasPolicy? canvasPolicy,
  DrawingGridConfiguration? grid,
  double? rotationSnapDegrees,
  DiagramLodPolicy? lodPolicy,
  Color? backgroundColor,
  DrawingHooks? hooks,
  DiagramImageSourcePicker? imageSourcePicker,
})

Returns a new configuration. Omitted or null arguments preserve their current values. Constructor validation runs again. Supply imageSourcePicker to replace the picker through the same configuration update path; omit it to preserve the current callback.

FailureResult
Non-finite rotation increment, <= 0, or > 360ArgumentError
Empty/whitespace-only extension ID or duplicate IDArgumentError

Canvas policies

dart
const InfiniteCanvasPolicy()
const FiniteCanvasPolicy(DiagramRect worldBounds, {double viewportPadding = 0})
Class / propertyTypeDefaultMeaning
InfiniteCanvasPolicyCanvasPolicyOuter configuration defaultNo finite world boundary.
FiniteCanvasPolicy.worldBoundsDiagramRectRequired positional argumentFinite world boundary.
FiniteCanvasPolicy.viewportPaddingdouble0Screen-space breathing room around the boundary; constructor asserts >= 0.

DiagramLodPolicy

dart
const DiagramLodPolicy({
  bool adaptive = false,
  double compactBelowPixels = 32,
  double thumbnailBelowPixels = 10,
})

DiagramVisualDetail detailFor({
  required double projectedMinimumDimension,
  required bool interactionCritical,
})
PropertyTypeDefaultMeaning
adaptiveboolfalseEnables projected-size-based visual detail.
compactBelowPixelsdouble32Compact threshold, in projected pixels.
thumbnailBelowPixelsdouble10Thumbnail threshold, in projected pixels.

detailFor returns DiagramVisualDetail.full when adaptation is disabled or the element is interaction-critical. Otherwise it returns thumbnail below the thumbnail threshold, compact below the compact threshold, and full at or above both thresholds. Threshold comparisons are strict <.

Applying configuration

dart
final session = DrawingSession(
  document: DiagramDocument.empty('my-drawing'),
  shapeRegistry: ShapeRegistry.standard(),
  tools: DiagramToolRegistry.standard(),
  configuration: DrawingConfiguration(
    grid: DrawingGridConfiguration(visible: true, snap: true, size: 20),
    extensions: [const DiagramMinimapExtension()],
  ),
);

session.setConfiguration(session.configuration.copyWith(
  grid: session.configuration.grid.copyWith(size: 24),
));

// Mount inside a bounded Flutter layout.
DrawingCanvas(session: session);

setConfiguration preserves document history. The session projects toolbar and inspector setting changes back into session.configuration, so hosts can read the current settings from that property. Shape and tool registries are constructor inputs to the session, not configuration fields; there is no live registry replacement method. A session borrowed with DrawingSession.fromStore retains the store's admission hook; see session lifetime and errors.