ComponentDefinition<T extends ThemeableState> class

Definition of a component for the workbench registry.

This class encapsulates all information needed to:

  • Create a new state instance
  • Build the preview widget
  • Build the controls panel
  • Categorize and search for components

Using this registry pattern eliminates the need for 55+ if-statements in main.dart, reducing it from 2,600 lines to ~400 lines.

Constructors

ComponentDefinition({required ComponentType type, required String name, required ComponentCategory category, required String description, required List<String> tags, required T stateBuilder(), required Widget controlsBuilder(T state, VoidCallback onChanged, bool isDarkMode), required Widget previewBuilder(T state, AnimationController? controller), bool requiresAnimationController = true})
const

Properties

category → ComponentCategory
Category for grouping in the sidebar.
final
controlsBuilder → Widget Function(T state, VoidCallback onChanged, bool isDarkMode)
Builder function for the controls panel. Parameters:
final
description → String
Description shown in search results and tooltips.
final
hashCode → int
The hash code for this object.
no setterinherited
name → String
Human-readable name shown in the UI.
final
previewBuilder → Widget Function(T state, AnimationController? controller)
Builder function for the preview widget. Parameters:
final
requiresAnimationController → bool
Whether this component requires an animation controller. If true, the workbench will pass its shared animation controller to the preview builder.
final
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
stateBuilder → T Function()
Factory function to create a new state instance.
final
tags → List<String>
Tags for filtering and searching. Examples: 'interactive', 'voice-first', 'elderly-friendly'
final
type → ComponentType
Unique identifier for this component.
final

Methods

buildControlsWidget(ThemeableState state, VoidCallback onChanged, bool isDarkMode) → Widget
Build controls widget accepting ThemeableState base type. This method handles the generic type cast internally, eliminating the need for dynamic casts in the registry.
buildPreviewWidget(ThemeableState state, AnimationController? controller) → Widget
Build preview widget accepting ThemeableState base type. This method handles the generic type cast internally, eliminating the need for dynamic casts in the registry.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toString() → String
A string representation of this object.
inherited

Operators

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