【问题标题】:How do I retrieve specific data from firebase realtime database using flutter?如何使用颤振从 Firebase 实时数据库中检索特定数据?
【发布时间】:2020-08-20 15:31:00
【问题描述】:

我正在构建一个应该为您创建电影库的应用程序。我已经建立了我的 firebase 数据库来存储电影标题和数据库中的所有电影规格,如下所示:

下一步我想只阅读电影标题(Official Secrets、Seberg、Unbreakable Kimmy Schmidt),以创建一个向用户显示电影标题的列表。我尝试使用

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

但是当我只想要标题时,我会抓取我的 firebase 数据库中的所有数据。我如何只抓取标题?然后,如果用户选择了一个标题,我想进入数据库并获取该标题下的所有信息。例如:

  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);
    });
  }

我用它来尝试只获取电影的标题,但它返回 null。

【问题讨论】:

    标签: firebase flutter firebase-realtime-database dart


    【解决方案1】:

    你必须做这样的事情。但是你的数据结构不好

     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;
     }
    

    【讨论】:

      【解决方案2】:

      不幸的是,简单的答案是您不能。不适用于当前架构。由于 RTDB 中数据的组织方式,不可能只获取电影标题而不获取整个节点的子数据。

      您现在必须做的称为数据扁平化,即避免深度嵌套以避免获取节点的全部数据。这个关于结构化数据的guide 可能会有所帮助。

      您可以创建一个名为 movie_titles 的附加节点,并将所有电影标题保留在那里,并保持 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
          },
      ],
      

      【讨论】:

        猜你喜欢
        • 2020-09-10
        • 2021-08-22
        • 2020-12-03
        • 2019-02-04
        • 1970-01-01
        • 2021-11-09
        • 2020-04-15
        • 2020-07-15
        • 2020-12-05
        相关资源
        最近更新 更多