render method

  1. @override
Widget render(
  1. BuildContext context
)
override

Implementation

@override
Widget render(BuildContext context) {
  if (widget.hidden == true) {
    return const AntdBox();
  }

  var label = buildLabel();
  Widget? feedback = widget.hasFeedback != false
      ? ValueListenableBuilder(
          valueListenable: controller?.getFeedbackRebuildMark(widget.name) ??
              ValueNotifier(false),
          builder: (context, value, _) {
            var errorMessage = controller?.getFieldError(widget.name);
            if (errorMessage?.firstMessage == null) {
              return const AntdBox();
            }
            return AntdBox(
              style: style.feedbackStyle,
              child: Text(errorMessage!.firstMessage!),
            );
          })
      : null;

  Widget? item = AntdBox(
    style: style.itemStyle,
    child: ValueListenableBuilder(
        valueListenable: controller?.getItemRebuildMark(widget.name) ??
            ValueNotifier(false),
        builder: (context, value, _) {
          var ctx = AntdFormItemContext(
              context: context,
              controller: controller,
              formValue: controller?.getFieldsValue(),
              value: controller?.getFieldValue(name: widget.name),
              onChange: (dynamic data) {
                setValue(data, trigger ?? AntdFormTrigger.onChange);
              });
          return widget.builder(ctx);
        }),
  );

  Widget? extra = widget.extra != null
      ? AntdIconWrap(style: style.extraIconStyle, child: widget.extra)
      : null;
  var itemProvider = AntdFormItemProvider(
    getValue: () {
      return controller?.getFieldValue(name: widget.name);
    },
    setValue: setValue,
    namePath: widget.name,
    disabled: disabled == true,
    readOnly: readOnly == true,
    child: item,
  );

  Widget build() {
    if (widget.layoutBuilder != null) {
      return widget.layoutBuilder!(AntdFormItemLayoutContext(
          item: itemProvider,
          label: label,
          feedback: feedback,
          extra: extra));
    }
    var child = layout == AntdFormLayout.horizontal
        ? AntdRow(
            style: style.itemFlexStyle,
            children: [
              if (label != null)
                Expanded(flex: style.span.label, child: label),
              Expanded(
                  flex: label != null ? style.span.item : 1,
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [itemProvider, if (feedback != null) feedback],
                  ))
            ],
          )
        : AntdColumn(
            style: style.itemFlexStyle,
            children: [
              if (label != null) label,
              itemProvider,
              if (feedback != null) feedback
            ],
          );
    return AntdRow(
      style: style.extraRowStyle,
      children: [Expanded(child: child), if (extra != null) extra],
    );
  }

  return AntdBox(
    focusNode: focusNode,
    onTap: () {
      focusNode.requestFocus();
      controller?.addTouched(widget.name);
    },
    disabled: disabled,
    style: style.bodyStyle,
    child: build(),
  );
}