render method
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(),
);
}