A maior rede de estudos do Brasil

Grátis
lib

Pré-visualização | Página 1 de 2

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';

Crie agora seu perfil grátis para visualizar sem restrições.