使用一个基本的颤振应用程序,我正在从我的实时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.key展示了这顿饭的标题,通过snapshot.value展示了卡路里和钠(两个孩子)。但是我更喜欢分别显示卡路里和钠,如果有人按下删除键,我可以访问它们的两个值来重置总卡路里和钠的计数。有没有人想过如何最好地处理这件事?
发布于 2021-04-07 20:38:19
当您在不是单个值的value上调用DataSnapshot object时,您将从该路径下的值的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>。
https://stackoverflow.com/questions/66993585
复制相似问题