Flutter Firestore - How To Read And Write Arrays of Objects
So I've been struggling with reading and writing arrays of objects in Firestore using Flutter. For writing, the array never gets updated in Firestore and I don't know why. I've tried:
.updateData({"tasks": FieldValue.arrayUnion(taskList.tasks)});
and
.updateData(taskList.toMap());
but neither seem to do anything.
For reading, I usually get the error type 'List<dynamic>' is not a subtype of type 'List<Task>'
. I'm pretty sure it has something to do with my class structure but I can't figure it out. I've tried many different ways to get the data as a List of Tasks but all attempts have failed. Here is my current broken code:
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'];
}
Any help or advice is appreciated!
firebase dart flutter google-cloud-firestore
add a comment |
So I've been struggling with reading and writing arrays of objects in Firestore using Flutter. For writing, the array never gets updated in Firestore and I don't know why. I've tried:
.updateData({"tasks": FieldValue.arrayUnion(taskList.tasks)});
and
.updateData(taskList.toMap());
but neither seem to do anything.
For reading, I usually get the error type 'List<dynamic>' is not a subtype of type 'List<Task>'
. I'm pretty sure it has something to do with my class structure but I can't figure it out. I've tried many different ways to get the data as a List of Tasks but all attempts have failed. Here is my current broken code:
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'];
}
Any help or advice is appreciated!
firebase dart flutter google-cloud-firestore
have a look at this answer please stackoverflow.com/a/53149420/2863386
– Shyju Madathil
Jan 3 at 6:24
add a comment |
So I've been struggling with reading and writing arrays of objects in Firestore using Flutter. For writing, the array never gets updated in Firestore and I don't know why. I've tried:
.updateData({"tasks": FieldValue.arrayUnion(taskList.tasks)});
and
.updateData(taskList.toMap());
but neither seem to do anything.
For reading, I usually get the error type 'List<dynamic>' is not a subtype of type 'List<Task>'
. I'm pretty sure it has something to do with my class structure but I can't figure it out. I've tried many different ways to get the data as a List of Tasks but all attempts have failed. Here is my current broken code:
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'];
}
Any help or advice is appreciated!
firebase dart flutter google-cloud-firestore
So I've been struggling with reading and writing arrays of objects in Firestore using Flutter. For writing, the array never gets updated in Firestore and I don't know why. I've tried:
.updateData({"tasks": FieldValue.arrayUnion(taskList.tasks)});
and
.updateData(taskList.toMap());
but neither seem to do anything.
For reading, I usually get the error type 'List<dynamic>' is not a subtype of type 'List<Task>'
. I'm pretty sure it has something to do with my class structure but I can't figure it out. I've tried many different ways to get the data as a List of Tasks but all attempts have failed. Here is my current broken code:
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'];
}
Any help or advice is appreciated!
firebase dart flutter google-cloud-firestore
firebase dart flutter google-cloud-firestore
asked Jan 2 at 19:24
JaredJared
270119
270119
have a look at this answer please stackoverflow.com/a/53149420/2863386
– Shyju Madathil
Jan 3 at 6:24
add a comment |
have a look at this answer please stackoverflow.com/a/53149420/2863386
– Shyju Madathil
Jan 3 at 6:24
have a look at this answer please stackoverflow.com/a/53149420/2863386
– Shyju Madathil
Jan 3 at 6:24
have a look at this answer please stackoverflow.com/a/53149420/2863386
– Shyju Madathil
Jan 3 at 6:24
add a comment |
1 Answer
1
active
oldest
votes
I ended up making the tasks list of type dynamic and that solved most of my reading problems. Still don't understand why though.
List<Task> tasks;
And for writing, I just changed the fromMap() to toMap() for initializing the tasks.
'tasks': tasks.map((item) {
return item.toMap();
}).toList(),
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54012067%2fflutter-firestore-how-to-read-and-write-arrays-of-objects%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I ended up making the tasks list of type dynamic and that solved most of my reading problems. Still don't understand why though.
List<Task> tasks;
And for writing, I just changed the fromMap() to toMap() for initializing the tasks.
'tasks': tasks.map((item) {
return item.toMap();
}).toList(),
add a comment |
I ended up making the tasks list of type dynamic and that solved most of my reading problems. Still don't understand why though.
List<Task> tasks;
And for writing, I just changed the fromMap() to toMap() for initializing the tasks.
'tasks': tasks.map((item) {
return item.toMap();
}).toList(),
add a comment |
I ended up making the tasks list of type dynamic and that solved most of my reading problems. Still don't understand why though.
List<Task> tasks;
And for writing, I just changed the fromMap() to toMap() for initializing the tasks.
'tasks': tasks.map((item) {
return item.toMap();
}).toList(),
I ended up making the tasks list of type dynamic and that solved most of my reading problems. Still don't understand why though.
List<Task> tasks;
And for writing, I just changed the fromMap() to toMap() for initializing the tasks.
'tasks': tasks.map((item) {
return item.toMap();
}).toList(),
answered Jan 3 at 5:51
JaredJared
270119
270119
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54012067%2fflutter-firestore-how-to-read-and-write-arrays-of-objects%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
have a look at this answer please stackoverflow.com/a/53149420/2863386
– Shyju Madathil
Jan 3 at 6:24