问题描述
使用基本的 Flutter 应用程序,我正在努力从实时 Firebase 数据库中获取数据并将其呈现在 FirebaseAnimatedList 中。我的数据看起来像:
我想获取每个项目名称并将其呈现在 FirebaseAnimatedList 中,然后使用删除图标功能将其从列表中删除,同时更新特定日期的总钠和卡路里计数。我访问数据快照的代码如下所示:
formattedDate = formatter.format(Now);
callLetters = formattedDate;
final FirebaseDatabase database = FirebaseDatabase(app: widget.app);
_callLettersRef = database.reference().child('User').child('DietVals').child(formattedDate).child('Meals');
我这样查询数据库,它在我的应用程序中返回以下列表。我不太确定是直接从“膳食”的同一快照访问卡路里和钠的子项的最佳方式。
Flexible(
child: new FirebaseAnimatedList(
shrinkWrap: true,query: _callLettersRef,itemBuilder: (BuildContext context,DataSnapshot snapshot,Animation<double> animation,int index){
return new ListTile(
trailing: IconButton(icon: Icon(Icons.delete),onpressed: () =>{
ref.child('User').child('DietVals').child(formattedDate).child('Calories').set(ServerValue.increment(-!NOTSUREHOWTOACCEsstHECALORIEVALUE)),ref.child('User').child('DietVals').child(formattedDate).child('sodium').set(ServerValue.increment(-!NOTSUREHOWTOACCEsstHEsodiumVALUE)),_callLettersRef.child(snapshot.key).remove(),}),title: new Text(snapshot.key + "\n(Calories: " + snapshot.value.toString() + ")"
),);
})
),
基本上,我只是通过snapshot.value 显示膳食的标题(通过snapshot.key)和卡路里和钠(两个孩子)。但我更喜欢分别显示卡路里和钠,如果有人按下删除键,可以访问它们的两个值来重置总卡路里和钠的计数。有没有人想过如何最好地管理这个?
解决方法
当您在不是单个值的 DataSnapshot
object 上调用 value
时,您会从该路径下的 Map<String,dynamic>
个值中返回。因此,您可以从该地图中获取特定属性的值。
所以不要new Text(snapshot.key + "\n(Calories: " + snapshot.value.toString() + ")")
做这样的事情:
new Text(
snapshot.key + "\n" +
"(Calories: " + snapshot.value["calories"].toString() + ")"
)
如果在顶级 Map
下还有其他嵌套对象,它们的值将在结果中显示为另一个 Map<String,dynamic>
。