Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
lib/main.dart import 'package:carrinho_compras/produto_provider.dart'; import 'package:carrinho_compras/produtos.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; void main() { runApp(MeuApp()); } class MeuApp extends StatelessWidget { @override Widget build(BuildContext context) { return MultiProvider( providers: <SingleChildCloneableWidget>[ ChangeNotifierProvider<ProdutoProvider>.value( value: ProdutoProvider(), ) ], child: MaterialApp( home: Produtos(), debugShowCheckedModeBanner: false, ), ); } } lib/produto.dart import 'dart:core'; class Produto{ String nome; String descricao; double preco; Produto(this.nome, this.descricao, this.preco); Produto.fromJson(Map<dynamic, dynamic> json){ nome = json['nome']; descricao = json['descricao']; preco = json['preco']; } Map<dynamic, dynamic> toJson(){ Map<dynamic, dynamic> json = Map<dynamic, dynamic>(); json['nome'] = nome; json['descricao'] = descricao; json['preco'] = preco; } @override String toString(){ return "Nome => ${nome}, Descrição => ${descricao}, Preço => ${preco}"; } } lib/produtos.dart import 'package:carrinho_compras/produto.dart'; import 'package:carrinho_compras/produto_api.dart'; import 'package:carrinho_compras/produto_provider.dart'; import 'package:carrinho_compras/produtos_carrinho.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class Produtos extends StatefulWidget { @override _ProdutosState createState() => _ProdutosState(); } class _ProdutosState extends State<Produtos> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("Produtos"), centerTitle: true, actions: <Widget>[ Container( padding: EdgeInsets.all(10), child: Row( children: <Widget>[ Consumer<ProdutoProvider>( builder: (context, produtoProvider, child){ if(produtoProvider.provedorProdutos.length > 1){ return Text("${produtoProvider.provedorProdutos.length} ITENS"); } else{ return Text("${produtoProvider.provedorProdutos.length} ITEM"); } } ), ], )) ], ), body: _body(), floatingActionButton: FloatingActionButton( onPressed: () { Navigator.push(context, MaterialPageRoute( builder: (context) { return ProdutosCarrinho(); } )); }, child: Icon(Icons.shopping_cart), ), ); } _body() { return FutureBuilder( future: ProdutoApi.getProdutos(), builder: (context, snapshot) { if (!snapshot.hasData) { return Center( child: CircularProgressIndicator( valueColor: AlwaysStoppedAnimation<Color>(Colors.blue), ), ); } List<Produto> listaProdutos = snapshot.data; return _listView(context, listaProdutos); }, ); } _listView(BuildContext context, List<Produto> listaProdutos) { return ListView.builder( itemCount: listaProdutos.length, itemBuilder: (BuildContext context, int index) { return _itemList(listaProdutos[index], context); }, ); } _itemList(Produto produto, context) { return ListTile( title: Text("${produto.nome}"), subtitle: Text("${produto.descricao}"), trailing: Text( "${produto.preco}", style: TextStyle(backgroundColor: Colors.yellow), ), onTap: () { return showDialog( context: context, builder: (context) { return AlertDialog( title: Text("Deseja adicionar este produto?"), content: Text("Nome: ${produto.nome}\nDescrição: ${produto.descricao}\nPreço: R\$ ${produto.preco}"), actions: <Widget>[ FlatButton( child: Text("Sim"), onPressed: () { Provider.of<ProdutoProvider>(context).verificaProduto(produto); Navigator.pop(context); }, ), FlatButton( child: Text("Não"), onPressed: () { Navigator.pop(context); }, ) ], ); }); }, ); } } lib/produtos_carrinho.dart import 'package:carrinho_compras/produto.dart'; import 'package:carrinho_compras/produto_provider.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class ProdutosCarrinho extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Consumer<ProdutoProvider>( builder: (context, produtoProvider, child) { return Text( "Valor de: ${produtoProvider.calcularValorCarrinho().toStringAsPrecision(3)}"); }), centerTitle: true, ), body: _body(), ); } _body() { return Consumer<ProdutoProvider>( builder: (context, produtoProvider, child) { return _listView(produtoProvider); }, ); } _listView(ProdutoProvider produtoProvider) { return ListView.builder( itemCount: produtoProvider.provedorProdutos.length, itemBuilder: (BuildContext context, int index) { return _itemList(produtoProvider.provedorProdutos[index], context); }, ); } _itemList(Produto produto, BuildContext context) { return ListTile( title: Text("${produto.nome}"), subtitle: Text("${produto.preco}"), trailing: IconButton( icon: Icon(Icons.delete), onPressed: () { showDialog( context: context, builder: (context) { return AlertDialog( title: Text("Você tem certeza que deseja remover este produto?"), content: Text( "Nome: ${produto.nome}\nDescrição: ${produto.descricao}\nPreço: R\$ ${produto.preco}"), actions: <Widget>[ FlatButton( child: Text("Sim"), onPressed: () { Provider.of<ProdutoProvider>(context) .removeProduto(produto); Navigator.pop(context); }, ), FlatButton( child: Text("Não"), onPressed: () { Navigator.pop(context); }, ) ], ); }); }, ), ); } } lib/produto_api.dart import 'dart:convert'; import 'package:carrinho_compras/produto.dart'; import 'package:flutter/services.dart'; class ProdutoApi{ static Future<List<Produto>> getProdutos() async{ String dados = await rootBundle.loadString("assets/jsons/produtos.json"); List lista = jsonDecode(dados); List listaProdutos = List<Produto>(); for(Map map in lista){ Produto produto = Produto.fromJson(map); listaProdutos.add(produto); } print(listaProdutos); return listaProdutos; } } lib/produto_info.dart lib/produto_provider.dart import 'package:carrinho_compras/produto.dart'; import 'package:flutter/foundation.dart'; class ProdutoProvider extends ChangeNotifier{ List<Produto> provedorProdutos = List<Produto>(); void verificaProduto(Produto produto){ provedorProdutos.add(produto); notifyListeners(); } void removeProduto(Produto produto){ provedorProdutos.remove(produto); notifyListeners(); } double calcularValorCarrinho(){ double valor = 0.0; for(int i = 0; i < provedorProdutos.length; i++){ valor += provedorProdutos[i].preco; } return valor; } }
Compartilhar