Firebase 颤振:只有堆栈中的第一项是不允许的

Firebase 颤振:只有堆栈中的第一项是不允许的,firebase,stack,flutter,Firebase,Stack,Flutter,我为这件事感到头疼。我希望我的堆栈中的所有项目都是可驳回的。我可以显示我的所有项目,但只有第一个项目是可驳回的。为什么? 以下是代码片段: Widget build(BuildContext context) { return new StreamBuilder <QuerySnapshot>( stream: Firestore.instance.collection('records').document(uid).collection("pdrecord

我为这件事感到头疼。我希望我的堆栈中的所有项目都是可驳回的。我可以显示我的所有项目,但只有第一个项目是可驳回的。为什么?

以下是代码片段:

Widget build(BuildContext context) {
    return new StreamBuilder <QuerySnapshot>(
        stream: Firestore.instance.collection('records').document(uid).collection("pdrecords").snapshots(),
          builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
            if (snapshot.hasData) {
              print("snapShot call");
              final int recordCount = snapshot.data.documents.length;
              print("got data. records: $recordCount");
              if (recordCount >0) {
                return new Stack (
                alignment: listSlideAnimation.value,
                children:
                    snapshot.data.documents.map((DocumentSnapshot document) {
                      count = count + multiplyFactor; print("count: $count");
                      index ++;
                      //print("data: ${document.data}");
                  return Dismissible(
                    resizeDuration: null,
                    dismissThresholds: _dismissThresholds(),
                    //background: new LeaveBehindView(),
                    key: ObjectKey(document.documentID) ,
                    onDismissed: (DismissDirection direction) {
                      direction == DismissDirection.endToStart
                        ? print("favourite")
                        : print("remove");

                          // Do stuff

                    },

                  child: 
                  new ListPDRecord(

                    id: document.documentID,
                    margin: listSlidePosition.value * count, //new EdgeInsets.only(bottom: 80.0) * count, //listSlidePosition.value * 5.5,
                    width: listTileWidth.value,
                    date: document["date"],

                  ),
                  );
                }).toList(),
              );
          } else {
             return NoDataListData();
          }
      } else {
            // No data
            return new NoDataListData();
      }
  });
 }
}
小部件构建(构建上下文){
返回新的StreamBuilder(
流:Firestore.instance.collection('records').document(uid).collection('pdrecords').snapshots(),
生成器:(BuildContext上下文,异步快照){
if(snapshot.hasData){
打印(“快照调用”);
final int recordCount=snapshot.data.documents.length;
打印(“获取数据。记录:$recordCount”);
如果(记录计数>0){
返回新堆栈(
对齐方式:listSlideAnimation.value,
儿童:
snapshot.data.documents.map((DocumentSnapshot文档){
计数=计数+乘数;打印(“计数:$count”);
索引++;
//打印(“数据:${document.data}”);
可驳回的回报(
resizeDuration:null,
dismissThresholds:\u dismissThresholds(),
//背景:新建LeaveBehindView(),
key:ObjectKey(document.documentID),
onDismissed:(解除方向){
方向==DismissDirection.endToStart
?打印(“收藏夹”)
:打印(“删除”);
//做事
},
儿童:
新列表记录(
id:document.documentID,
边距:listSlidePosition.value*count,//仅新边集(底部:80.0)*计数,//listSlidePosition.value*5.5,
宽度:listTileWidth.value,
日期:文件[“日期”],
),
);
}).toList(),
);
}否则{
返回NoDataListData();
}
}否则{
//没有数据
返回新的NoDataListData();
}
});
}
}
我怀疑是键,我尝试了许多不同键的变体,如手动增加索引等,但仍然只有第一项是不允许的


有什么建议吗?

经过多轮的实验,我终于明白了以下几点:

  • 您可以像上面那样在堆栈中生成小部件列表,但是
  • 可忽略项可能不起作用,因为堆栈中的每个项目都有不同的边距,而顶部的项目有最大的边距
  • 最后,我必须将堆栈更改为ListView,dismissible现在对每个项目都有效