toJson method
Converts this object into JSON format.
optimizeFor lets the program know what information to include in the
JSON data map.
- OptimizeFor.put (the default value) is used when making a data map that is being placed in a PUT request. This only includes data that has changed.
- OptimizeFor.putFull is used when a parent object updates; so, all of the children are required to be present for the PUT request.
- OptimizeFor.post is used when making a data map for a POST request.
- OptimizeFor.dontOptimize is used to get all of the data contained in this object.
Throws InvalidIdException if owner.id is empty and optimizeFor is
not set to OptimizeFor.dontOptimize.
Throws GradientException if gradient.points has is not in the proper
range. It must either have 0 elements or between 2 and 5 (inclusive), and
optimizeFor is not set to OptimizeFor.dontOptimize.
Throws InvalidValueException if gradient.mode, effects.effect,
timedEffects.effect, or alert.action are empty and optimizeFor is
not set to OptimizeFor.dontOptimize.
Throws InvalidNameException if metadata.name doesn't have 1 to 32
characters (inclusive), and optimizeFor is not set to
OptimizeFor.dontOptimize.
Implementation
@override
Map<String, dynamic> toJson({OptimizeFor optimizeFor = OptimizeFor.put}) {
// PUT
if (identical(optimizeFor, OptimizeFor.put)) {
Map<String, dynamic> toReturn = {};
if (!identical(type, originalType)) {
toReturn[ApiFields.type] = type.value;
}
if (metadata != _originalMetadata) {
toReturn[ApiFields.metadata] =
metadata.toJson(optimizeFor: OptimizeFor.putFull);
}
if (on != _originalOn) {
toReturn[ApiFields.isOn] = on.toJson(optimizeFor: OptimizeFor.putFull);
}
if (dimming != _originalDimming) {
toReturn[ApiFields.dimming] =
dimming.toJson(optimizeFor: OptimizeFor.putFull);
}
if (!(_originalDimmingDelta == null && dimmingDelta == null) &&
(((_originalDimmingDelta != null && dimmingDelta != null) &&
(_originalDimmingDelta != dimmingDelta)) ||
(_originalDimmingDelta == null || dimmingDelta == null))) {
toReturn[ApiFields.dimmingDelta] =
dimmingDelta?.toJson(optimizeFor: OptimizeFor.putFull);
}
if (colorTemperature != _originalColorTemperature) {
toReturn[ApiFields.colorTemperature] =
colorTemperature.toJson(optimizeFor: OptimizeFor.putFull);
}
if (!(_originalColorTemperatureDelta == null &&
colorTemperatureDelta == null) &&
(((_originalColorTemperatureDelta != null &&
colorTemperatureDelta != null) &&
(_originalColorTemperatureDelta != colorTemperatureDelta)) ||
(_originalColorTemperatureDelta == null ||
colorTemperatureDelta == null))) {
toReturn[ApiFields.colorTemperatureDelta] =
colorTemperatureDelta?.toJson(optimizeFor: OptimizeFor.putFull);
}
if (color != _originalColor) {
toReturn[ApiFields.color] =
color.toJson(optimizeFor: OptimizeFor.putFull);
}
if (dynamics != _originalDynamics) {
toReturn[ApiFields.dynamics] =
dynamics.toJson(optimizeFor: OptimizeFor.putFull);
}
if (alert != _originalAlert) {
toReturn[ApiFields.alert] =
alert.toJson(optimizeFor: OptimizeFor.putFull);
}
if (gradient != _originalGradient) {
toReturn[ApiFields.gradient] =
gradient.toJson(optimizeFor: OptimizeFor.putFull);
}
if (effects != _originalEffects) {
toReturn[ApiFields.effects] =
effects.toJson(optimizeFor: OptimizeFor.putFull);
}
if (timedEffects != _originalTimedEffects) {
toReturn[ApiFields.timedEffects] =
timedEffects.toJson(optimizeFor: OptimizeFor.putFull);
}
if (powerUp != _originalPowerUp) {
toReturn[ApiFields.powerUp] =
powerUp.toJson(optimizeFor: OptimizeFor.putFull);
}
return toReturn;
}
// PUT FULL
if (identical(optimizeFor, OptimizeFor.putFull)) {
return {
ApiFields.type: type.value,
ApiFields.metadata: metadata.toJson(optimizeFor: optimizeFor),
ApiFields.isOn: on.toJson(optimizeFor: optimizeFor),
ApiFields.dimming: dimming.toJson(optimizeFor: optimizeFor),
ApiFields.dimmingDelta: dimmingDelta?.toJson(optimizeFor: optimizeFor),
ApiFields.colorTemperature:
colorTemperature.toJson(optimizeFor: optimizeFor),
ApiFields.colorTemperatureDelta:
colorTemperatureDelta?.toJson(optimizeFor: optimizeFor),
ApiFields.color: color.toJson(optimizeFor: optimizeFor),
ApiFields.dynamics: dynamics.toJson(optimizeFor: optimizeFor),
ApiFields.alert: alert.toJson(optimizeFor: optimizeFor),
ApiFields.gradient: gradient.toJson(optimizeFor: optimizeFor),
ApiFields.effects: effects.toJson(optimizeFor: optimizeFor),
ApiFields.timedEffects: timedEffects.toJson(optimizeFor: optimizeFor),
ApiFields.powerUp: powerUp.toJson(optimizeFor: optimizeFor),
};
}
// DEFAULT
return {
ApiFields.id: id,
ApiFields.idV1: idV1,
ApiFields.type: type.value,
ApiFields.owner: owner.toJson(optimizeFor: optimizeFor),
ApiFields.metadata: metadata.toJson(optimizeFor: optimizeFor),
ApiFields.isOn: on.toJson(optimizeFor: optimizeFor),
ApiFields.dimming: dimming.toJson(optimizeFor: optimizeFor),
ApiFields.dimmingDelta: dimmingDelta?.toJson(optimizeFor: optimizeFor),
ApiFields.colorTemperature:
colorTemperature.toJson(optimizeFor: optimizeFor),
ApiFields.colorTemperatureDelta:
colorTemperatureDelta?.toJson(optimizeFor: optimizeFor),
ApiFields.color: color.toJson(optimizeFor: optimizeFor),
ApiFields.dynamics: dynamics.toJson(optimizeFor: optimizeFor),
ApiFields.alert: alert.toJson(optimizeFor: optimizeFor),
ApiFields.signaling: signaling.toJson(),
ApiFields.mode: mode.value,
ApiFields.gradient: gradient.toJson(optimizeFor: optimizeFor),
ApiFields.effects: effects.toJson(optimizeFor: optimizeFor),
ApiFields.timedEffects: timedEffects.toJson(optimizeFor: optimizeFor),
ApiFields.powerUp: powerUp.toJson(optimizeFor: optimizeFor),
};
}