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

Flutter项目中如何根据分类将数据存入不同的数据库节点

解决方案

核心修改addDestOrAct方法,根据传入的分类参数动态选择写入的数据库节点即可,无需调整其他业务代码:

void addDestOrAct(String name, String details, var category) {
  // 先判断分类确定目标存储节点
  String targetNode;
  if (category == 'Activity') {
    targetNode = 'Activities';
  } else if (category == 'Destination') {
    targetNode = 'Destinations';
  } else {
    // 分类异常兜底逻辑,可根据需求调整
    Fluttertoast.showToast(
        timeInSecForIosWeb: 2,
        gravity: ToastGravity.CENTER,
        msg: "分类参数错误,请重试");
    return;
  }

  String key = destdatabaseref
      .child('Database')
      .child(targetNode) // 替换原来的固定节点
      .push()
      .key;
  destdatabaseref
      .child('Database')
      .child(targetNode) // 替换原来的固定节点
      .child(name)
      .set({
    'id': key,
    'name': name,
    'description': details,
    'category': category
  });
  nameController.clear();
  descriptionController.clear();

  Fluttertoast.showToast(
      timeInSecForIosWeb: 4,
      gravity: ToastGravity.CENTER,
      msg: "It has been added!");

  Navigator.pop(context);
}

注意事项

  • Dart中判断值相等需要用双等号==,不要误写为单等号赋值运算符
  • 现有分类选择组件传递的_categorySelected值正好是Activity和Destination,和上述判断逻辑完全匹配,不需要修改分类相关代码

可选优化

当前你使用name作为子节点的键,若出现同名的目的地/活动,后写入的数据会覆盖之前的数据,可以改成用push生成的key作为子节点键,避免重名冲突:

// 把原来的.child(name)改成.child(key!)即可
destdatabaseref
    .child('Database')
    .child(targetNode)
    .child(key!)
    .set({
  'id': key,
  'name': name,
  'description': details,
  'category': category
});

内容的提问来源于stack exchange,提问作者walr0s

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:15:06