在没有streambuilder的情况下获取firebase数据

时间:2019-12-20 16:01:25

标签: flutter

这是我使用Firebase中的流生成器​​获取数据的方式

StreamBuilder<QuerySnapshot>(
            stream: Firestore.instance.collection('profile').snapshots(),
            builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot){
              if (!snapshot.hasData) return const Text('Loading...');
              final int messageCount = snapshot.data.documents.length;
              return ListView.builder(
                  shrinkWrap: true,
                  itemCount: messageCount,
                  itemBuilder: (_, int index) {
                    final DocumentSnapshot document = snapshot.data.documents[index];
                    return Container();}
              );
            },
          ),

我的问题是如何使用功能

将收集列表数据获取到initstate()内的列表中
List data=new List();
    @override
      void initState() {
        super.initState();

        //here
      }

1 个答案:

答案 0 :(得分:0)

只需在您的有状态类中执行以下操作以获取数据,

bool isFetching=false;
List<String> dataList=[];

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

getGroupsData();
}

getGroupsData() {
setState(() {
   isFetching= true;
});

databaseReference
    .collection("profile")
    .getDocuments()
    .then((QuerySnapshot snapshot) {
    snapshot.documents.forEach((f) => dataList.add[f.data["name"]));

   setState(() {
      isFetching= false;
   });
  });
}

@override
  Widget build(BuildContext context) {
    return Scaffold(
    body: Center(
    child : isFetching ?
            CircularProgressIndictaor()
            : dataList!=null && dataList.length >0 
            ? ListView.builder(
                  itemCount: snapshot.data.length,
                  itemBuilder: (BuildContext context, int index) {
                               return Text(dataList[index]);
                               }
                  )
            : Text("No Data"),
      )
    );
}
相关问题