toSerializable property

Object? get toSerializable

Converts an object to a serializable format

Implementation

Object? get toSerializable {
  final Object? self = this;

  if (self == null) return null;

  // Handle primitive types that are already serializable
  if (self is String || self is int || self is double || self is bool) {
    return self;
  }

  // Handle DateTime - convert to ISO string
  if (self is DateTime) {
    return self.toIso8601String();
  }

  // Handle Duration - convert to microseconds
  if (self is Duration) {
    return self.inMicroseconds;
  }

  // Handle Uri - convert to string
  if (self is Uri) {
    return self.toString();
  }

  // Handle Color - convert to hex string
  if (self is Color) {
    return self.toHex();
  }

  // Handle Uint8List - convert to Base64 string
  if (self is Uint8List) {
    return base64Encode(self);
  }

  // Handle List - recursively serialize elements
  if (self is List) {
    return self.map((Object? item) => item.toSerializable).toList();
  }

  // Handle Set - convert to list and recursively serialize
  if (self is Set) {
    return self.map((Object? item) => item.toSerializable).toList();
  }

  // Handle Map - convert keys to strings and recursively serialize values
  if (self is Map) {
    final Map<String, Object?> result = <String, Object?>{};
    for (final MapEntry<Object?, Object?> entry in self.entries) {
      final Object? key = entry.key;
      final Object? value = entry.value;

      final String keyString = key is String ? key : key.toString();
      result[keyString] = value.toSerializable;
    }
    return result;
  }

  // Handle objects that implement ToJsonable interface
  if (self is BaseDataModel) {
    final String result = self.toJson();
    return result.toSerializable;
  }

  // Handle Enum types - convert to string representation
  if (self is Enum) {
    return self.name;
  }

  // Fallback - convert to string
  return self.toString();
}