#flutter #dart #objectbox #flutter-objectbox
Вопрос:
Я создаю приложение Flutter с базой данных ObjectBox.
Приложение вызывает OpenStore(); при запуске и сохраняет экземпляр магазина в одноэлементном классе, чтобы я мог получить к нему доступ из любого места.
Но я не уверен, когда звонить в store.close();
В iOS мы можем выполнить код прямо перед завершением работы приложения, используя applicationWillTerminate(_:)
К сожалению, Flutter не предоставляет нам ничего подобного.
Я попробовал приведенный ниже код в самом длинном ожидаемом состоянии, но иногда он заканчивается раньше, и приложение теряет доступ к базе данных.
@override
void dispose() {
StoreHelper().store?.close();
super.dispose();
}
Мои вопросы таковы…
- Как лучше всего называть store.close()?
- Что произойдет, если я не закрою магазин? Потеряет ли мое приложение устойчивость данных?
Ответ №1:
То, что ты делаешь, кажется мне нормальным. Вы можете немного изменить его , чтобы StoreHelper().close()
также очистить ссылку на его хранилище null
, и в этом случае, если какая-то другая часть приложения все еще пытается получить доступ, вы можете справиться с этим (распознать, что оно закрыто или снова открыть его).
Кроме того, в большинстве случаев вам следует уйти, не закрывая магазин явно. Если вы не выполняете (много) операций фоновой записи, в этом случае вам, вероятно, следует попытаться хотя бы дождаться ее завершения dispose()
.
Комментарии:
1. «Кроме того, в большинстве случаев вам следует уйти, не закрывая магазин явно» означает, что если мое приложение не работает в фоновом режиме, мне не нужно закрывать магазин и разрешать пользователю завершать работу приложения, когда магазин все еще открыт?
2. Да, так как вы действительно не можете запретить пользователям завершать работу приложения в любое удобное для них время 🙂
3. Спасибо. Кстати, в документе «Начало работы с объектом» говорится: «не забудьте закрыть магазин» в комментарии в разделе «Создание магазина». Поэтому я подумал, что должен это сделать.
4. Хороший момент, мы должны уточнить это в документах.