body method

Map<String, dynamic> body()

Generates a map from the form state, applying any transformations specified by the fieldTransformers method.

This method iterates over all fields in the form state, applies any registered transformers, and returns a map suitable for use as a request body.

It also respects the options:

Returns a Map<String, dynamic> containing the transformed form data.

Implementation

Map<String, dynamic> body() {
  final registry = TransformersRegistry();
  fieldTransformers(registry);

  final raw = <String, dynamic>{};

  // Iterate through each field in the fields map
  state.fields.forEach((fieldName, fieldState) {
    // Skip ignored fields
    if (ignoredBodyKeys.contains(fieldName)) return;

    final fieldValue = fieldState.value;
    final transformed = registry.transform(fieldValue, fieldKey: fieldName);
    final value = transformed ?? fieldValue;

    // Skip empty/null values if enabled
    if (ignoreEmptyValues &&
            (value == null || (value is String && value.trim().isEmpty)) ||
        (value is List && value.isEmpty) ||
        (value is Set && value.isEmpty)) {
      return;
    }

    // Determine final key
    final key = remapKeys[fieldName] ?? fieldName;

    // Support nested merging of transformer output
    if (mergeNestedMaps && value is Map<String, dynamic>) {
      raw.addAll(value);
    } else {
      raw[key] = value;
    }
  });

  return postProcessBody(raw);
}