我需要从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"]);
},
);
}
},
),
);
}
}
答案 0 :(得分:0)
将来一定要早一些,例如中 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