buildWidget method
build your widget here
Implementation
@override
Widget buildWidget(BuildContext context) {
if (widget.controller.groupId == "") {
throw LanguageError("${RadioButton.type} requires a groupId.");
}
if (scopeManager == null) {
throw LanguageError("Invalid ScopeManager for ${RadioButton.type}");
}
var radioButtonController = RadioButtonController.getInstance(
widget.controller.groupId, scopeManager!);
// set default value if selected
if (widget._controller.selected == true) {
radioButtonController.defaultValue = widget._controller.value;
}
return InputWrapper(
type: RadioButton.type,
widget: FormField<String>(
key: validatorKey,
validator: (value) {
if (widget.controller.required &&
radioButtonController.selectedValue == null) {
return Utils.translateWithFallback(
'ensemble.input.required', widget._controller.requiredMessage ?? 'This field is required');
}
return null;
},
builder: (FormFieldState<String> field) => InputDecorator(
decoration: inputDecoration.copyWith(
contentPadding: EdgeInsets.zero,
filled: false,
border: InputBorder.none,
enabledBorder: InputBorder.none,
disabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
errorText: field.errorText,
errorStyle: widget._controller.errorStyle ?? Theme.of(context).inputDecorationTheme.errorStyle,
),
child: ChangeNotifierProvider(
create: (context) => radioButtonController,
child: Consumer<RadioButtonController>(
builder: (context, ref, child) => StyledRadio(
value: widget.controller.value,
groupValue: ref.selectedValue,
onChanged: isEnabled()
? (value) {
ref.selectedValue = value;
if (widget._controller.onChange != null) {
ScreenController().executeAction(
context,
widget._controller.onChange!,
event: EnsembleEvent(widget, data: {'selectedValue': value}),
);
}
}
: null,
activeColor: widget._controller.activeColor,
inactiveColor: widget._controller.inactiveColor,
),
),
),
),
),
controller: widget.controller,
);
}