readValueOfType method

dynamic readValueOfType (int type, ReadBuffer buffer)

Reads a value of the indicated type from buffer.

The codec can be extended by overriding this method, calling super for types that the extension does not handle.

Implementation

dynamic readValueOfType(int type, ReadBuffer buffer) {
  dynamic result;
  switch (type) {
    case _valueNull:
      result = null;
      break;
    case _valueTrue:
      result = true;
      break;
    case _valueFalse:
      result = false;
      break;
    case _valueInt32:
      result = buffer.getInt32();
      break;
    case _valueInt64:
      result = buffer.getInt64();
      break;
    case _valueLargeInt:
      // Flutter Engine APIs to use large ints have been deprecated on
      // 2018-01-09 and will be made unavailable.
      // TODO(mravn): remove this case once the APIs are unavailable.
      final int length = readSize(buffer);
      final String hex = utf8.decoder.convert(buffer.getUint8List(length));
      result = int.parse(hex, radix: 16);
      break;
    case _valueFloat64:
      result = buffer.getFloat64();
      break;
    case _valueString:
      final int length = readSize(buffer);
      result = utf8.decoder.convert(buffer.getUint8List(length));
      break;
    case _valueUint8List:
      final int length = readSize(buffer);
      result = buffer.getUint8List(length);
      break;
    case _valueInt32List:
      final int length = readSize(buffer);
      result = buffer.getInt32List(length);
      break;
    case _valueInt64List:
      final int length = readSize(buffer);
      result = buffer.getInt64List(length);
      break;
    case _valueFloat64List:
      final int length = readSize(buffer);
      result = buffer.getFloat64List(length);
      break;
    case _valueList:
      final int length = readSize(buffer);
      result = List<dynamic>(length);
      for (int i = 0; i < length; i++) {
        result[i] = readValue(buffer);
      }
      break;
    case _valueMap:
      final int length = readSize(buffer);
      result = <dynamic, dynamic>{};
      for (int i = 0; i < length; i++) {
        result[readValue(buffer)] = readValue(buffer);
      }
      break;
    default: throw const FormatException('Message corrupted');
  }
  return result;
}