valueToNative function
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;
}