Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase Dart-如何使StreamBuilder停止侦听事件_Firebase_Flutter_Dart_Google Cloud Firestore - Fatal编程技术网

Firebase Dart-如何使StreamBuilder停止侦听事件

Firebase Dart-如何使StreamBuilder停止侦听事件,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我正在使用StreamBuilder访问Firestore数据库的内容,并为这些内容创建列表平铺列表。我的问题是,每当我单击列表平铺时,我的StreamBuilder方法就会再次被调用,并使列表中所需的列表平铺数量加倍(因为我使用的是List.add()方法) 如何让StreamBuilder停止“重建”或“倾听”?我对Dart还比较陌生,所以我不知道该如何处理这个问题 下面是不断重复的代码。(为了这篇文章的目的,我审查了一些包含“…”的地方的信息): var topics=newlist();

我正在使用StreamBuilder访问Firestore数据库的内容,并为这些内容创建列表平铺列表。我的问题是,每当我单击列表平铺时,我的StreamBuilder方法就会再次被调用,并使列表中所需的列表平铺数量加倍(因为我使用的是List.add()方法)

如何让StreamBuilder停止“重建”或“倾听”?我对Dart还比较陌生,所以我不知道该如何处理这个问题

下面是不断重复的代码。(为了这篇文章的目的,我审查了一些包含“…”的地方的信息):

var topics=newlist();
var messages=新列表();
变量日期=新列表();
列表内容=新列表();
返回新的StreamBuilder(
流:Firestore.instance.collection(“集合id”).snapshots(),
生成器:(上下文,捕捉){
//只要加上这一行
if(snap.data==null)返回CircularProgressIndicator();
对于(int i=0;iReadContent(主题[i]、消息[i]、日期[i]),
);
},
),
装饰:新框装饰(边框:新边框(底部:新边框边()));
}//为了
返回新列(子项:内容);
});//StreamBuilder
}//showContent()
这是调用showContent()的有状态小部件的一个片段:

  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('App'),
      ),
      body: Center(
        child: new Container(
          child: new SingleChildScrollView(
            child: new Column(
              children: <Widget>[

                  showContent(context),
              ],
            ),
          ),
        ),
      ),
 );//Scaffold
}
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“应用程序”),
),
正文:中(
子容器:新容器(
子:新的SingleChildScrollView(
子:新列(
儿童:[
显示内容(上下文),
],
),
),
),
),
);//脚手架
}

一种方法是在向列表中添加数据时清除列表。 使用当前方法,如果一些新数据也到达,则数据将附加到
列表中
,并导致数据重复

for (int i = 0; i < snap.data.documents.length; i++) {
        topics.clear();//clear the items in list
        topics.add(...);
        messages.add(snap.data.documents[i]["message"].toString());
        dates.add(...);
      }
for(int i=0;i
for (int i = 0; i < snap.data.documents.length; i++) {
        topics.clear();//clear the items in list
        topics.add(...);
        messages.add(snap.data.documents[i]["message"].toString());
        dates.add(...);
      }