Flutter Can';t将大量文档检索到firestore flift中

Flutter Can';t将大量文档检索到firestore flift中,flutter,google-cloud-firestore,Flutter,Google Cloud Firestore,我有一个小问题,我需要在列表中检索StreamBuilder从Firestore检索到的集合。 我使用的是snapshot.data.documents.lengh,但添加后出现错误: Class 'DocumentSnapshot' has no instance getter 'documents'. Receiver: Instance of 'DocumentSnapshot' Tried calling: documents 这是我的代码: Stream<DocumentS

我有一个小问题,我需要在列表中检索StreamBuilder从Firestore检索到的集合。 我使用的是
snapshot.data.documents.lengh
,但添加后出现错误:

Class 'DocumentSnapshot' has no instance getter 'documents'.
Receiver: Instance of 'DocumentSnapshot'
Tried calling: documents
这是我的代码:

  Stream<DocumentSnapshot> getDatabase() async* {
    FirebaseUser user = await FirebaseAuth.instance.currentUser();
    yield* Firestore.instance
        .collection('dataCollection')
        .document(user.uid)
        .snapshots();
  }

  @override
  Widget build(BuildContext context,) {
    return StreamBuilder(
      stream: getDatabase(),
      builder: (context, snapshot,) {
        if (snapshot.data != null) {
          return Column(
            children: <Widget>[
              Container(
                height: 500,
                child: ListView.builder(
                  shrinkWrap: true,
                  itemCount: 2,
                  itemBuilder: (BuildContext context, int index) {
                    return Card(
                      color: Color(0xFF1f2032),
                      elevation: 15,
                      child: Text(
                        snapshot.data['phone']..
                        
Stream getDatabase()异步*{
FirebaseUser=等待FirebaseAuth.instance.currentUser();
yield*Firestore.instance
.collection('dataCollection'))
.document(user.uid)
.快照();
}
@凌驾
小部件构建(构建上下文){
返回流生成器(
流:getDatabase(),
生成器:(上下文、快照){
如果(snapshot.data!=null){
返回列(
儿童:[
容器(
身高:500,
子项:ListView.builder(
收缩膜:对,
物品计数:2,
itemBuilder:(构建上下文,int索引){
回程卡(
颜色:颜色(0xFF1f2032),
标高:15,
子:文本(
快照.数据['phone']。。
试试这个

StreamBuilder(
              stream: stream,
              builder: (BuildContext context,
                  AsyncSnapshot<List<DocumentSnapshot>> snapshots) {
                if (snapshots.connectionState == ConnectionState.active &&
                    snapshots.hasData) {
                  return Expanded(
                    child: ListView.builder(
                      scrollDirection: Axis.vertical,
                      shrinkWrap: true,
                      itemCount: snapshots.data.length,
                      itemBuilder: (BuildContext context, int index) {
                        
                      //do something with snapshot.

                        
                          }
                        }
                        return Container();
                      },
                    ),
                  );
                } else {
                  return Container();
                }
              },
            ),


StreamBuilder(
小溪:小溪,
生成器:(BuildContext上下文,
异步快照(快照){
如果(snapshots.connectionState==connectionState.active)&&
快照(hasData){
扩大回报(
子项:ListView.builder(
滚动方向:轴垂直,
收缩膜:对,
itemCount:snapshots.data.length,
itemBuilder:(构建上下文,int索引){
//对快照执行一些操作。
}
}
返回容器();
},
),
);
}否则{
返回容器();
}
},
),
像这样初始化流

Stream<DocumentSnapshot> stream;
  Future<dynamic> getDatabase() async {
    

    FirebaseUser user = await FirebaseAuth.instance.currentUser();
   
  
    setState(() {
    
      stream=Firestore.instance
        .collection('dataCollection')
        .document(user.uid)
        .snapshots();
    });
  }

流;
未来的getDatabase()异步{
FirebaseUser=等待FirebaseAuth.instance.currentUser();
设置状态(){
stream=Firestore.instance
.collection('dataCollection'))
.document(user.uid)
.快照();
});
}
可以在initState中调用getDatabase()

更新:-

这是您的完整代码





class DataCo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(
        backgroundColor: Colors.blue,
      ),
      body: Column(
        children: [
          CollectData(),
        ],
      ),
    );
  }
}



class CollectData extends StatefulWidget {
  @override
  _CollectDataState createState() => _CollectDataState();
}

class _CollectDataState extends State<CollectData> {
  final String phone;
  final String wife;
  final String location;

  _CollectDataState({this.phone, this.wife, this.location});


@override
  void initState() {
 super.initState();
    getDatabase();
     
   
  }

  Stream<DocumentSnapshot> stream;
  Future<dynamic> getDatabase() async {



    FirebaseUser user = await FirebaseAuth.instance.currentUser();


    setState(() {

      stream=Firestore.instance
        .collection('dataCollection')
        .document(user.uid)
        .snapshots();
    });
  }


  @override
  Widget build(BuildContext context,) {
    return StreamBuilder(
              stream: stream,
              builder: (BuildContext context,
                  AsyncSnapshot<DocumentSnapshot> snapshots) {
                if (snapshots.connectionState == ConnectionState.active &&
                    snapshots.hasData) {
                  return Expanded(
                    child: ListView.builder(
                      scrollDirection: Axis.vertical,
                      shrinkWrap: true,
                      itemCount: snapshots.data.length,
                      itemBuilder: (BuildContext context, int index) {

                      //do something with snapshot.


                          }
                        }
                        return Container();
                      },
                    ),
                  );
                } else {
                  return Container();
                }
              },
            );
  }
}

class NoData extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Text('No Data available'),
      ],
    );
  }
}


类DataCo扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景颜色:Colors.white,
appBar:appBar(
背景颜色:Colors.blue,
),
正文:专栏(
儿童:[
CollectData(),
],
),
);
}
}
类CollectData扩展StatefulWidget{
@凌驾
_CollectDataState createState()=>\u CollectDataState();
}
类_CollectDataState扩展了状态{
最终字符串电话;
最后的妻子;
最终管柱位置;
_CollectDataState({this.phone,this.layer,this.location});
@凌驾
void initState(){
super.initState();
getDatabase();
}
溪流;
未来的getDatabase()异步{
FirebaseUser=等待FirebaseAuth.instance.currentUser();
设置状态(){
stream=Firestore.instance
.collection('dataCollection'))
.document(user.uid)
.快照();
});
}
@凌驾
小部件构建(构建上下文){
返回流生成器(
小溪:小溪,
生成器:(BuildContext上下文,
异步快照(快照){
如果(snapshots.connectionState==connectionState.active)&&
快照(hasData){
扩大回报(
子项:ListView.builder(
滚动方向:轴垂直,
收缩膜:对,
itemCount:snapshots.data.length,
itemBuilder:(构建上下文,int索引){
//对快照执行一些操作。
}
}
返回容器();
},
),
);
}否则{
返回容器();
}
},
);
}
}
类NoData扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
文本(“无可用数据”),
],
);
}
}

