getWidgets method

List<Widget> getWidgets()

Implementation

List<Widget> getWidgets() {
  return attributes.keys.map((attribute) {
    final attrs = attributes.keys.toList();
    final length = attrs.length;
    final isLast = attrs.indexWhere((a) => a == attribute) == length - 1;
    final key = getFormKey(attribute);
    final type = getAttributeType(attribute);
    final obscure = type == FT.password;
    const separator = SizedBox(height: 16);
    final form = FormifyTextField(
      formKey: key,
      obscureText: obscure,
      label: getLabel(attribute),
      validator: (_) => getErrorMessage(attribute),
      onChanged: (value) => setValue(attribute, value),
      keyboardType: getAttributeType(attribute).keyboardType,
      autovalidateMode: AutovalidateMode.always,
      //initialValue: getValue(attribute),
      inputDecoration: inputDecoration,
      onFieldSubmitted: isLast ? onSubmit : null,
      textInputAction: isLast ? TextInputAction.send : TextInputAction.next,
    );
    return ValueListenableBuilder<bool>(
        valueListenable: isLoadingNotifier,
        builder: (context, isLoading, __) {
          return Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            mainAxisAlignment: MainAxisAlignment.start,
            children: [
              ValueListenableBuilder<List<String>?>(
                  valueListenable: _getErrorNotifier(attribute),
                  builder: (context, errors, __) {
                    return ValueListenableBuilder(
                        valueListenable: _getValueNotifier(attribute),
                        builder: (context, value, __) {
                          if (formBuilder != null) {
                            return formBuilder!(
                              context,
                              Formify(this, attribute, isLoading),
                              form.copyWith(
                                readOnly: isLoading,
                                initialValue: value?.toString(),
                              ),
                            );
                          } else {
                            return form.copyWith(
                              readOnly: isLoading,
                              initialValue: value?.toString(),
                            );
                          }
                        });
                  }),
              if (separatorBuilder != null) ...[
                separatorBuilder!(
                  context,
                  Formify(this, attribute, isLoading),
                  separator,
                ),
              ] else ...[
                separator
              ],
            ],
          );
        });
  }).toList();
}