evaluate static method

dynamic evaluate(
  1. dynamic calculateConfig,
  2. Map<String, dynamic> formData, {
  3. ComponentModel? component,
})

Evaluates a calculateValue expression and returns the result.

Supports:

  • JSONLogic expressions (recommended)
  • JavaScript expressions (Form.io compatibility)

Example calculateValue (JSONLogic):

{
  "calculateValue": {
    "*": [{"var": "data.price"}, {"var": "data.quantity"}]
  }
}

Example calculateValue (JavaScript):

{
  "calculateValue": "value = data.price * data.quantity * 1.18"
}

calculateConfig - The calculateValue configuration (JSONLogic or JavaScript string) formData - Current form data to use in calculation

Returns the calculated value, or null if calculation fails.

Implementation

static dynamic evaluate(dynamic calculateConfig, Map<String, dynamic> formData, {ComponentModel? component}) {
  if (calculateConfig == null) {
    return null;
  }

  // If it's a map, treat as JSONLogic
  if (calculateConfig is Map<String, dynamic>) {
    return _evaluateJSONLogic(calculateConfig, formData, component: component);
  }

  // If it's a string starting with 'value', it's JavaScript
  if (calculateConfig is String && calculateConfig.trim().startsWith('value')) {
    return _evaluateJavaScript(calculateConfig, formData, component: component);
  }

  // Unknown format
  return null;
}