带有 Flutter 的实时数据库覆盖数据而不是将其添加到现有节点
Posted
技术标签:
【中文标题】带有 Flutter 的实时数据库覆盖数据而不是将其添加到现有节点【英文标题】:RealTime Database with Flutter overwrites data instead of adding it to the existing nodes 【发布时间】:2021-01-30 16:55:15 【问题描述】:我正在使用 Flutter 和 Firebase 实时数据库。如代码所示,每个用户都可以创建自己的列表并向其中添加任务。但是,每次我尝试将新任务添加到同一个列表时,它都会覆盖现有数据而不是附加到它。谁能帮帮我。
这是 ToDo 模型
class Todo
String group;
String subject;
bool completed;
String userId;
Todo(this.userId, this.group, this.subject, this.completed);
Todo.fromSnapshot(DataSnapshot snapshot)
: group = snapshot.value["group"],
userId = snapshot.value["userId"],
subject = snapshot.value["subject"],
completed = snapshot.value["completed"];
toJson()
return
userId:
"lists": [
"groupname": group,
"tasks": [
"name": subject, "done": completed,
]
,
]
;
这是要添加到数据库的函数
addNewTodo(String groupn, String taskn)
if (groupn.length > 0 && taskn.length > 0)
Todo todo =
new Todo(widget.userId, groupn.toString(), taskn.toString(), false);
_database.reference().child("Todo").set(todo.toJson());
groupn & taskn 是用户输入的变量。
【问题讨论】:
你好。set()
,顾名思义,将孩子的值设置为您指定的值,如果孩子已经存在,这本质上是一个更新。
【参考方案1】:
使用push()
在您的孩子下附加数据。
您需要删除“Todo”子项下的当前数据,因为您的数据结构会更改为这种格式:
Todo
|-> "UniqueID1"
| |-> Todo Details (JSON)
|
|-> "UniqueID2"
| |-> Todo Details (JSON)
|
|-> ...
UniqueIDX
是 Firebase 每次您 push()
或添加 Todo 时生成的字母数字字符串。
您可以使用onChildAdded
来监听数据。
【讨论】:
如果回答对您有帮助,请标记为已接受,谢谢!以上是关于带有 Flutter 的实时数据库覆盖数据而不是将其添加到现有节点的主要内容,如果未能解决你的问题,请参考以下文章
在 Flutter 中将数据保存到 Firebase 实时数据库
带有一个适用于android、ios、web的插件的flutter firebase(实时)数据库? [复制]
实时获取当前登录用户的数据 - Flutter & Firestore