vyuh_extension_content
Register content and configuration types through ContentExtensionDescriptor and ContentExtensionBuilder. DefaultContentPlugin deserializes registered types, selects layouts, applies modifiers, and builds routes. Actions execute configurations; conditions produce string values for case matching.
How the pieces fit together
Choose a declaration
Action · ActionConfiguration · ActionFailure · CMSPathResolver · CMSRoute · Category · Condition · ConditionConfiguration · ConditionFailure · ContainerItem · ContentBindingAccessor · ContentBuilder · ContentDescriptor · ContentDescriptorFactory · ContentExtensionBuilder · ContentExtensionDescriptor · ContentFailure · ContentItem · ContentItemFailure · ContentModifierConfiguration · ContentPlatformAccessor · ContentPlugin · ContentProvider · DIExtension · DefaultContentPlugin · DocumentBuilder · DocumentFutureBuilder · DocumentItem · DocumentStreamBuilder · FieldName · FileReference · FromJsonConverter · ImageReference · LayoutConfiguration · LayoutFailure · LiveContentProvider · LocalContentProvider · ModifierFailure · NoOpContentPlugin · NoOpContentProvider · NoOpLiveContentProvider · ObjectReference · PreviewContext · RootItem · RouteBase · RouteBuilder · RouteBuilderProxy · RouteContentWithRefresh · RouteLifecycleConfiguration · RouteTypeConfiguration · SchemaItem · ScopedDIWidget · ServiceExtensions · TypeDescriptor · UnknownActionConfiguration · UnknownConditionConfiguration · UnknownContentBuilder · UnknownContentDetector · UnknownContentIndicator · UnknownContentItem · UnknownContentModifierConfiguration · UnknownContentView · UnknownLayoutConfiguration · UnknownPlaceholderFactory · cmsFallbackPageBuilder · cmsFallbackRoute · createUnknownPlaceholder · defaultRoutePageBuilder · fieldKeyMap · initializeUnknownPlaceholderFactory · listFromJson · messages · readValue · setUnknownPlaceholderFactory · typeFromFirstOfListJson
Action
A composable action that can be executed in response to user interaction.
final class ActionDirectly declared public members:
final String? title;Optional title for the action.
final List<ActionConfiguration>? configurations;List of configurations to execute when the action is triggered.
static List<ActionConfiguration>? configurationList(dynamic json);Converts a JSON array to a list of ActionConfiguration instances.
FutureOr<void> execute(BuildContext context, {Map<String, dynamic>? arguments});Executes all configurations in sequence.
Action({this.title, this.configurations});Creates a new action with optional title and configurations.
factory Action.fromJson(Map<String, dynamic> json);Creates an action from a JSON object.
bool get isEmpty;Returns true if this action has no configurations.
bool get isNotEmpty;Returns true if this action has at least one configuration.
ActionConfiguration
Base class for all action configurations.
abstract class ActionConfiguration implements SchemaItemDirectly declared public members:
final String schemaType;The schema type of this configuration.
final String? title;Optional title for this configuration.
final bool? isAwaited;Whether to await this configuration's execution.
ActionConfiguration({required this.schemaType, this.title, this.isAwaited});Creates a new action configuration.
FutureOr<void> execute(BuildContext context, {Map<String, dynamic>? arguments});Executes this configuration.
ActionFailure
Failure when an action configuration registration is missing.
final class ActionFailure extends ContentFailureDirectly declared public members:
final Map<String, dynamic>? actionConfig;The action configuration that failed to resolve
const ActionFailure({required super.schemaType, this.actionConfig, super.jsonPayload, super.description, super.suggestions});CMSPathResolver
A function that resolves a CMS path from a local path. This is useful when multiple local routes use a single template path on the CMS. For example: (Local path) /blog/:slug -> /blog (CMS path)
typedef CMSPathResolver = String Function(String path);CMSRoute
A route purely meant to identify CMS pages. Use it to distinguish between the way local routes and CMS routes are handled.
final class CMSRoute extends GoRouteDirectly declared public members:
final CMSPathResolver cmsPathResolver;A function that resolves a CMS path from a local path.
CMSRoute({required super.path, this.cmsPathResolver = _identityPathResolver, super.builder, GoRouterPageBuilder? pageBuilder, super.parentNavigatorKey, super.name, super.onExit, super.redirect, super.routes});Creates a new CMS route.
Category
A category for organizing routes.
class Category implements SchemaItemDirectly declared public members:
String get schemaType;final String identifier;final String title;final LayoutConfiguration? layout;final List<ContentModifierConfiguration>? modifiers;static List<ContentModifierConfiguration>? modifierList(dynamic json);Category({required this.identifier, required this.title, this.layout, this.modifiers});factory Category.fromJson(Map<String, dynamic> json);Condition
A conditional expression that can be evaluated at runtime.
final class ConditionDirectly declared public members:
final ConditionConfiguration? configuration;The configuration that defines the condition's logic.
Condition({this.configuration});Creates a new condition with the given configuration.
Future<String?> execute(BuildContext context);Evaluates the condition in the current context.
factory Condition.fromJson(Map<String, dynamic> json);Creates a condition from a JSON object.
ConditionConfiguration
Base class for all condition configurations.
abstract class ConditionConfiguration implements SchemaItemDirectly declared public members:
final String schemaType;The schema type of this configuration.
final String? title;Optional title for this configuration.
ConditionConfiguration({required this.schemaType, this.title});Creates a new condition configuration.
Future<String?> execute(BuildContext context);Evaluates this condition configuration.
ConditionFailure
Failure when a condition configuration registration is missing.
final class ConditionFailure extends ContentFailureDirectly declared public members:
final Map<String, dynamic>? conditionConfig;The condition configuration that failed to resolve
const ConditionFailure({required super.schemaType, this.conditionConfig, super.jsonPayload, super.description, super.suggestions});ContainerItem
Represents a container item that can contain other content items.
abstract interface class ContainerItem implements ContentItemContentBindingAccessor
VyuhBinding.instance.content: the same as vyuh.content, for code that also runs in widget mode (VyuhContentWidget, without runApp).
extension ContentBindingAccessor on VyuhBindingDirectly declared public members:
ContentPlugin get content;The content plugin, or a NoOpContentPlugin when none is registered.
ContentBuilder
A builder for configuring and managing content types and their layouts.
class ContentBuilder<T extends ContentItem>Directly declared public members:
final TypeDescriptor<T> content;The type descriptor for the content type T.
LayoutConfiguration<T> get defaultLayout;TypeDescriptor<LayoutConfiguration<T>> get defaultLayoutDescriptor;List<TypeDescriptor<LayoutConfiguration>> get layouts;String? get sourceFeature;void setSourceFeature(String? featureName);Updates the source feature for this builder and its layouts.
ContentBuilder({required this.content, required this._defaultLayout, required this._defaultLayoutDescriptor});Creates a new content builder.
void init(List<ContentDescriptor> descriptors);Initializes this content builder with the given descriptors.
void addDescriptors(List<ContentDescriptor> descriptors);Additively registers new descriptors into this builder.
VoidCallback captureLazyState();Captures mutable builder state for failed lazy-registration rollback. Subclasses with additional state must extend this rollback.
void registerDescriptors<U>(Iterable<TypeDescriptor<U>> descriptors, {bool checkUnique = false});Registers a list of type descriptors with the content system.
Widget build(BuildContext context, T content);Builds a widget for the given content item.
void setDefaultLayout(LayoutConfiguration<T> layout, {required FromJsonConverter<LayoutConfiguration<T>> fromJson, String? sourceFeatureName});Sets the default layout for this content builder.
ContentDescriptor
Public declaration in this package.
abstract class ContentDescriptorDirectly declared public members:
final String title;final String schemaType;final List<TypeDescriptor<LayoutConfiguration>>? layouts;String? get sourceFeature;The feature that this content descriptor was registered by.
ContentDescriptor({required this.schemaType, required this.title, required this.layouts});static ContentDescriptorFactory createDefault({required String schemaType, required String title});A simplified approach to creating a ContentDescriptor that follows the standard conventions. This eliminates the need to create a new <Item>ContentDescriptor.
void setSourceFeature(String? featureName);ContentDescriptorFactory
Public declaration in this package.
typedef ContentDescriptorFactory<T extends ContentItem> = ContentDescriptor Function(ContentExtensionBuilder
Public declaration in this package.
final class ContentExtensionBuilder extends ExtensionBuilderDirectly declared public members:
ContentExtensionBuilder();Map<Type, Map<String, TypeDescriptor>> typeRegistry();ContentBuilder<ContentItem>? contentBuilder(String schemaType);List<ContentBuilder> contentBuilders();Future<void> onInit(List<ExtensionDescriptor> extensions);Future<void> onDispose();T? fromJson<T>(String typeName, Map<String, dynamic> json);void register<T>(TypeDescriptor<T> descriptor);bool isRegistered<T>(String schemaType);void registerBuilder(ContentBuilder builder, {List<ContentDescriptor>? descriptors = const []});Register a ContentBuilder directly This allows other plugins to register content builders programmatically
VoidCallback captureLazyState(ExtensionDescriptor descriptor);Captures converter registries and affected content builders for rollback.
void registerLazy(ExtensionDescriptor descriptor);ContentExtensionDescriptor
Public declaration in this package.
final class ContentExtensionDescriptor extends ExtensionDescriptorDirectly declared public members:
final List<ContentDescriptor>? contents;final List<TypeDescriptor<ContentModifierConfiguration>>? contentModifiers;final List<ContentBuilder>? contentBuilders;final List<TypeDescriptor<ActionConfiguration>>? actions;final List<TypeDescriptor<ConditionConfiguration>>? conditions;final List<TypeDescriptor<RouteTypeConfiguration>>? routeTypes;ContentExtensionDescriptor({this.contents, this.contentModifiers, this.contentBuilders, this.actions, this.conditions, this.routeTypes});dynamic onSourceFeatureUpdated();ContentFailure
Base class for content-related failures in the Vyuh framework.
abstract class ContentFailureDirectly declared public members:
final String schemaType;The schema type that failed to resolve
final Map<String, dynamic>? jsonPayload;The original JSON payload that caused the failure (if available)
final String? description;Human-readable description of the failure
final List<String>? suggestions;Optional suggestions for resolving the failure
const ContentFailure({required this.schemaType, this.jsonPayload, this.description, this.suggestions});ContentItem
The base class for all content items in Vyuh.
abstract class ContentItem implements SchemaItemDirectly declared public members:
final String schemaType;final LayoutConfiguration? layout;The layout configuration for the content item.
final List<ContentModifierConfiguration>? modifiers;static List<ContentModifierConfiguration>? modifierList(dynamic json);ContentItem? parent;The parent content item of this content item. This is used internally by the content system.
ContentItem({required this.schemaType, required this.layout, required this.modifiers});Creates an instance of ContentItem.
factory ContentItem.fromJson(Map<String, dynamic> json);Converts the JSON representation of the content item to an instance of ContentItem.
void setParent(Iterable<ContentItem?> children);Sets the parent content item for the given list of children.
LayoutConfiguration? getLayout();Gets the layout to use for the ContentItem. By default its the layout itself. However this acts as an extension point for custom ContentItems that may have a different strategy for applying layouts.
List<ContentModifierConfiguration>? getModifiers();Gets the modifiers to use for the ContentItem. By default its the modifiers itself. However this acts as an extension point for custom ContentItems that may have a different strategy for applying modifiers.
ContentItemFailure
Failure when a ContentItem type registration is missing.
final class ContentItemFailure extends ContentFailureDirectly declared public members:
const ContentItemFailure({required super.schemaType, super.jsonPayload, super.description, super.suggestions});ContentModifierConfiguration
Configuration for modifying content presentation.
abstract class ContentModifierConfiguration implements SchemaItemDirectly declared public members:
final String schemaType;ContentModifierConfiguration({required this.schemaType});factory ContentModifierConfiguration.fromJson(Map<String, dynamic> json);Widget build(BuildContext context, Widget child, ContentItem content);Builds the modifier widget tree for the given content item.
ContentPlatformAccessor
vyuh.content: the registered ContentPlugin.
extension ContentPlatformAccessor on VyuhPlatformDirectly declared public members:
ContentPlugin get content;The content plugin, or a NoOpContentPlugin when none is registered.
ContentPlugin
The base class for a Content Plugin.
abstract class ContentPlugin extends PluginDirectly declared public members:
final ContentProvider provider;The ContentProvider for this plugin
final UnknownContentBuilder unknown;Builds the widget shown when a content type, layout, modifier, action or condition is missing. Defaults to UnknownContentView.
ContentPlugin({required this.provider, required super.name, required super.title, UnknownContentBuilder? unknown});Creates a new ContentPlugin with the given provider, name, and title
Map<Type, Map<String, TypeDescriptor>> get typeRegistry;The type registry that maps types to their descriptors. This stores the descriptors for LayoutConfiguration, ActionConfiguration, ConditionConfiguration and possibly others in the future.
Widget buildContent<T extends ContentItem>(BuildContext context, T content, {LayoutConfiguration<T>? layout});Builds a Widget for the given content. You can pass in an optional layout to override the default layout
Widget buildRoute(BuildContext context, {Uri? url, String? routeId});Builds a Widget for the given route url or id. This is used for top-level documents called routes. These could represent a page, dialog or a conditional-route.
void attach(ExtensionBuilder extBuilder);Sets up the plugin with the ContentExtensionBuilder. The plugin relies on the ContentExtensionBuilder to do its work.
T? fromJson<T>(Map<String, dynamic> json);Converts the given json to an item of type T
void register<T>(TypeDescriptor<T> descriptor);Registers the given type descriptor
bool isRegistered<T>(String schemaType);Checks if the given schema type is registered for type T
ContentProvider
Public declaration in this package.
abstract class ContentProviderDirectly declared public members:
final String name;final String title;final LiveContentProvider live;ContentProvider({required this.name, required this.title, this.live = const NoOpLiveContentProvider()});bool get supportsLive;String fieldValue(String key, Map<String, dynamic> json);String schemaType(Map<String, dynamic> json);Future<void> init();Future<void> dispose();ImageProvider? image(final ImageReference imageRef, {final int? width, final int? height, final int? devicePixelRatio, final int? quality, final String? format});Uri? fileUrl(final FileReference fileRef);Future<T?> fetchById<T>(String id, {required FromJsonConverter<T> fromJson, bool useCache = true});Future<T?> fetchSingle<T>(String query, {required FromJsonConverter<T> fromJson, Map<String, String>? queryParams, bool useCache = true});Future<List<T>?> fetchMultiple<T>(String query, {required FromJsonConverter<T> fromJson, Map<String, String>? queryParams, bool useCache = true});Future<RouteBase?> fetchRoute({String? path, String? routeId, bool useCache = true});DIExtension
Public declaration in this package.
extension DIExtension on BuildContextDirectly declared public members:
DIPlugin get di;DefaultContentPlugin
The default ContentPlugin implementation for the Vyuh framework. This plugin is responsible for fetching content from a CMS and rendering content items. It uses a ContentExtensionBuilder to keep track of the various ContentItem types.
final class DefaultContentPlugin extends ContentPluginDirectly declared public members:
final bool useLiveRoute;Whether to use live route updates via streams. When true, uses RouteStreamBuilder for real-time updates. When false, uses RouteFutureBuilder for one-time loading.
final bool allowRouteRefresh;Whether to allow manual refreshing of the route.
DefaultContentPlugin({required super.provider, this.useLiveRoute = false, this.allowRouteRefresh = true, super.unknown});Map<Type, Map<String, TypeDescriptor>> get typeRegistry;Widget buildContent<T extends ContentItem>(BuildContext context, T content, {LayoutConfiguration<T>? layout});Widget buildRoute(BuildContext context, {Uri? url, String? routeId});T? fromJson<T>(Map<String, dynamic> json);dynamic register<T>(TypeDescriptor<T> descriptor);bool isRegistered<T>(String schemaType);Future<void> dispose();Future<void> init();void attach(ExtensionBuilder extBuilder);DocumentBuilder
A widget that builds UI based on document data fetched from a content provider.
final class DocumentBuilder<T> extends StatelessWidgetDirectly declared public members:
final Future<T?> Function() fetchDocument;A function that returns a future of the document.
final Stream<T?>? liveDocument;A stream of document data for live updates.
final Stream<T?> Function()? liveDocumentFactory;Creates a fresh subscription for live refresh/retry.
final bool allowRefresh;Whether to allow refreshing the document.
final bool isLive;Whether to use live document updates.
final Widget Function(BuildContext context, T document) buildContent;A function that builds the UI for the document.
final Future<T?> Function(BuildContext context, T document)? initDocument;Optional custom initialization function for the document. This allows for document-specific initialization logic.
final bool isRoute;Whether this document is a whole route. A route that fails shows a full page with Back and Go home; other content fails inline.
final Uri? location;The location being shown, included in failure reports.
final Object? requestKey;Identifies the document. When set, the builder refetches (or resubscribes) only when this value changes, not when the parent passes new closures. The fromRoute, fromQuery and fromId factories set it.
const DocumentBuilder({super.key, required this.fetchDocument, this.liveDocument, this.liveDocumentFactory, required this.buildContent, this.allowRefresh = true, this.isLive = false, this.initDocument, this.isRoute = false, this.location, this.requestKey});Creates a DocumentBuilder with a custom document fetching function.
static DocumentBuilder<T> fromQuery<T>({Key? key, required String query, Map<String, String>? queryParams, required FromJsonConverter<T> fromJson, required Widget Function(BuildContext, T) buildContent, bool includeDrafts = false, bool allowRefresh = true, bool isLive = false, Future<T?> Function(BuildContext, T?)? initDocument});Creates a DocumentBuilder that fetches a document by query.
static DocumentBuilder<T> fromId<T>({Key? key, required String id, required FromJsonConverter<T> fromJson, required Widget Function(BuildContext, T) buildContent, bool includeDrafts = false, bool allowRefresh = true, bool isLive = false, Future<T?> Function(BuildContext, T?)? initDocument});Creates a DocumentBuilder that fetches a document by ID.
static DocumentBuilder<RouteBase> fromRoute({Key? key, Uri? url, String? routeId, required Widget Function(BuildContext, RouteBase) buildContent, bool includeDrafts = false, bool allowRefresh = true, bool isLive = false});Creates a DocumentBuilder that fetches a route by path or ID.
Widget build(BuildContext context);DocumentFutureBuilder
A widget that builds UI based on a future of document data.
class DocumentFutureBuilder<T> extends StatefulWidgetDirectly declared public members:
final Future<T?> Function() future;The future that resolves with the document data.
final Widget Function(BuildContext context, T document) buildContent;A function that builds the UI for the content.
final bool allowRefresh;Whether to allow refreshing the document, with the overlay Refresh button.
final bool isRoute;Whether this document is a whole route. A route that fails shows a full page with Back and Go home; other content fails inline.
final Uri? location;The location being shown, included in failure reports.
final Object? requestKey;Identifies the document being fetched. When set, the builder refetches only when this value changes, so a parent passing a new future closure on every build doesn't trigger a refetch. When null, a new future function does.
const DocumentFutureBuilder({super.key, required this.future, required this.buildContent, this.allowRefresh = true, this.isRoute = false, this.location, this.requestKey});Creates a DocumentFutureBuilder.
State<DocumentFutureBuilder<T>> createState();DocumentItem
The base interface for all schema-driven document items.
abstract interface class DocumentItem implements SchemaItemDocumentStreamBuilder
Builds document UI from a stream, including errors and completion.
class DocumentStreamBuilder<T> extends StatefulWidgetDirectly declared public members:
final Stream<T?>? stream;final Stream<T?> Function()? streamFactory;final Widget Function(BuildContext context, T document) buildContent;final bool allowRefresh;final bool isRoute;Whether this document is a whole route. A route that fails shows a full page with Back and Go home; other content fails inline.
final Uri? location;The location being shown, included in failure reports.
const DocumentStreamBuilder({super.key, required Stream<T?> this.stream, required this.buildContent, this.allowRefresh = true, this.isRoute = false, this.location});const DocumentStreamBuilder.refreshable({super.key, required Stream<T?> Function() this.streamFactory, required this.buildContent, this.allowRefresh = true, this.isRoute = false, this.location});State<DocumentStreamBuilder<T>> createState();FieldName
Public declaration in this package.
enum FieldName { id, type, key, ref, updatedAt, createdAt }FileReference
A reference to a file asset in the content management system.
class FileReferenceDirectly declared public members:
final String type;final ObjectReference? asset;FileReference({required this.type, required this.asset});factory FileReference.fromJson(final Map<String, dynamic> json);FromJsonConverter
Function type for converting JSON data to a typed object.
typedef FromJsonConverter<T> = T? Function(Map<String, dynamic> json);ImageReference
A reference to an image asset in the content management system.
class ImageReferenceDirectly declared public members:
final String type;final ObjectReference? asset;final String? sanityAsset;ImageReference({required this.type, required this.asset, this.sanityAsset});factory ImageReference.fromJson(final Map<String, dynamic> json);LayoutConfiguration
Base class for configuring the visual layout of a content item.
abstract class LayoutConfiguration<T extends ContentItem> implements SchemaItemDirectly declared public members:
final String schemaType;final Type contentType;LayoutConfiguration({required this.schemaType});Creates an instance of LayoutConfiguration.
factory LayoutConfiguration.fromJson(Map<String, dynamic> json);Converts the JSON representation of the layout configuration to an instance of LayoutConfiguration.
Widget build(BuildContext context, T content);Builds the layout widget tree for the given content item.
LayoutFailure
Failure when a layout for a registered content type is missing.
final class LayoutFailure extends ContentFailureDirectly declared public members:
final String contentSchemaType;The content type that needs a layout
final String? requestedLayoutType;The specific layout type that was requested (if any)
const LayoutFailure({required super.schemaType, required this.contentSchemaType, this.requestedLayoutType, super.jsonPayload, super.description, super.suggestions});LiveContentProvider
An interface for plugins that provide live content.
abstract class LiveContentProviderDirectly declared public members:
final String title;The title of the live content provider.
const LiveContentProvider({required this.title});Future<void> init();Future<void> dispose();Stream<T?> fetchById<T>(String id, {required FromJsonConverter<T> fromJson, bool includeDrafts = false});Fetches content by ID.
Stream<T?> fetchSingle<T>(String query, {required FromJsonConverter<T> fromJson, Map<String, String>? queryParams, bool includeDrafts = false});Fetches content by query, returning a single item.
Stream<List<T>?> fetchMultiple<T>(String query, {required FromJsonConverter<T> fromJson, Map<String, String>? queryParams, bool includeDrafts = false});Fetches content by query, returning a list of items.
Stream<RouteBase?> fetchRoute({String? path, String? routeId, bool includeDrafts = false});Fetches content by route.
LocalContentProvider
Public declaration in this package.
final class LocalContentProvider extends ContentProviderDirectly declared public members:
LocalContentProvider();String schemaType(Map<String, dynamic> json);String fieldValue(String key, Map<String, dynamic> json);Future<T?> fetchById<T>(String id, {required FromJsonConverter<T> fromJson, bool useCache = true});Future<List<T>?> fetchMultiple<T>(String query, {required FromJsonConverter<T> fromJson, Map<String, String>? queryParams, bool useCache = true});Future<RouteBase?> fetchRoute({String? path, String? routeId, bool useCache = true});Future<T?> fetchSingle<T>(String query, {required FromJsonConverter<T> fromJson, Map<String, String>? queryParams, bool useCache = true});Uri? fileUrl(FileReference fileRef);ImageProvider<Object>? image(ImageReference imageRef, {int? width, int? height, int? devicePixelRatio, int? quality, String? format});Future<void> init();Future<void> dispose();ModifierFailure
Failure when a content modifier registration is missing.
final class ModifierFailure extends ContentFailureDirectly declared public members:
final List<String> modifierChain;The complete chain of modifiers being applied
final int failedIndex;The index in the modifier chain where the failure occurred
const ModifierFailure({required super.schemaType, required this.modifierChain, required this.failedIndex, super.jsonPayload, super.description, super.suggestions});NoOpContentPlugin
Public declaration in this package.
final class NoOpContentPlugin extends ContentPluginDirectly declared public members:
NoOpContentPlugin();Widget buildContent<T extends ContentItem>(BuildContext context, T content, {LayoutConfiguration<T>? layout});Widget buildRoute(BuildContext context, {Uri? url, String? routeId});Future<void> dispose();Future<void> init();bool isRegistered<T>(String schemaType);dynamic register<T>(TypeDescriptor<T> descriptor);void attach(ExtensionBuilder extBuilder);T? fromJson<T>(Map<String, dynamic> json);Map<Type, Map<String, TypeDescriptor>> get typeRegistry;NoOpContentProvider
Public declaration in this package.
final class NoOpContentProvider extends ContentProviderDirectly declared public members:
NoOpContentProvider();Future<void> dispose();Future<List<T>?> fetchMultiple<T>(String query, {required FromJsonConverter<T> fromJson, Map<String, String>? queryParams, bool useCache = true});Future<RouteBase?> fetchRoute({String? path, String? routeId, bool useCache = true});Future<T?> fetchSingle<T>(String query, {required FromJsonConverter<T> fromJson, Map<String, String>? queryParams, bool useCache = true});String fieldValue(String key, Map<String, dynamic> json);ImageProvider? image(ImageReference imageRef, {int? width, int? height, int? devicePixelRatio, int? quality, String? format});Future<void> init();String schemaType(Map<String, dynamic> json);Future<T?> fetchById<T>(String id, {required FromJsonConverter<T> fromJson, bool useCache = true});Uri? fileUrl(FileReference fileRef);NoOpLiveContentProvider
A no-op implementation of LiveContentProvider. Is used internally to ensure the Developer is using it correctly by giving proper errors and hints
final class NoOpLiveContentProvider extends LiveContentProviderDirectly declared public members:
const NoOpLiveContentProvider();Stream<T?> fetchById<T>(String id, {required FromJsonConverter<T> fromJson, bool includeDrafts = false});Stream<T?> fetchSingle<T>(String query, {required FromJsonConverter<T> fromJson, Map<String, String>? queryParams, bool includeDrafts = false});Stream<List<T>?> fetchMultiple<T>(String query, {required FromJsonConverter<T> fromJson, Map<String, String>? queryParams, bool includeDrafts = false});Stream<RouteBase?> fetchRoute({String? path, String? routeId, bool includeDrafts = false});Future<void> dispose();Future<void> init();ObjectReference
A reference to any content object in the content management system.
class ObjectReferenceDirectly declared public members:
final String type;final String ref;ObjectReference({required this.type, required this.ref});factory ObjectReference.fromJson(Map<String, dynamic> json);PreviewContext
Public declaration in this package.
final class PreviewContext extends InheritedWidgetDirectly declared public members:
final ContentItem content;final LayoutConfiguration<ContentItem> layout;const PreviewContext({super.key, required this.content, required this.layout, required super.child});static PreviewContext? of(BuildContext context);bool updateShouldNotify(PreviewContext oldWidget);RootItem
Represents a root item that is the root of a content tree.
abstract interface class RootItem implements ContainerItemRouteBase
Base class for all route content items in Vyuh.
abstract class RouteBase extends ContentItem implements RootItemDirectly declared public members:
final String title;The title of the route, displayed in navigation UI.
final String path;The URL path for this route. This is used to match URLs and generate links.
final Category? category;Optional category for organizing routes.
final RouteTypeConfiguration? routeType;Configuration for how this route should be presented. Defines transitions, animations, and other route-specific behavior.
final String id;Unique identifier for this route.
final DateTime updatedAt;When this route was last updated in the CMS.
final DateTime createdAt;When this route was created in the CMS.
RouteBase({required super.schemaType, this.routeType, required this.title, required this.path, this.category, required this.createdAt, required this.updatedAt, required this.id, required super.layout, required super.modifiers});factory RouteBase.fromJson(Map<String, dynamic> json);Future<RouteBase?> init(BuildContext context);Initialize the route when it becomes active.
Future<void> dispose();Clean up the route when it is no longer active.
Page<T> createPage<T>(BuildContext context, [LocalKey? pageKey]);Create a Flutter page for this route.
LayoutConfiguration? getLayout();List<ContentModifierConfiguration>? getModifiers();RouteBuilder
Public declaration in this package.
final class RouteBuilder extends StatelessWidgetDirectly declared public members:
final Uri? url;final String? routeId;final bool includeDrafts;final bool allowRefresh;final bool isLive;const RouteBuilder({super.key, this.url, this.routeId, this.includeDrafts = false, this.allowRefresh = true, this.isLive = false});Widget build(BuildContext context);RouteBuilderProxy
Public declaration in this package.
class RouteBuilderProxy extends InheritedWidgetDirectly declared public members:
const RouteBuilderProxy({super.key, required super.child, required this._onRefresh});Future<void> refresh();bool updateShouldNotify(covariant RouteBuilderProxy oldWidget);static RouteBuilderProxy? of(BuildContext context);RouteContentWithRefresh
Works in conjunction with the RouteBuilderProxy to trigger refresh on a Route
final class RouteContentWithRefresh extends StatelessWidgetDirectly declared public members:
final Widget child;const RouteContentWithRefresh({super.key, required this.child});Widget build(BuildContext context);RouteLifecycleConfiguration
Configuration for managing route lifecycle events.
abstract class RouteLifecycleConfiguration implements SchemaItemDirectly declared public members:
final String schemaType;final String? title;RouteLifecycleConfiguration({this.title, required this.schemaType});Future<void> init(BuildContext context, RouteBase route);Future<void> dispose();RouteTypeConfiguration
Configuration for how a route should be presented.
abstract class RouteTypeConfiguration implements SchemaItemDirectly declared public members:
final String? title;final String schemaType;RouteTypeConfiguration({this.title, required this.schemaType});Page<T> create<T>(Widget child, RouteBase route, [LocalKey? pageKey]);SchemaItem
The base interface for all schema-driven content items.
abstract interface class SchemaItemDirectly declared public members:
String get schemaType;The schema type of the content item.
ScopedDIWidget
A widget that wraps its child with a scoped instance of DIPlugin.
final class ScopedDIWidget extends StatefulWidgetDirectly declared public members:
const ScopedDIWidget({super.key, required this.child, required this.debugLabel});final Widget child;final String debugLabel;The debug label for the DIPlugin. It is useful to identify the scope.
static DIPlugin of(BuildContext context);Get the DIPlugin from the nearest DI scope. If no scope is found, it will fallback to the platform DIPlugin.
State<ScopedDIWidget> createState();ServiceExtensions
Public declaration in this package.
extension ServiceExtensions on ContentPluginDirectly declared public members:
bool setDefaultLayout({required String schemaType, required LayoutConfiguration layout, required FromJsonConverter<LayoutConfiguration> fromJson});Sets the default layout for the schemaType of the ContentItem. Returns true if the layout was set, false otherwise.
ContentBuilder? contentBuilder(String schemaType);Returns the ContentBuilder for the schemaType of the ContentItem. Returns null if it does not exist.
List<ContentBuilder<ContentItem>>? contentBuilders();Returns a map of all content builders, where the key is the schemaType and the value is the ContentBuilder.
TypeDescriptor
Describes a schema type and its serialization behavior.
class TypeDescriptor<T>Directly declared public members:
final String title;Human-readable name for this type.
final String schemaType;Schema type identifier from the CMS.
final FromJsonConverter<T> fromJson;Function to convert JSON data to an instance of T.
final T Function()? preview;Optional function to create a preview instance.
final Type type;The runtime type of T.
String? get sourceFeature;void setSourceFeature(String? featureName);Updates the source feature for this type descriptor.
TypeDescriptor({required this.schemaType, required this.fromJson, required this.title, this.preview});Creates a new type descriptor.
bool ==(Object other);int get hashCode;UnknownActionConfiguration
Unknown placeholder types for handling missing type registrations gracefully. These placeholders allow the system to continue working while providing proper error feedback through the unknown content builder system. Unknown action configuration placeholder.
final class UnknownActionConfiguration extends ActionConfigurationDirectly declared public members:
static const dynamic schemaName;final String missingSchemaType;final Map<String, dynamic> jsonPayload;UnknownActionConfiguration({required this.missingSchemaType, required this.jsonPayload});Future<void> execute(BuildContext context, {Map<String, dynamic>? arguments});UnknownConditionConfiguration
Unknown condition configuration placeholder.
final class UnknownConditionConfiguration extends ConditionConfigurationDirectly declared public members:
static const dynamic schemaName;final String missingSchemaType;final Map<String, dynamic> jsonPayload;UnknownConditionConfiguration({required this.missingSchemaType, required this.jsonPayload});Future<String?> execute(BuildContext context);UnknownContentBuilder
Builds the widget shown for a ContentFailure.
typedef UnknownContentBuilder = Widget Function(BuildContext context, ContentFailure failure);UnknownContentDetector
Utility functions for detecting unknown placeholders in content items.
class UnknownContentDetectorDirectly declared public members:
static bool hasUnknownActions(vyuh_action.Action? action);Checks if an Action contains any unknown action configurations.
static bool hasUnknownActionsInList(List<vyuh_action.Action?> actions);Checks if a list of actions contains any unknown action configurations.
static bool hasUnknownConditions(Condition? condition);Checks if a Condition contains any unknown condition configurations.
static bool hasUnknownModifiers(ContentItem contentItem);Checks if a content item has any unknown modifiers.
static bool hasUnknownLayout(LayoutConfiguration? layout);Checks if a content item has an unknown layout.
static bool hasAnyUnknownContent(ContentItem contentItem, {List<vyuh_action.Action?> additionalActions = const [], List<Condition?> additionalConditions = const [], LayoutConfiguration? layout});Comprehensive check for any unknown content in a content item. This can be extended by subclasses to check specific action/condition fields.
UnknownContentIndicator
A widget that wraps content items to provide visual feedback when they contain unknown actions, conditions, layouts, or modifiers.
class UnknownContentIndicator extends StatelessWidgetDirectly declared public members:
final ContentItem contentItem;The content item being checked for unknown content.
final List<vyuh_action.Action?> actions;Additional actions to check for unknown configurations.
final List<Condition?> conditions;Additional conditions to check for unknown configurations.
final LayoutConfiguration? layout;The layout to check (defaults to contentItem.layout).
final Widget child;The child widget to wrap with the indicator.
final bool showDetailOnTap;Whether to show a detailed overlay on tap (debug mode only).
const UnknownContentIndicator({super.key, required this.contentItem, required this.child, this.actions = const [], this.conditions = const [], this.layout, this.showDetailOnTap = true});Widget build(BuildContext context);UnknownContentItem
Internal marker class for unknown content items.
final class UnknownContentItem extends ContentItemDirectly declared public members:
static const dynamic schemaName;final String missingSchemaType;final Map<String, dynamic> jsonPayload;UnknownContentItem({required this.missingSchemaType, required this.jsonPayload});UnknownContentModifierConfiguration
Unknown content modifier configuration placeholder.
final class UnknownContentModifierConfiguration extends ContentModifierConfigurationDirectly declared public members:
static const dynamic schemaName;final String missingSchemaType;final Map<String, dynamic> jsonPayload;UnknownContentModifierConfiguration({required this.missingSchemaType, required this.jsonPayload});Widget build(BuildContext context, Widget child, ContentItem content);UnknownContentView
The default view for a ContentFailure: a missing content type, layout, modifier, action or condition. Styled like the framework's debug views.
class UnknownContentView extends StatelessWidgetDirectly declared public members:
final ContentFailure failure;The failure to describe.
const UnknownContentView({super.key, required this.failure});Creates the view for failure.
Widget build(BuildContext context);UnknownLayoutConfiguration
Unknown layout configuration placeholder.
final class UnknownLayoutConfiguration<T extends ContentItem> extends LayoutConfiguration<T>Directly declared public members:
static const dynamic schemaName;final String missingSchemaType;final Map<String, dynamic> jsonPayload;UnknownLayoutConfiguration({required this.missingSchemaType, required this.jsonPayload});Widget build(BuildContext context, T content);UnknownPlaceholderFactory
Factory function for creating unknown placeholders for different types. This is set by the extension_content package to provide unknown placeholders for ActionConfiguration, ConditionConfiguration, etc.
typedef UnknownPlaceholderFactory = SchemaItem? Function( Type type, String missingSchemaType, Map<String, dynamic> jsonPayload, );cmsFallbackPageBuilder
The page builder of cmsFallbackRoute. In debug builds it marks the page as served by the fallback.
Page<dynamic> cmsFallbackPageBuilder(BuildContext context, g.GoRouterState state)cmsFallbackRoute
A catch-all route that asks the CMS for every location no other route matches, so a page published in the CMS is reachable at its path without a local route.
final cmsFallbackRoute = g.GoRoute( path: NavigationPlugin.catchAllPath, pageBuilder: cmsFallbackPageBuilder, );createUnknownPlaceholder
Factory function that creates unknown placeholders for different schema item types. This is registered with the serialization system to provide placeholders when type registration fails.
SchemaItem? createUnknownPlaceholder(Type type, String missingSchemaType, Map<String, dynamic> jsonPayload)defaultRoutePageBuilder
The default page builder for CMS routes.
Page<dynamic> defaultRoutePageBuilder(BuildContext context, GoRouterState state, {Widget Function(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child)? transitionsBuilder, Duration? transitionDuration})fieldKeyMap
Public declaration in this package.
const fieldKeyMap =initializeUnknownPlaceholderFactory
Initializes the unknown placeholder factory for the serialization system. This should be called during app initialization.
void initializeUnknownPlaceholderFactory()listFromJson
Converts a JSON list to a nullable-list of SchemaItem instances of type T.
List<T>? listFromJson<T extends SchemaItem>(dynamic json)messages
Public declaration in this package.
final messages =readValue
Reads a value from a JSON object using the provided key.
Object? readValue(dynamic json, String key)setUnknownPlaceholderFactory
Sets the factory for creating unknown placeholders.
void setUnknownPlaceholderFactory(UnknownPlaceholderFactory factory)typeFromFirstOfListJson
Converts a JSON object to a nullable-instance of SchemaItem of type T.
T? typeFromFirstOfListJson<T extends SchemaItem>(dynamic json)