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
相关产品推荐
相关产品推荐

