Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Flatter从firebase实时数据库检索特定数据?_Firebase_Flutter_Firebase Realtime Database_Dart - Fatal编程技术网

如何使用Flatter从firebase实时数据库检索特定数据?

如何使用Flatter从firebase实时数据库检索特定数据?,firebase,flutter,firebase-realtime-database,dart,Firebase,Flutter,Firebase Realtime Database,Dart,我正在构建一个应用程序,它应该为您创建一个电影库。我已将firebase数据库设置为在数据库中存储电影标题和所有电影规格,如下所示: 我想采取的下一步是只阅读电影标题(官方机密、塞伯格、坚不可摧的金米·施密特),以制作一个列表,向用户显示电影标题。我试着用 void readData() { DBRef.once().then((DataSnapshot datasnapshot){ print('DATA SNAPSHOT NEXT LINE'); prin

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

我想采取的下一步是只阅读电影标题(官方机密、塞伯格、坚不可摧的金米·施密特),以制作一个列表,向用户显示电影标题。我试着用

void readData()
  {
    DBRef.once().then((DataSnapshot datasnapshot){
      print('DATA SNAPSHOT NEXT LINE');
      print(datasnapshot.value);
    });
  }
但是当我只想要标题的时候,我会抓取firebase数据库中的所有数据。我如何只获取标题?然后,如果用户选择了一个标题,那么我想进入数据库并获取该标题下的所有信息。例如:

  • 用户的库中有这3部电影
  • 用户选择塞伯格
  • 现在,我的应用程序进入数据库,抓取Seberg下包含的所有信息 我也尝试过:

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

    我用它来测试只获取电影的标题,但它返回空值。

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

    您现在必须做的是数据扁平化,即避免深度嵌套,以避免获取节点的整个数据。这对结构化数据可能有所帮助

    您可以创建一个名为
    movie\u titles
    的附加节点,将所有电影标题保留在那里,并保持
    reveel house
    节点不变

    现在,您总是先获取
    movie\u titles
    节点,而不获取所有数据,然后在应用程序中显示标题。当用户点击应用程序中的特定标题时,然后从
    reveelhouse
    节点获取相应的数据

    您的数据库可能看起来有点像这样

    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
        },
    ],
    

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

     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;
     }
    
    List readData()
    {
    列表标题列表=新列表()
    Map Map=newmap();
    DBRef.once().then((DataSnapshot DataSnapshot){
    打印(“数据快照下一行”);
    打印(datasnapshot.value);
    map=datasnapshot.value();
    map.forEach((键,值){
    map.add(键);
    继续;
    })
    });
    返回标题列表;
    }