getFieldsElementsMap method

Map<String, UIElement> getFieldsElementsMap({
  1. List<String>? fields,
  2. List<String>? ignoreFields,
  3. bool resolveUIComponents = true,
})

Implementation

Map<String, UIElement> getFieldsElementsMap(
    {List<String>? fields,
    List<String>? ignoreFields,
    bool resolveUIComponents = true}) {
  fields ??= [];
  ignoreFields ??= [];

  final specificFields = fields.isNotEmpty;

  final fieldsElements = getFieldsElements();

  final map = <String, UIElement>{};

  for (var elem in fieldsElements) {
    var fieldName =
        getElementFieldName(elem, resolveUIComponents: resolveUIComponents)!;

    var include = specificFields ? fields.contains(fieldName) : true;

    if (include && !ignoreFields.contains(fieldName)) {
      if (map.containsKey(fieldName)) {
        var elemValue = parseChildElementValue(map[fieldName],
            allowTextAsValue: false,
            resolveUIComponents: resolveUIComponents);

        if (isEmptyObject(elemValue)) {
          var value = parseChildElementValue(elem,
              allowTextAsValue: false,
              resolveUIComponents: resolveUIComponents);
          if (isNotEmptyObject(value)) {
            map[fieldName] = elem;
          }
        }
      } else {
        map[fieldName] = elem;
      }
    }
  }

  return map;
}