diff --git a/generator/lib/src/generator.dart b/generator/lib/src/generator.dart index fac0d8670..a6f38d683 100644 --- a/generator/lib/src/generator.dart +++ b/generator/lib/src/generator.dart @@ -1871,6 +1871,20 @@ if (T != dynamic && return dartType.element3.getMethod2('toJson') != null; } + /// Gets the expression for serializing an enum value in FormData as a string. + /// Uses toJson() if available, otherwise uses .name. + String _getEnumValueExpression(DartType enumType, String variableName) { + return _hasToJson(enumType) ? '$variableName.toJson()' : '$variableName.name'; + } + + /// Gets the Reference for serializing an enum value in FormData. + /// Uses toJson() if available, otherwise uses .name. + Expression _getEnumValueReference(DartType enumType, String variableName) { + return _hasToJson(enumType) + ? refer(variableName).property('toJson').call([]) + : refer(variableName).property('name'); + } + /// Generates the query parameters code block. void _generateQueries( MethodElement2 m, @@ -2455,7 +2469,7 @@ MultipartFile.fromBytes(i, _isExactly(BuiltList, innerType)))) { var value = ''; if (innerType != null && _isEnum(innerType)) { - value = 'i'; + value = _getEnumValueExpression(innerType, 'i'); } else if (_isBasicType(innerType)) { value = 'i'; if (innerType != null && !_isExactly(String, innerType)) { @@ -2553,16 +2567,7 @@ MultipartFile.fromFileSync(i.path, if (_isExactly(String, p.type)) refer(p.displayName) else if (_isEnum(p.type)) - _hasToJson(p.type) - ? refer(p.displayName) - .property('toJson') - .call([]) - .ifNullThen( - refer( - p.displayName, - ).property('toString').call([]), - ) - : refer(p.displayName).property('toString').call([]) + _getEnumValueReference(p.type, p.displayName) else refer(p.displayName).property('toString').call([]), ]), diff --git a/generator/test/src/generator_test_src.dart b/generator/test/src/generator_test_src.dart index 77d12eb4e..3ee934f43 100644 --- a/generator/test/src/generator_test_src.dart +++ b/generator/test/src/generator_test_src.dart @@ -1344,12 +1344,10 @@ enum TestEnumWithToJson { final _data = FormData.fromMap(map); ''', contains: true) @ShouldGenerate(''' -_data.fields.add(MapEntry('enumValue', enumValue.toString())); +_data.fields.add(MapEntry('enumValue', enumValue.name)); ''', contains: true) @ShouldGenerate(''' - _data.fields.add( - MapEntry('enumValue', enumValue.toJson() ?? enumValue.toString()), - ); + _data.fields.add(MapEntry('enumValue', enumValue.toJson())); ''', contains: true) @ShouldGenerate(''' final _data = FormData();