setvar function
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 num) ? k.toInt() : int.tryParse("$k") ?? 0;
final cur = ev.getVar(aryName);
var list = (cur is List) ? cur : <dynamic>[];
try {
while (list.length <= idx) {
list.add(null);
}
list[idx] = v;
} on TypeError {
// a typed list (e.g. List<int> from Dart code) can't hold null or
// other types: continue with a List<dynamic> copy
list = List<dynamic>.of(list);
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);
}