Как мне получить определенные c данные из базы данных firebase в реальном времени с помощью флаттера? - PullRequest
0 голосов
/ 05 мая 2020

Я создаю приложение, которое должно создать для вас библиотеку mov ie. Я настроил свою базу данных firebase для хранения заголовка mov ie и всех спецификаций mov ie внутри базы данных, например: enter image description here

Следующий шаг, который я хочу take читает только заголовки mov ie (Official Secrets, Seberg, Unbreakable Kimmy Schmidt), чтобы составить список, отображающий для пользователя заголовки mov ie. Я пробовал использовать

void readData()
  {
    DBRef.once().then((DataSnapshot datasnapshot){
      print('DATA SNAPSHOT NEXT LINE');
      print(datasnapshot.value);
    });
  }

, но собираю все данные из моей базы данных firebase, когда мне нужны только заголовки. Как мне получить только заголовки? После этого, если пользователь выбирает заголовок, я хочу добавить go в базу данных и получить всю информацию, которая попадает под этот заголовок. Например:

  1. Пользователь имеет эти 3 фильма в своей библиотеке
  2. Пользователь выбирает Seberg
  3. Теперь мое приложение входит в базу данных и получает всю информацию, содержащуюся в Seberg. .

Я также пробовал:

  void readData()
  {
    DBRef.child('Official Secrets                 (2019)').once().then((DataSnapshot datasnapshot)
    {
      print('DATA SNAPSHOT NEXT LINE');
      print(datasnapshot.value);
    });
  }

Я использовал это, чтобы попытаться проверить, чтобы захватить только заголовок mov ie, но это возвращает null.

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Вы должны сделать что-то вроде этого. Но ваша структура данных не очень хороша

 List<String> readData()
  {
    List<String> titleList = new List()
    Map<String,String> map = new Map();
    DBRef.once().then((DataSnapshot datasnapshot){
      print('DATA SNAPSHOT NEXT LINE');
      print(datasnapshot.value);
      map = datasnapshot.value();
      map.forEach((key,value){
      map.add(key);
      continue;
      })
    });
    return titleList;
 }
1 голос
/ 05 мая 2020

К сожалению, простой ответ - вы не можете. Не с текущей схемой. Из-за того, как данные организованы в RTDB, невозможно получить только заголовок mov ie без извлечения дочерних данных всего узла.

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

Вы можете создать дополнительный узел с именем movie_titles и сохранить все заголовки mov ie там, а узел reel-house как есть .

Теперь вы всегда сначала выбираете узел movie_titles без получения всех данных и отображения заголовков в своем приложении. Когда пользователь нажимает определенный заголовок в вашем приложении, затем извлекает соответствующие данные из узла reel-house.

Ваша БД может выглядеть примерно так

movie_titles:[
    "title 1",
    "title 2",
    "title 3",
    "title 4",    
],

reel-house: [
    "title 1": {
        // data for title 1
    },
    "title 2": {
        // data for title 2
    },
    "title 3": {
        // data for title 3
    },
    "title 4": {
        // data for title 4
    },
],
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...