decode method

  1. @override
(dynamic, int) decode(
  1. Uint8List data,
  2. int offset
)
override

ABI-decode from data at byte offset. Returns (decoded value, bytes consumed from head).

Implementation

@override
(dynamic, int) decode(Uint8List data, int offset) {
  var pos = offset;
  int length;

  if (fixedLength != null) {
    length = fixedLength!;
  } else {
    length = _readUint256(data, pos).toInt();
    pos += 32;
  }

  final baseOffset = pos;
  final results = <dynamic>[];

  if (!elementType.isDynamic) {
    for (var i = 0; i < length; i++) {
      final (val, consumed) = elementType.decode(data, pos);
      results.add(val);
      pos += consumed;
    }
    return (results, pos - offset);
  }

  final offsets = <int>[];
  for (var i = 0; i < length; i++) {
    offsets.add(_readUint256(data, pos).toInt());
    pos += 32;
  }
  var maxEnd = pos;
  for (var i = 0; i < length; i++) {
    final tailPos = baseOffset + offsets[i];
    final (val, consumed) = elementType.decode(data, tailPos);
    results.add(val);
    final end = tailPos + consumed;
    if (end > maxEnd) maxEnd = end;
  }
  return (results, maxEnd - offset);
}