FlCheckboxGroupFormField<T> constructor

FlCheckboxGroupFormField<T>({
  1. Key? key,
  2. required String label,
  3. bool isRequired = false,
  4. FormFieldValidator<List<T>>? validator,
  5. List<T>? initialValue,
  6. required List<T> options,
  7. required ValueWidgetBuilder<T> itemBuilder,
  8. AutovalidateMode? autovalidateMode,
  9. FormFieldSetter<List<T>>? onSaved,
  10. String? restorationId,
  11. bool enabled = true,
})

Implementation

FlCheckboxGroupFormField({
  super.key,
  required String label,
  bool isRequired = false,
  FormFieldValidator<List<T>>? validator,
  List<T>? initialValue,
  required List<T> options,
  required ValueWidgetBuilder<T> itemBuilder,
  AutovalidateMode? autovalidateMode,
  FormFieldSetter<List<T>>? onSaved,
  String? restorationId,
  bool enabled = true,
}) : super(
        autovalidateMode: autovalidateMode,
        enabled: enabled,
        initialValue: initialValue,
        onSaved: onSaved,
        validator: validator,
        restorationId: restorationId,
        builder: (field) {
          return Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: [
              Padding(
                padding: const EdgeInsets.only(bottom: 4),
                child: RichText(
                  text: TextSpan(
                      style: Theme.of(field.context)
                          .extension<FlFormFieldTheme>()
                          ?.labelStyle,
                      children: [
                        TextSpan(text: label),
                        if (isRequired)
                          TextSpan(
                            text: ' *',
                            style: Theme.of(field.context)
                                .extension<FlFormFieldTheme>()
                                ?.labelStyle
                                .copyWith(color: Colors.red),
                          ),
                      ]),
                ),
              ),
              InputDecorator(
                decoration: InputDecoration(
                  contentPadding:
                      const EdgeInsets.symmetric(vertical: 8, horizontal: 4),
                  enabledBorder: field.hasError
                      ? Theme.of(field.context)
                          .extension<FlFormFieldTheme>()
                          ?.inputDecorationTheme
                          .errorBorder
                      : null,
                  focusedBorder: field.hasError
                      ? Theme.of(field.context)
                          .extension<FlFormFieldTheme>()
                          ?.inputDecorationTheme
                          .focusedErrorBorder
                      : null,
                  border: field.hasError
                      ? Theme.of(field.context)
                          .extension<FlFormFieldTheme>()
                          ?.inputDecorationTheme
                          .errorBorder
                      : null,
                ).applyDefaults(
                  Theme.of(field.context)
                          .extension<FlFormFieldTheme>()
                          ?.inputDecorationTheme ??
                      Theme.of(field.context).inputDecorationTheme,
                ),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    ...options.map((e) {
                      return Row(
                        children: [
                          Checkbox(
                            value: field.value?.contains(e) == true,
                            onChanged: (value) {
                              if (value == true) {
                                field.didChange([...field.value ?? [], e]);
                              } else {
                                field.didChange([...field.value!]..remove(e));
                              }
                            },
                          ),
                          const SizedBox(
                            width: 4,
                          ),
                          Expanded(
                            child: itemBuilder(field.context, e, null),
                          )
                        ],
                      );
                    })
                  ],
                ),
              ),
              if (field.hasError)
                Padding(
                  padding: EdgeInsets.only(
                    top: 4,
                    left: (Theme.of(field.context)
                            .extension<FlFormFieldTheme>()
                            ?.inputDecorationTheme
                            .contentPadding as EdgeInsets)
                        .left,
                  ),
                  child: RichText(
                    text: TextSpan(
                        style: Theme.of(field.context)
                            .extension<FlFormFieldTheme>()
                            ?.errorStyle,
                        children: [
                          TextSpan(text: field.errorText),
                        ]),
                  ),
                ),
            ],
          );
        },
      );