From c5f1b8c26ed5bf89af3e01939c33084c43ce49ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kasper=20Overg=C3=A5rd=20Nielsen?= Date: Mon, 19 Sep 2022 14:18:28 +0200 Subject: [PATCH] Use indexOf in managed list remove --- lib/src/list.dart | 11 +++++++++++ test/list_test.dart | 14 ++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/lib/src/list.dart b/lib/src/list.dart index c7cb4980ef..5cd4a55002 100644 --- a/lib/src/list.dart +++ b/lib/src/list.dart @@ -83,6 +83,17 @@ class ManagedRealmList with RealmEntity, ListMixin impleme } } + @override + bool remove(covariant T element) { + if (element is RealmObject && !element.isManaged) { + throw RealmStateError('Cannot call remove on a managed list with an element that is an unmanaged object'); + } + final index = indexOf(element); + final found = index > 0; + if (found) removeAt(index); + return found; + } + @override T operator [](int index) { if (index < 0) { diff --git a/test/list_test.dart b/test/list_test.dart index 3b6092289e..b86bd1ee9a 100644 --- a/test/list_test.dart +++ b/test/list_test.dart @@ -716,6 +716,20 @@ Future main([List? args]) async { expect(realm.write(() => team.players.remove(dan)), isFalse); expect(team.players.every((p) => p.isValid && p.isManaged), isTrue); + + expect( + () => (team.players as List).indexOf("wrong type"), // ignore: unnecessary_cast + throwsA(isA()), + ); + + expect( + () => team.players.remove(Person('alice')), + throwsA(isA().having( + (e) => e.message, + 'message', + 'Cannot call remove on a managed list with an element that is an unmanaged object', + )), + ); }); test('ManagedRealmList.setRange', () {