diff --git a/packages/dynamite/dynamite_runtime/lib/src/built_value/content_string_serializer.dart b/packages/dynamite/dynamite_runtime/lib/src/built_value/content_string_serializer.dart index e8a305be05b..7578c9c4a98 100644 --- a/packages/dynamite/dynamite_runtime/lib/src/built_value/content_string_serializer.dart +++ b/packages/dynamite/dynamite_runtime/lib/src/built_value/content_string_serializer.dart @@ -21,6 +21,10 @@ class ContentStringPlugin implements SerializerPlugin { return object; } + if (object == null) { + return object; + } + if (object is! Map) { throw StateError('ContentStringPlugin can only be applied to Map. ' 'Please ensure the StandardJsonPlugin is applied and run before.'); @@ -37,6 +41,10 @@ class ContentStringPlugin implements SerializerPlugin { return object; } + if (object == null) { + return object; + } + if (object is! String) { throw StateError('The serialized ContentString must be of type String. ' 'Please ensure the StandardJsonPlugin is applied and run before.'); diff --git a/packages/dynamite/dynamite_runtime/test/content_string_test.dart b/packages/dynamite/dynamite_runtime/test/content_string_test.dart index 81cd4378e02..0eda9989d87 100644 --- a/packages/dynamite/dynamite_runtime/test/content_string_test.dart +++ b/packages/dynamite/dynamite_runtime/test/content_string_test.dart @@ -333,4 +333,18 @@ void main() { ); }); }); + + group('Serialize null value', () { + const data = null; + const serialized = null; + const specifiedType = FullType(ContentString, [FullType(bool)]); + + test('can be serialized', () { + expect(serializers.serialize(data, specifiedType: specifiedType), serialized); + }); + + test('can be deserialized', () { + expect(serializers.deserialize(serialized, specifiedType: specifiedType), data); + }); + }); }