Flutter Firestore-如何读取和写入对象数组

时间:2019-01-02 19:24:55

标签: firebase dart flutter google-cloud-firestore

因此,我一直在努力使用Flutter在Firestore中读写对象数组。对于写入,该数组永远不会在Firestore中进行更新,我也不知道为什么。我尝试过:

.updateData({"tasks": FieldValue.arrayUnion(taskList.tasks)});

.updateData(taskList.toMap());

但似乎什么都没做。

为了阅读,我通常会收到错误type 'List<dynamic>' is not a subtype of type 'List<Task>'。我很确定这与我的班级结构有关,但我无法弄清楚。我尝试了多种方法来将数据作为“任务列表”获取,但是所有尝试均失败了。这是我当前的损坏代码:

TaskList.dart

class TaskList {
  String name;
  List<Task> tasks;

  TaskList(this.name, this.tasks);

  Map<String, dynamic> toMap() => {'name': name, 'tasks': tasks};

  TaskList.fromSnapshot(DocumentSnapshot snapshot)
      : name = snapshot['name'],
        tasks = snapshot['tasks'].map((item) {
          return Task.fromMap(item);
        }).toList();

}

Task.dart

class Task {
  String task;
  bool checked;

  Task(this.task, this.checked);

  Map<String, dynamic> toMap() => {
        'task': task,
        'checked': checked,
      };

  Task.fromMap(Map<dynamic, dynamic> map)
      : task = map['task'],
        checked = map['checked'];
}

任何帮助或建议都值得赞赏!

1 个答案:

答案 0 :(得分:1)

我最终使任务列表的类型变为动态的,从而解决了我的大多数阅读问题。还是不明白为什么。

List<Task> tasks;

在编写时,我只是将fromMap()更改为toMap()来初始化任务。

'tasks': tasks.map((item) {
      return item.toMap();
    }).toList(),