decode method
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);
}