from static method

XNativeWidgetParams? from(
  1. XNativeWidget widget,
  2. SSRBuildContext context
)

Implementation

static XNativeWidgetParams? from(
    XNativeWidget widget, SSRBuildContext context) {
  final builder = context.widgetRepository.nativeWidgets[widget.name];

  if (kDebugMode) {
    if (builder == null) {
      appAnalytics().logInMemoryEvent(InMemoryEvent(
        'native_widget_not_found',
        {'name': widget.name},
      ));

      return XNativeWidgetParams(
          QuickNativeWidget(Container(
              color: Colors.red,
              child: Text(
                'Native widget ${widget.name} not found',
                style: const TextStyle(
                  color: Colors.white,
                ),
              ))),
          params: NativeWidgetParams(
            name: widget.name,
            params: widget.params.toProto3Json() as Map<String, dynamic>,
          ));
    }
  }

  if (builder == null) {
    return _emptyWidget;
  }

  final params = NativeWidgetParams(
    name: widget.name,
    params: widget.params.toProto3Json() as Map<String, dynamic>,
  );

  for (final trigger in widget.triggers) {
    params.setHandler(trigger.name, trigger.trigger.buildHandler(context));
  }

  for (final builder in widget.widgets) {
    params.setBuilder(builder.name, _cookWidget(builder.widget, context));
  }

  for (final gradient in widget.gradients) {
    params.setGradient(gradient.name, gradient.gradient.toHubbleGradient());
  }

  for (final color in widget.colors) {
    params.setColor(color.name, color.color.toHubbleColor());
  }

  for (final border in widget.borders) {
    params.setBorder(border.name, border.border.toHubbleBorder());
  }

  for (final shadow in widget.boxShadows) {
    params.setShadow(shadow.name, shadow.shadow.toHubbleBoxShadow());
  }

  for (final offset in widget.offsets) {
    params.setOffset(offset.name, offset.offset.toOffset());
  }

  for (final borderRadii in widget.borderRadius) {
    params.setBorderRadius(
        borderRadii.name, borderRadii.radius.toBorderRadius());
  }

  for (final edgeInsets in widget.edgeInsets) {
    params.setEdgeInsets(
        edgeInsets.name, edgeInsets.edgeInsets.toEdgeInsets());
  }

  final nativeWidget = builder.call(params);
  return XNativeWidgetParams(nativeWidget, params: params);
}