From 0b32afa614bc6d832a6625c6d2604a47f9520588 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kasper=20Overg=C3=A5rd=20Nielsen?= Date: Wed, 15 Mar 2023 13:45:11 +0100 Subject: [PATCH] Fix RealmSets where T extends RealmObject and RealmSet --- lib/src/realm_object.dart | 6 +++++- lib/src/set.dart | 7 +++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/src/realm_object.dart b/lib/src/realm_object.dart index fe42bb73d..6305a9e50 100644 --- a/lib/src/realm_object.dart +++ b/lib/src/realm_object.dart @@ -178,7 +178,11 @@ class RealmCoreAccessor implements RealmAccessor { if (propertyMeta.collectionType == RealmCollectionType.set) { final handle = realmCore.getSetProperty(object, propertyMeta.key); - return RealmSetInternal.create(handle, object.realm, metadata); + if (propertyMeta.propertyType == RealmPropertyType.mixed) { + RealmSetInternal.create(handle, object.realm, null); + } + final setMetadata = propertyMeta.objectType == null ? null : object.realm.metadata.getByName(propertyMeta.objectType!); + return RealmSetInternal.create(handle, object.realm, setMetadata); } var value = realmCore.getProperty(object, propertyMeta.key); diff --git a/lib/src/set.dart b/lib/src/set.dart index 742f171a2..68eefe533 100644 --- a/lib/src/set.dart +++ b/lib/src/set.dart @@ -148,12 +148,15 @@ class ManagedRealmSet with RealmEntity, SetMixin 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);