Как лучше всего закрыть экземпляр магазина в приложении Flutter?

#flutter #dart #objectbox #flutter-objectbox

Вопрос:

Я создаю приложение Flutter с базой данных ObjectBox.

Приложение вызывает OpenStore(); при запуске и сохраняет экземпляр магазина в одноэлементном классе, чтобы я мог получить к нему доступ из любого места.

Но я не уверен, когда звонить в store.close();

В iOS мы можем выполнить код прямо перед завершением работы приложения, используя applicationWillTerminate(_:)

К сожалению, Flutter не предоставляет нам ничего подобного.

Я попробовал приведенный ниже код в самом длинном ожидаемом состоянии, но иногда он заканчивается раньше, и приложение теряет доступ к базе данных.

 @override
void dispose() {
  StoreHelper().store?.close();
  super.dispose();
}
 

Мои вопросы таковы…

  1. Как лучше всего называть store.close()?
  2. Что произойдет, если я не закрою магазин? Потеряет ли мое приложение устойчивость данных?

Ответ №1:

То, что ты делаешь, кажется мне нормальным. Вы можете немного изменить его , чтобы StoreHelper().close() также очистить ссылку на его хранилище null , и в этом случае, если какая-то другая часть приложения все еще пытается получить доступ, вы можете справиться с этим (распознать, что оно закрыто или снова открыть его).

Кроме того, в большинстве случаев вам следует уйти, не закрывая магазин явно. Если вы не выполняете (много) операций фоновой записи, в этом случае вам, вероятно, следует попытаться хотя бы дождаться ее завершения dispose() .

Комментарии:

1. «Кроме того, в большинстве случаев вам следует уйти, не закрывая магазин явно» означает, что если мое приложение не работает в фоновом режиме, мне не нужно закрывать магазин и разрешать пользователю завершать работу приложения, когда магазин все еще открыт?

2. Да, так как вы действительно не можете запретить пользователям завершать работу приложения в любое удобное для них время 🙂

3. Спасибо. Кстати, в документе «Начало работы с объектом» говорится: «не забудьте закрыть магазин» в комментарии в разделе «Создание магазина». Поэтому я подумал, что должен это сделать.

4. Хороший момент, мы должны уточнить это в документах.