【问题标题】:flutter data not retrieved from firestore when using stream使用流时未从 Firestore 检索到颤动数据
【发布时间】:2020-12-05 17:53:33
【问题描述】:
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

【问题讨论】:

    标签: flutter listview google-cloud-firestore stream


    【解决方案1】:

    我们可以使用流构建器而不用在initState 方法中调用它。以下代码对我有用。 build 方法中的用户 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);
        },
      );
    }
    

    【讨论】:

    • 加载小部件方法未定义
    • @guru895 您必须定义 loadWidgets 方法并使用您的业务逻辑处理快照 :-) 您可以随意命名。
    猜你喜欢
    • 2021-07-29
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多