Firebase 如何使用streambuilder中的数据更新listview
我有一个带有streambuilder的小部件,可以从firebase获取数据。我想在另一个小部件中的listview中显示此数据,但它不会显示在listview中。这是我的密码:Firebase 如何使用streambuilder中的数据更新listview,firebase,flutter,dart,google-cloud-firestore,stream-builder,Firebase,Flutter,Dart,Google Cloud Firestore,Stream Builder,我有一个带有streambuilder的小部件,可以从firebase获取数据。我想在另一个小部件中的listview中显示此数据,但它不会显示在listview中。这是我的密码: Widget _buildStream(BuildContext context){ return StreamBuilder( stream: Firestore.instance.collection('markers').snapshots(), builder: (co
Widget _buildStream(BuildContext context){
return StreamBuilder(
stream: Firestore.instance.collection('markers').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData)
return Center(
child: CircularProgressIndicator(),
);
for (int i = 0; i < snapshot.data.documents.length; i++) {
productMap.add(snapshot.data.documents[i]['name']);
}
return _buildGoogleMap(context);
}
);}
Widget\u buildStream(BuildContext上下文){
返回流生成器(
流:Firestore.instance.collection('markers').snapshots(),
生成器:(上下文,快照){
如果(!snapshot.hasData)
返回中心(
子对象:CircularProgressIndicator(),
);
对于(int i=0;i
以及具有listview的另一个小部件:
Widget _panel(ScrollController sc){
return MediaQuery.removePadding(
context: context,
removeTop: true,
child: ListView(
controller: sc,
children: <Widget>[
SizedBox(height: 12.0,),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
width: 30,
height: 5,
decoration: BoxDecoration(
color: Colors.grey[300],
borderRadius: BorderRadius.all(Radius.circular(12.0))
),
),
],
),
SizedBox(height: 18.0,),
ListView.builder(
primary: false,
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount:
productMap == null ? 0 : productMap.length,
itemBuilder: (BuildContext context, int index) {
return new GestureDetector(
onTap: () {
},
child: Card(
child: ListTile(
leading: CircleAvatar(
backgroundImage:
AssetImage('asset/green.png'),
),
title: Text(productMap[index]),
)),
);
},
)
],
)
);
}
Widget\u面板(ScrollController sc){
返回MediaQuery.removePadding(
上下文:上下文,
removeTop:没错,
子:ListView(
控制员:sc,,
儿童:[
尺寸箱(高度:12.0,),
划船(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
容器(
宽度:30,
身高:5,,
装饰:盒子装饰(
颜色:颜色。灰色[300],
边界半径:边界半径。全部(半径。圆形(12.0))
),
),
],
),
尺寸箱(高度:18.0,),
ListView.builder(
主要:错误,
收缩膜:对,
物理学:const NeverScrollableScrollPhysics(),
项目计数:
productMap==null?0:productMap.length,
itemBuilder:(构建上下文,int索引){
返回新的手势检测器(
onTap:(){
},
孩子:卡片(
孩子:ListTile(
领先:CircleAvatar(
背景图片:
AssetImage('asset/green.png'),
),
标题:文本(productMap[索引]),
)),
);
},
)
],
)
);
}
即使productMap包含数据,listview也是空的。我能做些什么来修复它?将数据添加到列表后,调用setState()。这将使用更新的数据重建Ui。好的,我已经尝试过:setState((){productMap.add(snapshot.data.documents[I]['name']);});但是我会出错。一旦您将数据添加到列表中,请调用setState()。这将使用更新的数据重建Ui。好的,我已经尝试过:setState((){productMap.add(snapshot.data.documents[I]['name']);});但我会犯错误。