Advertisement
joaopaulofcc

Semana 6 - Parte 3

Sep 30th, 2020
819
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 7.99 KB | None | 0 0
  1. import 'package:flutter/material.dart';
  2. import 'Models/Produto.dart';
  3.  
  4. void main() => runApp(MyApp());
  5.  
  6. class MyApp extends StatelessWidget {
  7.   @override
  8.   Widget build(BuildContext context) {
  9.     return MaterialApp(
  10.       title: "Mercado",
  11.       home: Mercado(),
  12.     );
  13.   }
  14. }
  15.  
  16. class Mercado extends StatefulWidget {
  17.   @override
  18.   _MercadoState createState() => _MercadoState();
  19. }
  20.  
  21. class _MercadoState extends State<Mercado> {
  22.   final TextEditingController _controladorNome = TextEditingController();
  23.   final TextEditingController _controladorQuantidade = TextEditingController();
  24.   final TextEditingController _controladorValor = TextEditingController();
  25.   final TextEditingController _controladorData = TextEditingController();
  26.   final List<Produto> produtos = new List();
  27.   bool sort;
  28.  
  29.   @override
  30.   void initState() {
  31.     sort = false;
  32.     super.initState();
  33.   }
  34.  
  35.   onSortColumn(int columnIndex, bool ascending) {
  36.     if (columnIndex == 0) {
  37.       if (ascending) {
  38.         produtos.sort((a, b) => a.nome.compareTo(b.nome));
  39.       } else {
  40.         produtos.sort((a, b) => b.nome.compareTo(a.nome));
  41.       }
  42.     }
  43.   }
  44.  
  45.   Future<void> _selectDate(context) async {
  46.     DateTime selectedDate = await showDatePicker(
  47.         context: context,
  48.         initialDate: DateTime.now(),
  49.         firstDate: DateTime(2017),
  50.         lastDate: DateTime(2021));
  51.     String resultado =
  52.         "${selectedDate.day}/${selectedDate.month}/${selectedDate.year}";
  53.     _controladorData.text = resultado;
  54.   }
  55.  
  56.   @override
  57.   Widget build(BuildContext context) {
  58.     return MaterialApp(
  59.         home: DefaultTabController(
  60.             length: 2,
  61.             child: Scaffold(
  62.                 resizeToAvoidBottomPadding: false,
  63.                 appBar: AppBar(
  64.                     title: Text('Produtos'),
  65.                     bottom: TabBar(tabs: [
  66.                       Tab(icon: Icon(Icons.add)),
  67.                       Tab(icon: Icon(Icons.table_chart))
  68.                     ])),
  69.                 body: TabBarView(
  70.                   children: [
  71.                     Column(
  72.                       children: <Widget>[
  73.                         Padding(
  74.                             padding: const EdgeInsets.all(16.0),
  75.                             child: TextField(
  76.                                 controller: _controladorNome,
  77.                                 decoration:
  78.                                     InputDecoration(labelText: 'Nome'))),
  79.                         Padding(
  80.                             padding: const EdgeInsets.all(16.0),
  81.                             child: TextField(
  82.                               controller: _controladorQuantidade,
  83.                               decoration:
  84.                                   InputDecoration(labelText: 'Quantidade'),
  85.                               keyboardType: TextInputType.number,
  86.                             )),
  87.                         Padding(
  88.                             padding: const EdgeInsets.all(16.0),
  89.                             child: TextField(
  90.                               controller: _controladorValor,
  91.                               decoration: InputDecoration(labelText: 'Valor'),
  92.                               keyboardType: TextInputType.number,
  93.                             )),
  94.                         Padding(
  95.                           padding: const EdgeInsets.all(16.0),
  96.                           child: Row(
  97.                             children: [
  98.                               Expanded(
  99.                                   child: TextField(
  100.                                 controller: _controladorData,
  101.                                 enabled: false,
  102.                                 decoration: InputDecoration(labelText: 'Data'),
  103.                               )),
  104.                               Expanded(
  105.                                 child: RaisedButton(
  106.                                     child: Text('Selecionar Data'),
  107.                                     onPressed: () {
  108.                                       _selectDate(context);
  109.                                     }),
  110.                               )
  111.                             ],
  112.                           ),
  113.                         ),
  114.                         Padding(
  115.                             padding: const EdgeInsets.only(top: 16.0),
  116.                             child: RaisedButton(
  117.                               child: Text('Cadastrar'),
  118.                               onPressed: () {
  119.                                 final String nome = _controladorNome.text;
  120.                                 final int quantidade =
  121.                                     int.tryParse(_controladorQuantidade.text);
  122.                                 final double valor =
  123.                                     double.tryParse(_controladorValor.text);
  124.                                 final Produto produtoNovo = Produto(nome,
  125.                                     quantidade, valor, _controladorData.text);
  126.  
  127.                                 produtos.add(produtoNovo);
  128.                                 print(produtos);
  129.                                 setState(() {});
  130.                               },
  131.                             )),
  132.                       ],
  133.                     ),
  134.                     SingleChildScrollView(
  135.                         scrollDirection: Axis.vertical,
  136.                         child: Center(
  137.                           child: Padding(
  138.                             padding: const EdgeInsets.only(top: 30.0),
  139.                             child: DataTable(
  140.                               sortAscending: sort,
  141.                               sortColumnIndex: 0,
  142.                               columns: [
  143.                                 DataColumn(
  144.                                     label: Text("Nome",
  145.                                         style: TextStyle(fontSize: 16)),
  146.                                     numeric: false,
  147.                                     onSort: (columnIndex, ascending) {
  148.                                       setState(() {
  149.                                         sort = !sort;
  150.                                       });
  151.                                       onSortColumn(columnIndex, ascending);
  152.                                     }),
  153.                                 DataColumn(
  154.                                   label: Text("Qtd",
  155.                                       style: TextStyle(fontSize: 16)),
  156.                                   numeric: true,
  157.                                 ),
  158.                                 DataColumn(
  159.                                   label: Text("Valor",
  160.                                       style: TextStyle(fontSize: 16)),
  161.                                   numeric: true,
  162.                                 ),
  163.                                 DataColumn(
  164.                                   label: Text("Data",
  165.                                       style: TextStyle(fontSize: 16)),
  166.                                   numeric: false,
  167.                                 ),
  168.                               ],
  169.                               rows: produtos
  170.                                   .map(
  171.                                     (produto) => DataRow(cells: [
  172.                                       DataCell(
  173.                                         Text(produto.nome),
  174.                                       ),
  175.                                       DataCell(
  176.                                         Text(produto.quantidade.toString()),
  177.                                       ),
  178.                                       DataCell(
  179.                                         Text(produto.valor.toString()),
  180.                                       ),
  181.                                       DataCell(
  182.                                         Text(produto.data),
  183.                                       ),
  184.                                     ]),
  185.                                   )
  186.                                   .toList(),
  187.                             ),
  188.                           ),
  189.                         ))
  190.                   ],
  191.                 ))));
  192.   }
  193. }
  194.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement