isDefaultValue function

bool isDefaultValue(
  1. Object? value,
  2. String type
)

Returns true if value is the proto3 default for the given field type.

Proto3 defaults:

  • Numeric types (int32, int64, uint32, uint64, sint32, sint64, fixed32, fixed64, sfixed32, sfixed64, float, double): 0 or 0.0
  • bool: false
  • string: ""
  • bytes: empty list
  • enum: 0
  • message: null
  • repeated / map: empty list or empty map

Implementation

bool isDefaultValue(Object? value, String type) {
  if (value == null) return true;
  switch (type) {
    case 'TYPE_INT32':
    case 'TYPE_INT64':
    case 'TYPE_UINT32':
    case 'TYPE_UINT64':
    case 'TYPE_SINT32':
    case 'TYPE_SINT64':
    case 'TYPE_FIXED32':
    case 'TYPE_FIXED64':
    case 'TYPE_SFIXED32':
    case 'TYPE_SFIXED64':
      return value is num && value == 0;
    case 'TYPE_FLOAT':
    case 'TYPE_DOUBLE':
      return value is num && value == 0.0;
    case 'TYPE_BOOL':
      return value is bool && !value;
    case 'TYPE_STRING':
      return value is String && value.isEmpty;
    case 'TYPE_BYTES':
      return value is List && value.isEmpty;
    case 'TYPE_ENUM':
      return value is int && value == 0;
    case 'TYPE_MESSAGE':
      return false; // null is already handled above; a non-null message is never default.
    default:
      return false;
  }
}