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