expand method

Iterable<(dynamic, Widget)> expand(
  1. BuildContext buildContext,
  2. TypeRegistry typeRegistry,
  3. Environment environment
)

Implementation

Iterable<(dynamic, Widget)> expand(BuildContext buildContext, TypeRegistry typeRegistry, Environment environment) {
  final widgetContext = WidgetContextScope.of(buildContext);

  // Compile the binding once

  Eval? compiledCall;
  if (context.isNotEmpty) {
    compiledCall = ActionCompiler.instance.compile(context, context: widgetContext.typeDescriptor);
  }

  // Evaluate list at runtime

  List<dynamic> items = compiledCall?.eval(widgetContext.instance, EvalContext(instance: widgetContext.instance, variables: {})) ?? const [];

  if (children.isEmpty) return [];

  final templateChild = children[0];

  return items.map<(dynamic, Widget)>((item) {
    return (item, WidgetContextScope(
      contextValue: WidgetContext(instance: item),
      child: DynamicWidget(
        model: templateChild,
        meta: typeRegistry[templateChild.type],
      ),
    ));
  });
}