我在Firebase实时数据库中使用Flutter。如代码中所示,每个用户都可以创建自己的列表并向其中添加任务。但是,每次我尝试将新任务添加到同一列表时,它都会覆盖现有数据,而不是附加到现有数据。有人可以帮帮我吗。
这是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是用户输入的变量。
答案 0 :(得分:1)
使用push()
将数据附加到您的孩子下方。
为了保持理智,您需要删除“ Todo”子项下的当前数据,因为您的数据结构将更改为以下格式:
Todo
|-> "UniqueID1"
| |-> Todo Details (JSON)
|
|-> "UniqueID2"
| |-> Todo Details (JSON)
|
|-> ...
UniqueIDX
是Firebase每当您push()
或添加Todo时生成的字母数字字符串。
您可以使用onChildAdded
来监听数据。