evaluateFieldDependencies static method
FieldDependencyResult
evaluateFieldDependencies({
- required FormFieldModel field,
- required Map<
String, dynamic> formData, - required List<
NestedContext> contexts,
Implementation
static FieldDependencyResult evaluateFieldDependencies({
required FormFieldModel field,
required Map<String, dynamic> formData,
required List<NestedContext> contexts,
}) {
final resultMap = <FieldDependencyRuleType, bool>{
FieldDependencyRuleType.visibleIf: true,
FieldDependencyRuleType.disabledIf: false,
};
// If field has no dependencies, return defaults
if (field.dependencies == null || field.dependencies!.isEmpty) {
return FieldDependencyResult(result: resultMap);
}
// Handle visibleIf dependencies
final visibleIfDependencies = field.dependencies!
.whereType<FieldDependencyRule>()
.where((dep) => dep.type == FieldDependencyRuleType.visibleIf)
.toList();
if (visibleIfDependencies.isNotEmpty) {
// All visibleIf dependencies must be satisfied for field to be visible
var allVisibleIfConditionsMet = true;
for (final dependency in visibleIfDependencies) {
final resolvedFieldPath = _resolveTemplatedFieldPath(
dependency.field,
contexts,
);
final dependencyValue = getNestedFormValue(formData, resolvedFieldPath);
final conditionMet = _evaluateCondition(
dependencyValue,
dependency.operator,
dependency.compareValue,
);
if (!conditionMet) {
allVisibleIfConditionsMet = false;
break; // If any dependency fails, field is not visible
}
}
resultMap[FieldDependencyRuleType.visibleIf] = allVisibleIfConditionsMet;
}
// Handle disabledIf dependencies
final disabledIfDependencies = field.dependencies!
.whereType<FieldDependencyRule>()
.where((dep) => dep.type == FieldDependencyRuleType.disabledIf)
.toList();
if (disabledIfDependencies.isNotEmpty) {
// If ANY disabledIf dependency is met, the field should be disabled
var anyDisabledIfConditionMet = false;
for (final dependency in disabledIfDependencies) {
final resolvedFieldPath = _resolveTemplatedFieldPath(
dependency.field,
contexts,
);
final dependencyValue = getNestedFormValue(formData, resolvedFieldPath);
final conditionMet = _evaluateCondition(
dependencyValue,
dependency.operator,
dependency.compareValue,
);
if (conditionMet) {
anyDisabledIfConditionMet = true;
break; // If any dependency is met, field should be disabled
}
}
resultMap[FieldDependencyRuleType.disabledIf] = anyDisabledIfConditionMet;
}
return FieldDependencyResult(result: resultMap);
}