Estou com problemas para adicionar produtos com complementos no carrinho.
Tenho um produto com vários complementos.
Cada complemento tem um preço, e ao adicionar o complemento, eu somo a qtd de produtos x preço do complemento.
Até aí tudo bem, o problema está sendo quando adiciono ou removo uma quantidade no carrinho, ele perde a referência do valor dos itens e buga o total do pedido.
Deixei a linha que acho que está com problema comentado, se puderem me ajudar agradeço, realmente não estou conseguindo chegar a uma lógica para resolver esse problema.
part 'PedidoModel.g.dart';
class PedidoModel = _PedidoModel with _$PedidoModel;
abstract class _PedidoModel with Store{
@observable
double total = 0;
@observable
int qtd = 1;
@observable
double totalItens = 0;
@observable
List<ItemComplemento> listaItens = ();
@observable
List<Produto> listaProdutos = ();
@observable
List<ProdutoCarrinho> listProdutosCarrinho = ();
@action
void addProduto(Produto produto) {
double somaTotal = produto.preco + total;
somaTotal = num.parse(somaTotal.toStringAsFixed(2));
total = somaTotal;
}
@action
void addProdutoCarrinho({@required Produto produto, @required context, @required Empresa empresa, @required CarrinhoModel carrinhoModel}) {
ProdutoCarrinho produtoCarrinho = ProdutoCarrinho();
produtoCarrinho.produto = produto;
produtoCarrinho.listaItensComplemento = listaItens;
Carrinho carrinho = Carrinho();
carrinho.idEmpresa = empresa.idEmpresa;
carrinho.produto = produto;
carrinho.produtoCarrinho = produtoCarrinho;
carrinho.adicionarProduto();
//carrinho.salvar();
popTela(context);
}
@action
void addItem(ItemComplemento itemComplemento) {
if(itemComplemento.preco != null){
totalItens = totalItens + (itemComplemento.preco * qtd);
total = (total + (itemComplemento.preco * qtd));
}
//print("totalItens $totalItens");
//print("total $total");
listaItens.add(itemComplemento);
}
@action
void removerItem(ItemComplemento itemComplemento) {
if(itemComplemento.preco != null){
totalItens = totalItens - (itemComplemento.preco * qtd);
total = (total - (itemComplemento.preco * qtd));
}
//print("totalItens $totalItens");
//print("total $total");
listaItens.remove(itemComplemento);
}
@action
void addQtd(Produto produto, {adicionar = true}) {
if(adicionar){
if(qtd < 100){
qtd++;
}
} else {
if(qtd > 1){
qtd--;
}
}
//creio que o problema está nessa linha: (aqui o total buga)
total = (produto.preco * qtd) + (totalItens * qtd);
print("total $total");
}
}