internalPost method

  1. @override
void internalPost()
override

Implementation

@override
void internalPost() {
  super.internalPost(); // CheckRequiredFields
  final rec = activeBuffer();
  if (rec == null) return;
  if (state == TDataSetState.dsInsert) {
    // Insertion point: at the current cursor position (a minimal analogue of bookmark semantics)
    var at = _cursorIndex + 1;
    if (rec.bookmarkFlag == TBookmarkFlag.bfEOF || at > _records.length) {
      at = _records.length;
    }
    if (at < 0) at = 0;
    final stored = TRecordBuffer()..fieldData.addAll(rec.fieldData);
    _records.insert(at, stored);
    _cursorIndex = at;
    _pendingUpdates
        .add(_PendingUpdate(TUpdateKind.ukInsert, {}, Map.of(rec.fieldData)));
  } else {
    if (_cursorIndex >= 0 && _cursorIndex < _records.length) {
      _records[_cursorIndex].fieldData
        ..clear()
        ..addAll(rec.fieldData);
    }
    _pendingUpdates.add(_PendingUpdate(TUpdateKind.ukModify,
        Map.of(_oldValueBuffer?.fieldData ?? {}), Map.of(rec.fieldData)));
  }
  _changeCount = _pendingUpdates.length;
  _oldValueBuffer = null;
}