diff --git a/code_generator/lib/src/fields/asset_field.dart b/code_generator/lib/src/fields/asset_field.dart index 5bd2b48..62545c7 100644 --- a/code_generator/lib/src/fields/asset_field.dart +++ b/code_generator/lib/src/fields/asset_field.dart @@ -24,6 +24,11 @@ base class AssetField extends BaseField { ); @override - Expression buildInitializer(CodeExpression valueExpression) => - initializerFromRequired(isRequired, valueExpression, type.nonNullable.invokeNamed("fromJson", valueExpression)); + Expression buildInitializer(CodeExpression valueExpression) { + if (isRequired) return type.nonNullable.invokeNamed("fromJson", valueExpression); + return valueExpression + .equalTo(literalNull) + .or(valueExpression.index(literalString('filename')).equalTo(literalNull)) + .conditional(literalNull, type.nonNullable.invokeNamed("fromJson", valueExpression)); + } } diff --git a/code_generator/test/field_test.dart b/code_generator/test/field_test.dart index 94938c9..58aa594 100644 --- a/code_generator/test/field_test.dart +++ b/code_generator/test/field_test.dart @@ -689,7 +689,8 @@ void main() { ); expect( field.buildInitializer(valueExpression.expression), - emitter.equalsCode("$valueExpression == null ? null : Asset.fromJson($valueExpression)"), + emitter.equalsCode( + "$valueExpression == null || $valueExpression [ 'filename' ] == null ? null : Asset.fromJson($valueExpression)"), ); }); test("Test required asset", () {