You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 15:45:08