BuildOp constructor

BuildOp({
  1. bool? alwaysRenderBlock,
  2. String? debugLabel,
  3. DefaultStyles? defaultStyles,
  4. OnParsed? onParsed,
  5. OnRenderBlock? onRenderBlock,
  6. OnRenderInline? onRenderInline,
  7. OnRenderedBlock? onRenderedBlock,
  8. OnRenderedChildren? onRenderedChildren,
  9. OnVisitChild? onVisitChild,
  10. int priority = kPriorityDefault,
  11. @Deprecated('Use onVisitChild instead.') void onChild(
    1. BuildMetadata subTree
    )?,
  12. @Deprecated('Use onParsed instead.') void onTree(
    1. BuildMetadata meta,
    2. BuildTree tree
    )?,
  13. @Deprecated('Use onRenderInline instead.') void onTreeFlattening(
    1. BuildMetadata meta,
    2. BuildTree tree
    )?,
  14. @Deprecated('Use onRenderBlock instead.') Iterable<Widget>? onWidgets(
    1. BuildMetadata meta,
    2. Iterable<WidgetPlaceholder> widgets
    )?,
  15. @Deprecated('Use alwaysRenderBlock instead.') bool onWidgetsIsOptional = false,
})

Creates a build op.

Implementation

factory BuildOp({
  bool? alwaysRenderBlock,
  String? debugLabel,
  DefaultStyles? defaultStyles,
  OnParsed? onParsed,
  OnRenderBlock? onRenderBlock,
  OnRenderInline? onRenderInline,
  OnRenderedBlock? onRenderedBlock,
  OnRenderedChildren? onRenderedChildren,
  OnVisitChild? onVisitChild,
  int priority = kPriorityDefault,

  // legacy v1 parameters
  @Deprecated('Use onVisitChild instead.')
  void Function(BuildMetadata subTree)? onChild,
  @Deprecated('Use onParsed instead.')
  void Function(BuildMetadata meta, BuildTree tree)? onTree,
  @Deprecated('Use onRenderInline instead.')
  void Function(BuildMetadata meta, BuildTree tree)? onTreeFlattening,
  @Deprecated('Use onRenderBlock instead.')
  Iterable<Widget>? Function(
    BuildMetadata meta,
    Iterable<WidgetPlaceholder> widgets,
  )? onWidgets,
  @Deprecated('Use alwaysRenderBlock instead.')
  bool onWidgetsIsOptional = false,
}) {
  final onRenderBlockOrOnWidgets = onRenderBlock ??
      (onWidgets != null
          ? (tree, placeholder) {
              final children = onWidgets(tree, [placeholder]);
              switch (children?.length) {
                case null:
                  return placeholder;
                case 0:
                  return widget0;
                case 1:
                  return children?.first ?? widget0;
                default:
                  throw UnsupportedError(
                    'onWidgets must return exactly 1 widget, got ${children?.length}',
                  );
              }
            }
          : null);

  return BuildOp.v2(
    alwaysRenderBlock: alwaysRenderBlock ??
        (onWidgetsIsOptional ? null : (onRenderBlockOrOnWidgets != null)),
    debugLabel: debugLabel,
    defaultStyles: defaultStyles,
    onParsed: onParsed ??
        (onTree != null
            ? (tree) {
                onTree(tree, tree);
                return tree;
              }
            : null),
    onRenderBlock: onRenderBlockOrOnWidgets,
    onRenderInline: onRenderInline ??
        (onTreeFlattening != null
            ? (tree) => onTreeFlattening(tree, tree)
            : null),
    onRenderedBlock: onRenderedBlock,
    onRenderedChildren: onRenderedChildren,
    onVisitChild: onVisitChild ??
        (onChild != null ? (_, subTree) => onChild(subTree) : null),
    priority: priority,
  );
}