handle<V> method
V
handle<V>({
- required ParameterType parameterType,
- required V value,
- required String name,
- Kind? kind,
- V? defaultConstant,
- String? jsonName,
- List<
Trait> ? tags,
override
Handles calls to positional, optionalPositional, required, call, optional.
Implementation
@override
V handle<V>({
required ParameterType parameterType,
required V value,
required String name,
Kind? kind,
V? defaultConstant,
String? jsonName,
List<Trait>? tags,
}) {
if (tags != null && tags.contains(Trait.noSerialization)) {
return value;
}
// JSON name defaults to Dart identifier
jsonName ??= name;
if (jsonObject.containsKey(jsonName)) {
throw StateError(
'JSON field "$jsonName" was declared twice.',
);
}
if (defaultConstant != null && value == defaultConstant) {
return value;
}
//
// Handle simple, common cases
//
Object? jsonValue;
if (value == null || value is bool || value is String) {
jsonValue = value;
} else if (value is num) {
jsonValue = value.toDouble();
} else {
kind ??= Kind.find<V>();
jsonValue = kind.encodeJsonTree(value);
}
jsonObject[jsonName] = jsonValue;
return value;
}