微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Flutter 中使用 Firebase 将孩子从快照中提取出来

如何解决在 Flutter 中使用 Firebase 将孩子从快照中提取出来

使用基本的 Flutter 应用程序,我正在努力从实时 Firebase 数据库获取数据并将其呈现在 FirebaseAnimatedList 中。我的数据看起来像:

Firebase image

我想获取每个项目名称并将其呈现在 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() + ")"
        ),);
    })
),

enter image description here

基本上,我只是通过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>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。