buildWidget method

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

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