Flutter Firestore - How To Read And Write Arrays of Objects












0















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!










share|improve this question























  • have a look at this answer please stackoverflow.com/a/53149420/2863386

    – Shyju Madathil
    Jan 3 at 6:24
















0















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!










share|improve this question























  • have a look at this answer please stackoverflow.com/a/53149420/2863386

    – Shyju Madathil
    Jan 3 at 6:24














0












0








0








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!










share|improve this question














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






share|improve this question













share|improve this question











share|improve this question




share|improve this question










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



















  • 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












1 Answer
1






active

oldest

votes


















0














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(),





share|improve this answer
























    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
    });


    }
    });














    draft saved

    draft discarded


















    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









    0














    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(),





    share|improve this answer




























      0














      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(),





      share|improve this answer


























        0












        0








        0







        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(),





        share|improve this answer













        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(),






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 3 at 5:51









        JaredJared

        270119




        270119
































            draft saved

            draft discarded




















































            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.




            draft saved


            draft discarded














            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





















































            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







            Popular posts from this blog

            android studio warns about leanback feature tag usage required on manifest while using Unity exported app?

            SQL update select statement

            WPF add header to Image with URL pettitions [duplicate]