Skip to content

Commit

Permalink
Fix RealmSets<T> where T extends RealmObject and RealmSet<RealmValue>
Browse files Browse the repository at this point in the history
  • Loading branch information
nielsenko committed Mar 16, 2023
1 parent b87c283 commit 0b32afa
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 3 deletions.
6 changes: 5 additions & 1 deletion lib/src/realm_object.dart
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,11 @@ class RealmCoreAccessor implements RealmAccessor {

if (propertyMeta.collectionType == RealmCollectionType.set) {
final handle = realmCore.getSetProperty(object, propertyMeta.key);
return RealmSetInternal.create<T>(handle, object.realm, metadata);
if (propertyMeta.propertyType == RealmPropertyType.mixed) {
RealmSetInternal.create<RealmValue>(handle, object.realm, null);
}
final setMetadata = propertyMeta.objectType == null ? null : object.realm.metadata.getByName(propertyMeta.objectType!);
return RealmSetInternal.create<T>(handle, object.realm, setMetadata);
}

var value = realmCore.getProperty(object, propertyMeta.key);
Expand Down
7 changes: 5 additions & 2 deletions lib/src/set.dart
Original file line number Diff line number Diff line change
Expand Up @@ -148,12 +148,15 @@ class ManagedRealmSet<T extends Object?> with RealmEntity, SetMixin<T> implement
try {
var value = realmCore.realmSetGetElementAt(this, index);
if (value is RealmObjectHandle) {
RealmObjectMetadata targetMetadata = _metadata!;
Type type = T;
late RealmObjectMetadata targetMetadata;
late Type type;
if (T == RealmValue) {
final tuple = realm.metadata.getByClassKey(realmCore.getClassKey(value));
type = tuple.item1;
targetMetadata = tuple.item2;
} else {
targetMetadata = _metadata!; // will be null for RealmValue, so defer until here
type = T;
}

value = realm.createObject(type, value, targetMetadata);
Expand Down

0 comments on commit 0b32afa

Please sign in to comment.