Open edrbtsyn opened 4 months ago
As the message says, it is not supported to attach to a store that is already opened in the current isolate. The code should either keep a reference to an open store and re-use that. Or make sure to close it before opening/attaching it again.
Note: labeled this issue with "more info required" so it will auto-close in a few days if there are no follow-up comments.
I made some tests on the library, and observed that when Store.isOpen()
returns true, the _openStoreDirectories
(a HashSet) used in the library method _checkStoreDirectoryNotOpen
is not empty, so it does not throw an exception. However, on iOS, when Store.isOpen()
returns true, the _openStoreDirectories
variable is NOT empty, causing the UnsupportedError
exception to be thrown.
The latter seems to be the intended behavior, but isn't it a bug on the Android side ?
Thanks for asking. This is indeed a little confusing. The Store.isOpen()
check works on the process level (you can see it calls a C API), so across Dart isolates. The open directories check when creating/attaching a Store works per isolate (as no Dart state is shared across isolates).
Maybe we should update the API docs to clarify this.
Hello,
I am using the objectbox-dart library in my Flutter application, which also utilizes Firebase Cloud Messaging for background notifications. When handling notifications in the background on a physical iOS device, I encounter an exception when calling the
Store.attach()
method. This issue does not occur on an Android emulator.Here is how I use the library:
The crash occurs in an event triggered when the application is in the background (receiving a Firebase notification):
On iOS, the
Store.attach()
method throws anUnsupportedError
with the message:I tried using
Isolate.run
to return the store, but it seems not possible since thegetApplicationDocumentsDirectory()
method cannot be called within an isolate.Environment:
Steps to reproduce:
openStore()
attach()
without closing the previous storeAny guidance or solution for this issue would be greatly appreciated. Thank you!