joaopaulofcc

[WC] [FLUTTER] [BD] [API] main.dart

Nov 25th, 2020
488
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter/widgets.dart';
  3. import 'controls/databaseClient.dart';
  4. import 'models/dog.dart';
  5.  
  6. void main() => runApp(MyApp());
  7.  
  8. class MyApp extends StatelessWidget {
  9.   @override
  10.   Widget build(BuildContext context) {
  11.     return MaterialApp(
  12.       theme: ThemeData(
  13.         primarySwatch: Colors.cyan,
  14.       ),
  15.       home: DogPage(),
  16.     );
  17.   }
  18. }
  19.  
  20. class DogPage extends StatefulWidget {
  21.   @override
  22.   _DogPageState createState() => _DogPageState();
  23. }
  24.  
  25. class _DogPageState extends State<DogPage> {
  26.   final GlobalKey<FormState> _formStateKey = GlobalKey<FormState>();
  27.  
  28.   Future<List<Dog>> dogs;
  29.  
  30.   int _dogId;
  31.   String _dogName;
  32.   int _dogAge;
  33.  
  34.   bool isUpdate = false;
  35.  
  36.   int dogIdForUpdate;
  37.  
  38.   DatabaseClient db;
  39.  
  40.   final _dogIdController = TextEditingController();
  41.   final _dogNameController = TextEditingController();
  42.   final _dogAgeController = TextEditingController();
  43.  
  44.   @override
  45.   void initState() {
  46.     super.initState();
  47.     db = DatabaseClient();
  48.     openDatabase();
  49.   }
  50.  
  51.   openDatabase() async {
  52.     await db.open();
  53.     refreshDogList();
  54.   }
  55.  
  56.   refreshDogList() {
  57.     setState(() {
  58.       dogs = db.getDogs();
  59.     });
  60.   }
  61.  
  62.   @override
  63.   Widget build(BuildContext context) {
  64.     return Scaffold(
  65.       appBar: AppBar(
  66.         title: Text('App Dog'),
  67.       ),
  68.  
  69.       body: Column(
  70.         children: <Widget>[
  71.           Form(
  72.             key: _formStateKey,
  73.             autovalidate: true,
  74.             child: Column(
  75.               children: <Widget>[
  76.                 Padding(
  77.                   padding: EdgeInsets.only(left: 10, right: 10, bottom: 10),
  78.                   child: TextFormField(
  79.                     validator: (value) {
  80.                       if (value.isEmpty) {
  81.                         return 'Por favor insira o Id do cachorro';
  82.                       }
  83.                       if (value.trim() == "")
  84.                         return "Somente espaço não é válido!";
  85.                       return null;
  86.                     },
  87.                     onSaved: (value) {
  88.                       _dogId = int.parse(value);
  89.                     },
  90.                     controller: _dogIdController,
  91.                     keyboardType: TextInputType.number,
  92.                     decoration: InputDecoration(
  93.                         focusedBorder: new UnderlineInputBorder(
  94.                             borderSide: new BorderSide(
  95.                                 color: Colors.cyan,
  96.                                 width: 2,
  97.                                 style: BorderStyle.solid)),
  98.                         labelText: "Id do cachorro",
  99.                         icon: Icon(
  100.                           Icons.vpn_key,
  101.                           color: Colors.cyan,
  102.                         ),
  103.                         fillColor: Colors.white,
  104.                         labelStyle: TextStyle(
  105.                           color: Colors.cyan,
  106.                         )),
  107.                   ),
  108.                 ),
  109.  
  110.                 Padding(
  111.                   padding: EdgeInsets.only(left: 10, right: 10, bottom: 10),
  112.                   child: TextFormField(
  113.                     validator: (value) {
  114.                       if (value.isEmpty) {
  115.                         return 'Por favor insira o nome do cachorro';
  116.                       }
  117.                       if (value.trim() == "")
  118.                         return "Somente espaço não é válido!";
  119.                       return null;
  120.                     },
  121.                     onSaved: (value) {
  122.                       _dogName = value;
  123.                     },
  124.                     controller: _dogNameController,
  125.                     decoration: InputDecoration(
  126.                         focusedBorder: new UnderlineInputBorder(
  127.                             borderSide: new BorderSide(
  128.                                 color: Colors.cyan,
  129.                                 width: 2,
  130.                                 style: BorderStyle.solid)),
  131.                         labelText: "Nome do cachorro",
  132.                         icon: Icon(
  133.                           Icons.pets,
  134.                           color: Colors.cyan,
  135.                         ),
  136.                         fillColor: Colors.white,
  137.                         labelStyle: TextStyle(
  138.                           color: Colors.cyan,
  139.                         )),
  140.                   ),
  141.                 ),
  142.  
  143.                 Padding(
  144.                   padding: EdgeInsets.only(left: 10, right: 10, bottom: 10),
  145.                   child: TextFormField(
  146.                     validator: (value) {
  147.                       if (value.isEmpty) {
  148.                         return 'Por favor insira a idade do cachorro';
  149.                       }
  150.                       if (value.trim() == "")
  151.                         return "Somente espaço não é válido!";
  152.                       return null;
  153.                     },
  154.                     onSaved: (value) {
  155.                       _dogAge = int.parse(value);
  156.                     },
  157.                     controller: _dogAgeController,
  158.                     keyboardType: TextInputType.number,
  159.                     decoration: InputDecoration(
  160.                         focusedBorder: new UnderlineInputBorder(
  161.                             borderSide: new BorderSide(
  162.                                 color: Colors.cyan,
  163.                                 width: 2,
  164.                                 style: BorderStyle.solid)),
  165.                         labelText: "Idade do cachorro",
  166.                         icon: Icon(
  167.                           Icons.calendar_today,
  168.                           color: Colors.cyan,
  169.                         ),
  170.                         fillColor: Colors.white,
  171.                         labelStyle: TextStyle(
  172.                           color: Colors.cyan,
  173.                         )),
  174.                   ),
  175.                 ),
  176.               ],
  177.             ),
  178.           ),
  179.  
  180.           Row(
  181.             mainAxisAlignment: MainAxisAlignment.center,
  182.             children: <Widget>[
  183.               RaisedButton(
  184.                 color: Colors.cyan,
  185.                 child: Text(
  186.                   (isUpdate ? 'ATUALIZAR' : 'ADICIONAR'),
  187.                   style: TextStyle(color: Colors.white),
  188.                 ),
  189.                 onPressed: () {
  190.                   if (isUpdate) {
  191.                     if (_formStateKey.currentState.validate()) {
  192.                       _formStateKey.currentState.save();
  193.                       db
  194.                           .updateDog(Dog(
  195.                               id: dogIdForUpdate, name: _dogName, age: _dogAge))
  196.                           .then((data) {
  197.                         setState(() {
  198.                           isUpdate = false;
  199.                         });
  200.                       });
  201.                     }
  202.                   }
  203.                   else {
  204.                     if (_formStateKey.currentState.validate()) {
  205.                       _formStateKey.currentState.save();
  206.                       db.insertDog(
  207.                           Dog(id: _dogId, name: _dogName, age: _dogAge));
  208.                     }
  209.                   }
  210.                   _dogIdController.text = '';
  211.                   _dogNameController.text = '';
  212.                   _dogAgeController.text = '';
  213.  
  214.                   refreshDogList();
  215.                 },
  216.               ),
  217.               Padding(
  218.                 padding: EdgeInsets.all(10),
  219.               ),
  220.               RaisedButton(
  221.                 color: Colors.red,
  222.                 child: Text(
  223.                   (isUpdate ? 'CANCELAR ATUALIZAÇÃO' : 'LIMPAR'),
  224.                   style: TextStyle(color: Colors.white),
  225.                 ),
  226.                 onPressed: () {
  227.                   _dogIdController.text = '';
  228.                   _dogNameController.text = '';
  229.                   _dogAgeController.text = '';
  230.  
  231.                   setState(() {
  232.                     isUpdate = false;
  233.                     dogIdForUpdate = null;
  234.                   });
  235.                 },
  236.               ),
  237.             ],
  238.           ),
  239.           const Divider(
  240.             height: 20.0,
  241.           ),
  242.           Expanded(
  243.             child: FutureBuilder(
  244.               future: dogs,
  245.               builder: (context, snapshot) {
  246.                 if (snapshot.data == null || snapshot.data.length == 0) {
  247.                   return Text('Sem dados para exibir');
  248.                 }
  249.                 else if (snapshot.hasData) {
  250.                   return generateList(snapshot.data);
  251.                 }
  252.                 return CircularProgressIndicator();
  253.               },
  254.             ),
  255.           ),
  256.         ],
  257.       ),
  258.     );
  259.   }
  260.  
  261.   SingleChildScrollView generateList(List<Dog> dogs) {
  262.     return SingleChildScrollView(
  263.       scrollDirection: Axis.vertical,
  264.       child: SizedBox(
  265.         width: MediaQuery.of(context).size.width,
  266.  
  267.         child: DataTable(
  268.           columns: [
  269.             DataColumn(
  270.               label: Text('ID'),
  271.             ),
  272.             DataColumn(
  273.               label: Text('NOME'),
  274.             ),
  275.             DataColumn(
  276.               label: Text('IDADE'),
  277.             ),
  278.             DataColumn(
  279.               label: Text('DELETAR'),
  280.             )
  281.           ],
  282.           rows: dogs
  283.               .map(
  284.                 (dog) => DataRow(
  285.                   cells: [
  286.                     DataCell(
  287.                       Text(dog.id.toString()),
  288.                       onTap: () {
  289.                         setState(() {
  290.                           isUpdate = true;
  291.                           dogIdForUpdate = dog.id;
  292.                         });
  293.                         _dogIdController.text = dog.id.toString();
  294.                         _dogNameController.text = dog.name;
  295.                         _dogAgeController.text = dog.age.toString();
  296.                       },
  297.                     ),
  298.                     DataCell(
  299.                       Text(dog.name),
  300.                       onTap: () {
  301.                         setState(() {
  302.                           isUpdate = true;
  303.                           dogIdForUpdate = dog.id;
  304.                         });
  305.                         _dogIdController.text = dog.id.toString();
  306.                         _dogNameController.text = dog.name;
  307.                         _dogAgeController.text = dog.age.toString();
  308.                       },
  309.                     ),
  310.                     DataCell(
  311.                       Text(dog.age.toString()),
  312.                       onTap: () {
  313.                         setState(() {
  314.                           isUpdate = true;
  315.                           dogIdForUpdate = dog.id;
  316.                         });
  317.                         _dogIdController.text = dog.id.toString();
  318.                         _dogNameController.text = dog.name;
  319.                         _dogAgeController.text = dog.age.toString();
  320.                       },
  321.                     ),
  322.                     DataCell(
  323.                       IconButton(
  324.                         icon: Icon(Icons.delete),
  325.                         onPressed: () {
  326.                           db.deleteDog(dog.id);
  327.                           refreshDogList();
  328.                         },
  329.                       ),
  330.                     ),
  331.                   ],
  332.                 ),
  333.               )
  334.               .toList(),
  335.         ),
  336.       ),
  337.     );
  338.   }
  339. }
RAW Paste Data