From f1301cb69d4107151049cd4b2cb43ef3ed1cd4e8 Mon Sep 17 00:00:00 2001 From: CazSaa Date: Wed, 29 Apr 2026 09:54:48 +0200 Subject: [PATCH] Fix nullability of non-required Asset fields Fixes #54 --- code_generator/lib/src/fields/asset_field.dart | 9 +++++++-- code_generator/test/field_test.dart | 3 ++- 2 files changed, 9 insertions(+), 3 deletions(-) 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", () {