Flutter Firebase仅允许某些数据显示在列表视图构建器中

问题描述

我正在尝试仅显示集合中的某些数据。在我的示例中,我只想显示列表中的数据,其中Firebase上名称中的集合等于小部件的名称。我无法解决这个问题

 Expanded(
                            child: Container(
                            child: FutureBuilder(
                                future: getPosts(),builder: (_,snapshot){
                                  if(snapshot.data["name"]== widget.info.name){
                                    return  ListView.builder(
                                        itemCount:
                                        x,itemBuilder: (_,index){
                                          return ListTile(
                                            title: Text(snapshot.data[index].data["name"]),);
                                        });

解决方法

 Expanded(
    child: Container(
            child: FutureBuilder(
               future: getPosts(),builder: (_,snapshot){
                    return  ListView.builder(
                              itemCount:
                                snapshot.data,itemBuilder: (_,index){
                                 if(snapshot.data["name"]== widget.info.name){
                     return ListTile(
                                  title:Text(snapshot.data[index].data["name"]),);
                      }else{
                          return Container();
                        }
                 })}))
         );
,

一个更好的选择是在您定义的getPosts()函数中传递小部件名称,并更新firebase查询以进行过滤。这样,因为Firebase进行了需要索引,并且将在O(len(filtered_elements))中进行过滤,而不是O(len(all_elements))的当前时间复杂度,所以速度要快得多。