使用流时未从Firestore中检索到的抖动数据

时间:2020-08-16 11:53:10

标签: flutter listview google-cloud-firestore stream

DatabaseService databaseService = new DatabaseService();
Stream questionsSnapshot;

因此我使用流和数据库服务将数据(测验的问题和答案)检索到我的listView构建器中 从数据库服务调用的函数是

getAquizData(String quizId) async{
  return await Firestore.instance
      .collection("quiz")
      .document(quizId)
      .collection("questionReponses")
      .snapshots();
     
}

初始化状态函数

 @override
  void initState() {
    databaseService.getAquizData(widget.quizId).then((value){
      questionsSnapshot = value;
    
      setState(() {});
    });
    super.initState();
  }

我的listViewBuilder


  @override
  Widget build(BuildContext context) {
    return Scaffold(
        // an appbar
        ) ,
        body: Container(
            child: Column(children: <Widget>[
            StreamBuilder(
    stream: questionsSnapshot,
    builder: (context, snapshot) {
    return snapshot.data == null
    ? Container(child: Text("empty"),) :  ListView.builder(
    shrinkWrap: true,
    physics: ClampingScrollPhysics(),
    itemCount: snapshot.data.documents.length,
    itemBuilder: (context,index){
    return QuizPlayTile(
    questionModel: getQuestionModelFromDatasnapshot(
    snapshot.data.documents[index]),
    index: index,
    );
    });
    },
            )


            ],)
        )
    );
  }
}

运行时只显示一秒钟为空,然后显示没有答案的问题



  [1]: https://i.stack.imgur.com/E4CS4.jpg

1 个答案:

答案 0 :(得分:1)

我们可以使用流生成器,而无需在initState方法中调用它。以下代码对我有用。构建方法中使用用户quizStreamer。

quizStreamer(){
   return StreamBuilder(
    stream: Firestore.instance
        .collection('quiz')
        .document(quizId)
        .collection('questionReponses')
        .snapshots(),
    builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
      //loadWidgets method takes snapshot and render defined widgets
      return loadWidgets(snapshot);
    },
  );
}