У меня есть приложение, которое в основном состоит из 4 страниц, и я использую базу данных Firebase в режиме реального времени для избранных, на первой странице отображаются общие случайные элементы и получаю всю пользовательскую информацию из базы данных с запросом и составляю список, а затем слушаю изменения, я Я использую этот список, чтобы проверить, добавлены элементы или нет, вторая страница - это страница списка и фактически делает то же самое, третья страница - связанные лица и делает то же самое, только мой запрос страницы подробностей с идентификатором элемента с идентификатором пользователя вместо целого пользователя данные потом проверь. Мне просто интересно, что можно сделать запрос и пользовательский список только один раз вместо запросов на каждой странице, а затем прослушать изменения, если что-то добавлено или изменено? Или мой подход - правильный путь? Пользовательская информация может быть немного большой в зависимости от пользователя, может быть, около 2000 дочерних идентификаторов элементов под одним дочерним идентификатором пользователя, и каждый дочерний идентификатор имеет 15 строк данных. Вы можете увидеть мою структуру ниже.
Запрос части кода (она практически одинакова для каждой страницы):
@override
void initState() {
super.initState();
_moviesList = new List();
_moviesQuery = _database
.reference()
.child("movies").child(widget.userId)
.orderByChild("userId")
.equalTo(widget.userId);
_onMoviesAddedSubscription = _moviesQuery.onChildAdded.listen(onEntryAdded);
_onMoviesChangedSubscription =
_moviesQuery.onChildChanged.listen(onEntryChanged);
widget.auth.getCurrentUser().then((user) {
setState(() {
if (user != null) {
userId = user?.uid;
}
authStatus =
user?.uid == null ? AuthStatus.NOT_LOGGED_IN : AuthStatus.LOGGED_IN;
});
});
}
void dispose() {
_onMoviesAddedSubscription.cancel();
_onMoviesChangedSubscription.cancel();
super.dispose();
}
onEntryChanged(Event event) {
var oldEntry = _moviesList.singleWhere((entry) {
return entry.id.toString() == event.snapshot.key;
});
setState(() {
_moviesList[_moviesList.indexOf(oldEntry)] =
Movies.fromSnapshot(event.snapshot);
});
}
onEntryAdded(Event event) {
setState(() {
_moviesList.add(Movies.fromSnapshot(event.snapshot));
});
}