如何在Firebase实时数据库中按不同日期存储当前用户的癫痫发作记录
你当前的代码逻辑本身已经符合自动创建日期子节点的要求:Firebase Realtime Database 写入数据时,如果路径中对应的中间节点不存在,会自动完成创建,不需要额外手动判断日期节点是否存在。当天调用方法时会在对应日期节点下新增发作记录,次日调用时会自动创建新的日期节点再写入记录。
现有代码仅需要做两处小优化,避免后续出现异常:
- 处理异步写入逻辑:
set方法是异步操作,当前代码直接在调用后跳转页面,可能出现写入未完成就跳转的问题,需要添加异步等待逻辑 - 优化日期格式:当前使用的
日-月-年格式后续按日期排序时会出现顺序错乱,建议改成年-月-日格式,同时给单数字的月/日补零保证格式统一
修改后的参考代码如下:
// Store seizure data to firebase on occurrence Future<void> storeSeizureData() async { DateTime now = DateTime.now(); String dateString = now.toString(); // 生成 年-月-日 格式的日期,如需要保留原来的日-月-年格式可自行调整顺序 String date = "${now.year}-${now.month.toString().padLeft(2,'0')}-${now.day.toString().padLeft(2,'0')}"; const String duration = '15'; print("Saving data to firebase"); // 等待写入操作执行完成 await ref .child('User_data') .child(cuser.uid) .child("Seizure_history") .child(date) .push() .set({'duration': duration, 'datetime': dateString}); // 写入完成且页面未销毁时再执行跳转 if(context.mounted) { Navigator.pushAndRemoveUntil( context, MaterialPageRoute( builder: (context) => Homepage(device: widget.device), ), (route) => false, ); } }
修改后即可完全匹配你预期的存储结构,无需额外添加节点判断逻辑。
内容的提问来源于stack exchange,提问作者Nabia Salman
相关产品推荐
相关产品推荐

