setValue method

dynamic setValue(
  1. dynamic name,
  2. dynamic colId,
  3. dynamic originalId,
  4. dynamic value,
  5. dynamic context,
)

Implementation

setValue(name, colId, originalId, value, context) {
  if (isNull(originalId)) {
    originalId = _mFocusNode[gId] ?? '';
  }
  myLogAll('setValue');
  /*
  找到修改值,
    如果找到,比较是否相同,
      如果相同,退出
      否则找原值
        如果找到原值,并相同,删除修改值,退出
        否则,更新修改值,退出

  未找到修改值
      找原值如果相等, 退出
      添加修改值
  */

  dynamic item;
  dynamic owner;
  var typeOwner = gForm;
  if (_tableList[name] != null) {
    typeOwner = gTable;
  }
  if (typeOwner == gTable) {
    item = getTableCol(name, colId);
    owner = _tableList[name];
  } else if (typeOwner == gForm) {
    item = _formLists[name]![gItems][colId];
    owner = _formLists[name];
  }

  bool isItemValid = isItemValueValid(item, value);
  if (isNull(owner[gDataModified])) {
    owner[gDataModified] = {};
  }
  if (isNull(owner[gDataModifiedInvalid])) {
    owner[gDataModifiedInvalid] = {};
  }
  Map dataModified = owner[gDataModified];
  Map dataModifiedInvalid = owner[gDataModifiedInvalid];
  dynamic mValue;
  bool isValidZone = true;
  var id = originalId ?? gFakeId;
  if (dataModified.containsKey(id)) {
    mValue = dataModified[id];
  } else if (dataModifiedInvalid.containsKey(id)) {
    mValue = dataModifiedInvalid[id];
    isValidZone = false;
  }
  dynamic originalValue = getValueOriginal(name, colId, id);

  //找到修改值
  if (!isNull(mValue) && !isNull(mValue[colId])) {
    //修改值未改变,退出
    if (mValue[colId] == value) {
      return;
    }

    //新值与原值相同,删除修改值,退出
    if (!isNull(originalValue) && !isNull(value) && originalValue == value) {
      mValue.remove(colId);
      if (mValue.length < 1) {
        dataModified.remove(id);
      }
      return;
    }
    //更新
    mValue[colId] = value;
    if (isItemValid) {
      //如值值合法,却在非法区,移到合法区
      if (!isValidZone) {
        moveItemBetweenMaps(id, dataModifiedInvalid, dataModified);
      }
    } else {
      //如值值非法,却在合法区,移到非法区
      if (isValidZone) {
        moveItemBetweenMaps(id, dataModified, dataModifiedInvalid);
      }
    }
  } else {
    //修改值与源值同,退出
    if (!isNull(originalValue) && !isNull(value) && originalValue == value) {
      return;
    }
    //添加修改值
    if (isItemValid) {
      if (isNull(dataModified[id])) {
        dataModified[id] = {};
      }
      dataModified[id][colId] = value;
    } else {
      if (isNull(dataModifiedInvalid[id])) {
        dataModifiedInvalid[id] = {};
      }
      dataModifiedInvalid[id][colId] = value;
    }
  }
  //if is valid

  //setFocus(name, colId, null, true, context, -1);
}