Firebase запрашивает один раз и прослушивает все приложение? - PullRequest
0 голосов
/ 04 мая 2020

У меня есть приложение, которое в основном состоит из 4 страниц, и я использую базу данных Firebase в режиме реального времени для избранных, на первой странице отображаются общие случайные элементы и получаю всю пользовательскую информацию из базы данных с запросом и составляю список, а затем слушаю изменения, я Я использую этот список, чтобы проверить, добавлены элементы или нет, вторая страница - это страница списка и фактически делает то же самое, третья страница - связанные лица и делает то же самое, только мой запрос страницы подробностей с идентификатором элемента с идентификатором пользователя вместо целого пользователя данные потом проверь. Мне просто интересно, что можно сделать запрос и пользовательский список только один раз вместо запросов на каждой странице, а затем прослушать изменения, если что-то добавлено или изменено? Или мой подход - правильный путь? Пользовательская информация может быть немного большой в зависимости от пользователя, может быть, около 2000 дочерних идентификаторов элементов под одним дочерним идентификатором пользователя, и каждый дочерний идентификатор имеет 15 строк данных. Вы можете увидеть мою структуру ниже.

enter image description here

Запрос части кода (она практически одинакова для каждой страницы):

  @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));
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...