Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 带有颤振的实时数据库覆盖数据,而不是将其添加到现有节点_Json_Firebase_Flutter_Firebase Realtime Database - Fatal编程技术网

Json 带有颤振的实时数据库覆盖数据,而不是将其添加到现有节点

Json 带有颤振的实时数据库覆盖数据,而不是将其添加到现有节点,json,firebase,flutter,firebase-realtime-database,Json,Firebase,Flutter,Firebase Realtime Database,我正在使用Flatter与Firebase实时数据库。如代码所示,每个用户都可以创建自己的列表并向其中添加任务。但是,每次我尝试将新任务添加到同一列表时,它都会覆盖现有数据,而不是附加到现有数据。谁能帮帮我吗 这就是ToDo模型 class Todo { String group; String subject; bool completed; String userId; Todo(this.userId, this.group, this.subject, this.c

我正在使用Flatter与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是用户输入的变量。

用于在子项下追加数据

您需要删除“Todo”子项下的当前数据,以确保其完整性,因为您的数据结构将更改为以下格式:

Todo
  |-> "UniqueID1"
  |     |-> Todo Details (JSON)
  |
  |-> "UniqueID2"
  |     |-> Todo Details (JSON)
  |
  |-> ...
UniqueIDX
是Firebase每次推送()或添加Todo时生成的字母数字字符串


您可以使用来侦听数据。

您好
set()
,顾名思义,将子项的值设置为您指定的值,如果该子项已经存在,则这本质上是一个更新。如果答案有用,请标记为接受,谢谢!