How to save given type map or array in firestore?

Asked

Viewed 260 times

0

I tried it this way:

createProduto(Produto produto){
    Map<String, dynamic> model = {
      "nome" : produto.nome,
      "descricao" : produto.descricao,
      "precoCompra" : produto.precoCompra,
      "itens" : produto.itens // <================ List<Item>
    };

    produtoCollection.add(model).whenComplete(() {
      print(produto.nome + ' cadastrado com sucesso!');
    });
  }

Item class:

class Item {
  String nome;
  int quantidade;

  Item({this.nome, this.quantidade});
}

Error:

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: Invalid argument: Instance of 'Item'

1 answer

1


You cannot directly enter a List of Items in firebase, you first need to convert your items to a Map:

class Item {
   String nome;
   int quantidade;

   Item({this.nome, this.quantidade});

   Map<String, dynamic> toMap(){
      return {
        'nome': nome,
        'quantidade': quantidade
      }
  }
}

And non moment to save you convert your items

createProduto(Produto produto){
  Map<String, dynamic> model = {
    "nome" : produto.nome,
    "descricao" : produto.descricao,
    "precoCompra" : produto.precoCompra,
    "itens" : produto.itens.map((item) => item.toMap()).toList() // <- converte os seus itens para uma List<Map<String, dynamic>>
  };

  // Dê preferência por usar async / await nos seus metodos
  produtoCollection.add(model).whenComplete(() {
     print(produto.nome + ' cadastrado com sucesso!');
  });
}

Take a look at this tutorial that will help you convert Object to Map or inversely, instead of having to write to all your models the methods, toMap and fromMap

Browser other questions tagged

You are not signed in. Login or sign up in order to post.