valueToNative function

Object? valueToNative(
  1. Map<String, Object?> value
)

Converts a google.protobuf.Value JSON map to its native Dart equivalent.

A Value has exactly one of the following keys set (the kind oneof):

  • "nullValue"null
  • "numberValue"num
  • "stringValue"String
  • "boolValue"bool
  • "structValue"Map<String, Object?> (recursively via structToMap)
  • "listValue"List<Object?> (recursively converts each element)

Returns null for unrecognized or empty Value maps.

Implementation

Object? valueToNative(Map<String, Object?> value) {
  if (value.containsKey('nullValue')) {
    return null;
  }
  if (value.containsKey('numberValue')) {
    return value['numberValue'];
  }
  if (value.containsKey('stringValue')) {
    return value['stringValue'];
  }
  if (value.containsKey('boolValue')) {
    return value['boolValue'];
  }
  if (value.containsKey('structValue')) {
    final sv = value['structValue'];
    if (sv is Map<String, Object?>) {
      return structToMap(sv);
    }
    return sv;
  }
  if (value.containsKey('listValue')) {
    final lv = value['listValue'];
    if (lv is Map<String, Object?>) {
      final values = lv['values'];
      if (values is List) {
        return values.map((e) {
          if (e is Map<String, Object?>) return valueToNative(e);
          return e;
        }).toList();
      }
    }
    if (lv is List) {
      return lv.map((e) {
        if (e is Map<String, Object?>) return valueToNative(e);
        return e;
      }).toList();
    }
    return lv;
  }
  return null;
}