diff --git a/packages/firebase_data_connect/firebase_data_connect/lib/src/optional.dart b/packages/firebase_data_connect/firebase_data_connect/lib/src/optional.dart index 224ac3468ea1..99a60aa2f355 100644 --- a/packages/firebase_data_connect/firebase_data_connect/lib/src/optional.dart +++ b/packages/firebase_data_connect/firebase_data_connect/lib/src/optional.dart @@ -65,6 +65,8 @@ class Optional { dynamic toJson() { if (_value != null) { return serializer(_value as T); + } else if (state == OptionalState.set) { + return null; } return ''; } diff --git a/packages/firebase_data_connect/firebase_data_connect/test/src/optional_test.dart b/packages/firebase_data_connect/firebase_data_connect/test/src/optional_test.dart index 344ec02e03bf..fa8c802051e7 100644 --- a/packages/firebase_data_connect/firebase_data_connect/test/src/optional_test.dart +++ b/packages/firebase_data_connect/firebase_data_connect/test/src/optional_test.dart @@ -75,7 +75,7 @@ void main() { final optional = Optional.optional(stringDeserializer, stringSerializer); optional.value = null; - expect(optional.toJson(), equals('')); + expect(optional.toJson(), equals(null)); }); test('nativeToJson correctly serializes primitive types', () { @@ -91,6 +91,15 @@ void main() { expect(nativeFromJson('Test'), equals('Test')); }); + test('nativeToJson correctly serializes null primitive types', () { + Optional intValue = Optional(nativeFromJson, nativeToJson); + intValue.value = null; + expect(intValue.toJson(), equals(null)); + Optional floatValue = Optional(nativeFromJson, nativeToJson); + floatValue.value = null; + expect(floatValue.toJson(), equals(null)); + }); + // Since protobuf doesn't distinguish between int and double, we need to do the parsing ourselves test('nativeFromJson correctly matches int to int and double to double', () {