一次性读取Firebase云(飞镖/颤振)

时间:2020-09-05 19:09:28

标签: android ios firebase flutter dart

我需要从Firebase Cloud中一次性读取数据,这就是为什么我在项目中使用FutureBuilder(飞镖/颤振)。但是,当应用程序启动时,它的读取不会停止(作为流)。我该怎么做才能解决此问题?

class Hello extends StatefulWidget {
  @override
  _HelloState createState() => _HelloState();
}

class _HelloState extends State<Hello> {

  Future getPosts() async{
    QuerySnapshot qn = await FirebaseFirestore.instance.collection("111").get();
    return qn.docs;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: new Text('Hello'),
      ),
      body: FutureBuilder(
        future: getPosts(),
        builder: (context, snapshot){
          if(snapshot.connectionState == ConnectionState.waiting){
            return Center(
              child: CircularProgressIndicator(),
            );
          }
          else{
            return ListView.builder(
              itemCount: snapshot.data.length,
              itemBuilder: (context, index){
                return Text(snapshot.data[index].data()["subject"]);
              },
            );
          }
        },
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:0)

来自FutureBuilder doc

将来一定要早一些,例如中 State.initState,State.didUpdateConfig或 State.didChangeDependencies。不得在 构造状态时调用State.build或StatelessWidget.build方法 FutureBuilder。如果将来与 FutureBuilder,那么每次重新构建FutureBuilder的父项时, 异步任务将重新启动。

示例:

  Future<QuerySnapshot> future;

  @override
  void initState() {
    super.initState();
    future = Firestore.instance.collection("111").getDocuments();
  }

  // future : future