只需按以下方式更改代码

Stream dataStream
然后

函数getDatbase()

然后

@覆盖
小部件构建(构建上下文){
返回流生成器(
流:数据流,
生成器:(上下文、快照){
如果(snapshot.data!=null){
返回列(
儿童:[
容器(
身高:500,
子项:ListView.builder(
收缩膜:对,
物品计数:2,
itemBuilder:(构建上下文,int索引){
回程卡(
颜色:颜色(0xFF1f2032),
标高:15,
子:文本(
快照.数据['phone']。。

再次出错问题出在我的类;需要从中重新设置用户数据的流上firestore@TiziDev我已经添加了完整的代码,看看这个工作是否更新了我的应答器要调试,你可以试着打印快照,看看它包含什么Shello谢谢你的努力,但我得到了长度错误:getter'lenght'没有为'DocumentSnaps'类型定义“热”。您想做什么?Firestore不会递归检索文档。用户填写表单,一旦用户填写表单,这些数据将变为int
   @override
  void initState() {
    getDatabase().then((value) {
      dataStream = value;
      setState(() {});
    });
    super.initState();
  }
getDatabase() async {
    FirebaseUser user = await FirebaseAuth.instance.currentUser();
    yield* Firestore.instance
        .collection('dataCollection')
        .document(user.uid)
        .snapshots();
  }
 @override
  Widget build(BuildContext context,) {
    return StreamBuilder(
      stream: dataStream,
      builder: (context, snapshot,) {
        if (snapshot.data != null) {
          return Column(
            children: <Widget>[
              Container(
                height: 500,
                child: ListView.builder(
                  shrinkWrap: true,
                  itemCount: 2,
                  itemBuilder: (BuildContext context, int index) {
                    return Card(
                      color: Color(0xFF1f2032),
                      elevation: 15,
                      child: Text(
                        snapshot.data['phone']..