setvar function

void setvar(
  1. String name,
  2. dynamic value
)

setvar — corresponds to WML's <setvar name= value=>.

Implementation

void setvar(String name, dynamic value) {
  final ev = _currentEvaluator;
  if (ev == null) return;
  final dynamic v = (value is String) ? expression(value) : value;

  final lb = name.indexOf("[");
  final rb = name.indexOf("]");
  if (lb > 0 && rb > lb) {
    final aryName = name.substring(0, lb);
    final idxExpr = name.substring(lb + 1, rb);
    final k = expression(idxExpr);
    final idx = (k is int) ? k : int.tryParse("$k") ?? 0;
    final cur = ev.getVar(aryName);
    final list = (cur is List) ? cur : <dynamic>[];
    while (list.length <= idx) {
      list.add(null);
    }
    list[idx] = v;
    ev.setVar(aryName, list);
    _notifyVarChanged(aryName);
    return;
  }

  final dot = name.indexOf(".");
  if (dot > 0 && _currentRegistry != null) {
    final dsName = name.substring(0, dot);
    final field = name.substring(dot + 1);
    final ds = _currentRegistry!.find(dsName);
    if (ds != null && ds.active) {
      // Corresponds to lazarus_db_types.dart's DataSetState (the original
      // code used TTDataSetState.dsBrowse; here it's TDataSetState.dsBrowse)
      if (ds.state == TDataSetState.dsBrowse) ds.edit();
      ds.setFieldValues(field, v);
      return;
    }
  }

  ev.setVar(name, v);
  _notifyVarChanged(name);
}