SHARE
TWEET

Untitled

a guest Oct 17th, 2019 88 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import 'dart:async';
  2. import 'package:app_esdudez/models/ciclo_model.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:scoped_model/scoped_model.dart';
  5. import 'home_estudarFinal.dart';
  6. import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
  7. import 'package:intl/intl.dart';
  8. import 'package:app_esdudez/widgets/bordaContainer.dart';
  9.  
  10.  
  11. class HomeEstudar extends StatefulWidget {
  12.   @override
  13.   _HomeEstudar createState() => _HomeEstudar();
  14. }
  15.  
  16. class _HomeEstudar extends State<HomeEstudar>
  17.     with SingleTickerProviderStateMixin {
  18.   @override
  19.   void initState() {
  20.     super.initState();
  21.     _animationController =
  22.         AnimationController(vsync: this, duration: Duration(milliseconds: 300));
  23.     DateTime now = DateTime.now();
  24.     _date = DateFormat('dd-MM-yyyy').format(now);
  25.   }
  26.  
  27.   @override
  28.   void dispose() {
  29.     super.dispose();
  30.     _animationController.dispose();
  31.   }
  32.  
  33.   List<String> materia = [ // lista de materias
  34.     "Ingles",
  35.     "Portugues",
  36.     "Matematica",
  37.     "Direito Processual Penal"
  38.   ];
  39.  
  40.   final _scaffoldKey = GlobalKey<ScaffoldState>();
  41.   final _assuntoController = TextEditingController();
  42.   final _formKey = GlobalKey<FormState>();
  43.   AnimationController _animationController;
  44.   Stopwatch watch = new Stopwatch();
  45.   Timer timer;
  46.   String _date = "Data"; // Dia do estudo
  47.   String _time = "Tempo";
  48.   String elapsedTime = '00:00:00'; // tempo de estudo
  49.   String tempoManual;
  50.   String dropdownValue = 'Ingles'; //materia escolhida
  51.   String newValue;
  52.   String textoMenu = "Selecione a matéria";
  53.   String assunto = ''; // assunto que está estudando
  54.   String textoBotaoPlay = "Iniciar";
  55.   bool assuntoControle = true;
  56.   bool tempoIniciado = false;
  57.   bool isPlaying = false;
  58.   bool _isButtonLembreteDisabled = false;
  59.   bool _isButtonTempoManualDisabled = false;
  60.   bool _isButtonDataDisabled = false;
  61.   int dropdownbuttonControle = 2;
  62.   int buttonControle = 2;
  63.   int timeSoFar;
  64.   int timeSoFarHoras;
  65.   int timeSoFarMinutos;
  66.   int timeSoFarSegundos;
  67.   double cardControle = 3;
  68.  
  69.   @override
  70.   Widget build(BuildContext context) {
  71.     // usar model,
  72.     // criar variavel no ciclo by user, para a materia do ciclo
  73.     // cirar uma funçao no model, par varrer as materias e pegar a primeira que nao foi estudada
  74.     // puxar a materia que nao foi estudada para essa tela, (função retorna materia)
  75.     // usar materia, ou pegar id dela, para adicionar as os topicos, com o id dela..
  76.  
  77.     print('Tela Estudar.');
  78.     return ScopedModelDescendant<CicloModel>(builder: (context, child, model) {
  79.       model
  80.           .getMateriaParaEstudo(); // chama função para buscar proxima materia para estudar...
  81.  
  82.       if (model.isLoading) {
  83.         print("entrou no if model loading..");
  84.         // CHAMA FUNÇAO DEDICADA A ESSA TELA
  85.  
  86.         return Center(
  87.           child: CircularProgressIndicator(
  88.               valueColor: new AlwaysStoppedAnimation<Color>(Colors.white)),
  89.         );
  90.       } else {
  91.         print("entrou no ELSE");
  92.         print(model.materiaParaEstudo.nome);
  93.         print(model.materiaParaEstudo.index);
  94.  
  95.         return Scaffold(
  96.             resizeToAvoidBottomPadding: false,
  97.             key: _scaffoldKey,
  98.             body: Container(
  99.                 color: Colors.blue,
  100.                 child: Container(
  101.                     decoration: bordaContainer(), // Borda do body do Scafold
  102.                     child: SingleChildScrollView(
  103.                       child: Padding(
  104.                         padding: EdgeInsets.only( top: 5, left: 15, right: 15, bottom: 15),
  105.                       child: Column(
  106.                         children: <Widget>[
  107.                           Container(
  108.                               child: Card(
  109.                                   elevation: cardControle,
  110.                                   child: Padding(
  111.                                     padding: EdgeInsets.only(
  112.                                         left: 20, right: 20, top: 10, bottom: 10),
  113.                                     child: Column(
  114.                                       // coluna dentro do card
  115.                                           crossAxisAlignment: CrossAxisAlignment.start,
  116.                                           children: <Widget>[
  117.                                             Text(
  118.                                               "Selecione a materia que irá estudar",
  119.                                               style: TextStyle(fontSize: 15),
  120.                                             ),
  121.                                             espaco(), // Espaço entre os componentes  
  122.                                             selecionaMateria(), // Dropbutton, para selecionar a materia que ira estudar
  123.                                             espaco(), // Espaço entre os componentes
  124.                                             digitaAssunto(), // Espaço para digitar o assunto que sera estudado
  125.                                             espaco(), // Espaço entre os componentes
  126.                                             diaEstudo(), // Dia de estudo - por padrao é o dia atual, é possivel alterar
  127.                                             espaco(), // Espaço entre os componentes
  128.                                             Row(
  129.                                               mainAxisAlignment: MainAxisAlignment.spaceBetween,
  130.                                               children: <Widget>[
  131.                                                 botaoLembrete(), // Defini um alarme para o tempo de estudo
  132.                                                 botaoTempoManual(), // Inseri um tempo manual, é possivel continuar a partir desse tempo
  133.                                                                     // ainde precisa de ajustes
  134.                                               ],
  135.                                             )
  136.                                       ],
  137.                                     ),
  138.                                   ))
  139.                           ),
  140.                           Padding(
  141.                             padding: EdgeInsets.only(bottom: 20),
  142.                           ),
  143.                           Column(
  144.                               children: <Widget>[
  145.                                 Text(elapsedTime, // Tempo de estudo que aparece na tela, cronometro em si
  146.                                     style: TextStyle(
  147.                                       fontSize: 50.0,
  148.                                       color: Colors.black,
  149.                                     )),
  150.                                 Row(
  151.                                   mainAxisAlignment: MainAxisAlignment.center,
  152.                                   children: <Widget>[
  153.                                     botaoParar(), // Botao que para de contar o tempo
  154.                                     SizedBox(width: 50.0),
  155.                                     botaoIniciar(), // Botao que inicia e pausa o tempo
  156.                                     SizedBox(width: 50.0),
  157.                                     botaoReiniciar(), // Botao que reinicia o tempo
  158.                                   ],
  159.                                 )
  160.                               ],
  161.                             ),
  162.                           Padding(
  163.                             padding: EdgeInsets.only(bottom: 50),
  164.                           ),
  165.                         ],
  166.                       ),
  167.                     )))),
  168.             floatingActionButton: FloatingActionButton.extended(
  169.               ///BOTAO FINALIZAR
  170.               heroTag: 'teste5',
  171.               onPressed: onpressedAvancar(), // Ações realizadas quando o botao avançar é pressionado
  172.               label: Text(
  173.                 "Avançar",
  174.                 style: TextStyle(fontSize: 15),
  175.               ),
  176.               backgroundColor: Colors.blue,
  177.             ),
  178.             floatingActionButtonLocation:
  179.                 FloatingActionButtonLocation.endFloat);
  180.       }
  181.     });
  182.   }
  183.  
  184.   updateTime(Timer timer) {
  185.     if (watch.isRunning) {
  186.       setState(() {
  187.         elapsedTime = transformMilliSeconds(watch.elapsedMilliseconds);
  188.       });
  189.     }
  190.   }
  191.  
  192.   startWatch() {
  193.     watch.start();
  194.     timer = new Timer.periodic(new Duration(milliseconds: 100), updateTime);
  195.   }
  196.  
  197.   stopWatch() {
  198.     watch.stop();
  199.     setTime();
  200.   }
  201.  
  202.   resetWatch() {
  203.     watch.reset();
  204.     setTime();
  205.   }
  206.  
  207.   setTime() {
  208.     timeSoFar = watch.elapsedMilliseconds;
  209.     setState(() {
  210.       elapsedTime = transformMilliSeconds(timeSoFar);
  211.     });
  212.   }
  213.  
  214.   transformMilliSeconds(int milliseconds) {
  215.     int hundreds = (milliseconds / 10).truncate();
  216.     int seconds = (hundreds / 100).truncate();
  217.     int minutes = (seconds / 60).truncate();
  218.     int hours = (minutes / 60).truncate();
  219.  
  220.     String hoursStr = (hours % 60).toString().padLeft(2, '0');
  221.     String minutesStr = (minutes % 60).toString().padLeft(2, '0');
  222.     String secondsStr = (seconds % 60).toString().padLeft(2, '0');
  223.  
  224.     return "$hoursStr:$minutesStr:$secondsStr";
  225.   }
  226.  
  227.   void _handleOnPressed() {
  228.     setState(() {
  229.       isPlaying = !isPlaying;
  230.       isPlaying
  231.           ? _animationController.forward()
  232.           : _animationController.reverse();
  233.     });
  234.   }
  235.  
  236.   Function onpressedLembrete() {
  237.     if (_isButtonLembreteDisabled) {
  238.       return null;
  239.     } else {
  240.       return () {
  241.         // do anything else you may want to here
  242.       };
  243.     }
  244.   }
  245.  
  246.   Function onpressedTempoManual() {
  247.     if (_isButtonTempoManualDisabled) {
  248.       return null;
  249.     } else {
  250.       return () {
  251.         if (_formKey.currentState.validate()) {
  252.           if (dropdownValue != null) {
  253.             DatePicker.showTimePicker(context,
  254.                 theme: DatePickerTheme(
  255.                   containerHeight: 210.0,
  256.                 ),
  257.                 showTitleActions: true, onConfirm: (time) {
  258.               print('confirm $time');
  259.               _time = '${time.hour}:${time.minute}:${time.second}';
  260.               setState(() {
  261.                 //startWatch();
  262.                 //stopWatch();
  263.                 timeSoFarHoras = time.hour * 60000000;
  264.                 timeSoFarMinutos = time.minute * 60000;
  265.                 timeSoFarSegundos = time.second * 1000;
  266.                 timeSoFar =
  267.                     timeSoFarHoras + timeSoFarMinutos + timeSoFarSegundos;
  268.                 elapsedTime = _time;
  269.                 //timer = _time;
  270.               });
  271.             }, currentTime: DateTime.now(), locale: LocaleType.en);
  272.             setState(() {});
  273.           }
  274.         } else {
  275.           _scaffoldKey.currentState.showSnackBar(
  276.               SnackBar(content: Text("Voce nao selecionou a materia")));
  277.         }
  278.       };
  279.     }
  280.   }
  281.  
  282.   Function onpressedData() {
  283.     if (_isButtonDataDisabled) {
  284.       return null;
  285.     } else {
  286.       return () {
  287.         DatePicker.showDatePicker(context,
  288.             theme: DatePickerTheme(
  289.               containerHeight: 210.0,
  290.             ),
  291.             showTitleActions: true,
  292.             minTime: DateTime(2000, 1, 1),
  293.             maxTime: DateTime(2050, 12, 31), onConfirm: (date) {
  294.           print('confirm $date');
  295.           _date = '${date.day}-${date.month}-${date.year}';
  296.           setState(() {});
  297.         }, currentTime: DateTime.now(), locale: LocaleType.en);
  298.       };
  299.     }
  300.   }
  301.  
  302.   Function onpressedIniciar() {
  303.     return () {
  304.       if (_formKey.currentState.validate()) {
  305.         if (dropdownValue != null) {
  306.           if (tempoIniciado == false) {
  307.             setState(() {
  308.               assuntoControle = false;
  309.               _isButtonLembreteDisabled = true;
  310.               _isButtonTempoManualDisabled = true;
  311.               _isButtonDataDisabled = true;
  312.               textoMenu = dropdownValue;
  313.               dropdownbuttonControle = 0;
  314.               cardControle = 1;
  315.               tempoIniciado = true;
  316.               textoBotaoPlay = "Pausar";
  317.             });
  318.             startWatch();
  319.  
  320.             _handleOnPressed();
  321.           } else {
  322.             setState(() {
  323.               textoBotaoPlay = "Iniciar";
  324.               tempoIniciado = false;
  325.             });
  326.             _handleOnPressed();
  327.             stopWatch();
  328.           }
  329.         } else {
  330.           Scaffold.of(context).showSnackBar(
  331.               SnackBar(content: Text("Voce nao selecionou a materia")));
  332.         }
  333.       }
  334.     };
  335.   }
  336.  
  337.   Function onpressedParar() {
  338.     return () {
  339.       if (tempoIniciado != false) {
  340.         setState(() {
  341.           textoBotaoPlay = "Iniciar";
  342.           tempoIniciado = false;
  343.         });
  344.         _handleOnPressed();
  345.         stopWatch();
  346.       }
  347.     };
  348.   }
  349.  
  350.   Function onpressedReiniciar() {
  351.     return () {
  352.       showDialog<String>(
  353.         context: context,
  354.         barrierDismissible:
  355.             true, // dialog is dismissible with a tap on the barrier
  356.         builder: (BuildContext context) {
  357.           return AlertDialog(
  358.             // CONCLUIR.....
  359.             title: Text(
  360.               'Tem certeza que quer reiniciar o tempo?',
  361.               style: TextStyle(fontSize: 15),
  362.             ),
  363.             actions: <Widget>[
  364.               FlatButton(
  365.                 child: Text(
  366.                   'Não',
  367.                   style: TextStyle(fontSize: 15),
  368.                 ),
  369.                 onPressed: () {
  370.                   Navigator.of(context).pop();
  371.                 },
  372.               ),
  373.               FlatButton(
  374.                 child: Text(
  375.                   'Sim',
  376.                   style: TextStyle(fontSize: 15),
  377.                 ),
  378.                 onPressed: () {
  379.                   resetWatch();
  380.                   if (tempoIniciado == true) {
  381.                     stopWatch();
  382.                     setState(() {
  383.                       textoBotaoPlay = "Iniciar";
  384.                       tempoIniciado = false;
  385.                     });
  386.                     _handleOnPressed();
  387.                   }
  388.                   Navigator.of(context).pop();
  389.                 },
  390.               ),
  391.             ],
  392.           );
  393.         },
  394.       );
  395.     };
  396.   }
  397.  
  398.   Widget espaco() {
  399.     return Padding(
  400.       padding: EdgeInsets.only(bottom: 10),
  401.     );
  402.   }
  403.  
  404.   Function onpressedAvancar() {
  405.     return () {
  406.       if (_formKey.currentState.validate()) {
  407.         if (dropdownValue != null) {
  408.           if (cardControle == 1) {
  409.             if (tempoIniciado == true) {
  410.                     stopWatch();
  411.                     setState(() {
  412.                       textoBotaoPlay = "Iniciar";
  413.                       tempoIniciado = false;
  414.                     });
  415.                     _handleOnPressed();
  416.             }
  417.             Navigator.of(context).push(
  418.                 MaterialPageRoute(builder: (context) => HomeEstudarFinal()));
  419.           } else {
  420.             _scaffoldKey.currentState.showSnackBar(
  421.                 SnackBar(content: Text("Voce nao iniciou seu tempo")));
  422.           }
  423.         } else {
  424.           _scaffoldKey.currentState.showSnackBar(
  425.               SnackBar(content: Text("Voce nao selecionou a materia")));
  426.         }
  427.       }
  428.     };
  429.   }
  430.  
  431.   Widget selecionaMateria() {
  432.     return Container(
  433.       decoration: BoxDecoration(
  434.         border: Border.all(width: 0.1),
  435.         color: Colors.white,
  436.       ),
  437.       child: DropdownButtonHideUnderline(
  438.           child: ButtonTheme(
  439.         alignedDropdown: true,
  440.         child: DropdownButton<String>(
  441.           isExpanded: true,
  442.           hint: new Text(
  443.             textoMenu,
  444.             style: TextStyle(color: Colors.black, fontSize: 15.0),
  445.           ),
  446.           value: dropdownValue,
  447.           onChanged: dropdownbuttonControle > 1
  448.               ? (newValue) {
  449.                   setState(() {
  450.                     dropdownValue = newValue;
  451.                   });
  452.                 }
  453.               : null,
  454.           items: materia.map<DropdownMenuItem<String>>((String value) {
  455.             return DropdownMenuItem<String>(
  456.               value: value,
  457.               child: Text(
  458.                 value,
  459.                 style: TextStyle(color: Colors.black, fontSize: 15.0),
  460.               ),
  461.             );
  462.           }).toList(),
  463.         ),
  464.       )),
  465.     );
  466.   }
  467.  
  468.   Widget digitaAssunto() {
  469.     return Form(
  470.       key: _formKey,
  471.       child: Column(
  472.         crossAxisAlignment: CrossAxisAlignment.start,
  473.         children: <Widget>[
  474.           Text(
  475.             "Digite o assunto que está estudando",
  476.             style: TextStyle(fontSize: 15),
  477.           ),
  478.           TextFormField(
  479.             controller: _assuntoController,
  480.             maxLength: 70,
  481.             enabled: assuntoControle,
  482.             key: Key('Assunto'),
  483.             style: TextStyle(color: Colors.black, fontSize: 15.0),
  484.             validator: (value) {
  485.               // verificar alerta de erro
  486.               if (value.isEmpty) {
  487.                 return 'Por favor digite o assunto';
  488.               } else {
  489.                 setState(() {
  490.                   assunto = value;
  491.                 });
  492.               }
  493.             },
  494.             onSaved: (value) {
  495.               setState(() {
  496.                 assunto = value;
  497.               });
  498.             },
  499.           ),
  500.         ],
  501.       ),
  502.     );
  503.   }
  504.  
  505.   Widget diaEstudo() {
  506.     return GestureDetector(
  507.       onTap: onpressedData(),
  508.       child: Container(
  509.         alignment: Alignment.center,
  510.         //height: 50.0,
  511.         child: Row(
  512.           mainAxisAlignment: MainAxisAlignment.spaceBetween,
  513.           children: <Widget>[
  514.             Row(
  515.               children: <Widget>[
  516.                 Container(
  517.                   child: Row(
  518.                     children: <Widget>[
  519.                       Icon(
  520.                         Icons.date_range,
  521.                         size: 15.0,
  522.                         color: Colors.black,
  523.                       ),
  524.                       Text(
  525.                         " Dia: $_date",
  526.                         style: TextStyle(color: Colors.black, fontSize: 15.0),
  527.                       ),
  528.                     ],
  529.                   ),
  530.                 )
  531.               ],
  532.             ),
  533.             Text(
  534.               "  Trocar",
  535.               style: TextStyle(color: Colors.black, fontSize: 15.0),
  536.             ),
  537.           ],
  538.         ),
  539.       ),
  540.     );
  541.   }
  542.  
  543.   Widget botaoParar() {
  544.     return Column(
  545.       //BOTAO PARAR
  546.       children: <Widget>[
  547.         Padding(
  548.           padding: EdgeInsets.only(bottom: 50),
  549.         ),
  550.         SizedBox(
  551.           width: 40,
  552.           height: 40,
  553.           child: new FloatingActionButton(
  554.               heroTag: 'teste1',
  555.               elevation: 5,
  556.               backgroundColor: Colors.white,
  557.               onPressed: onpressedParar(),
  558.               child: new Icon(
  559.                 Icons.stop,
  560.                 color: Colors.black,
  561.                 size: 20,
  562.               )),
  563.         ),
  564.         Padding(
  565.           padding: EdgeInsets.only(bottom: 3),
  566.         ),
  567.         Text(
  568.           "Parar",
  569.           style: TextStyle(fontSize: 12, color: Colors.white),
  570.          
  571.         ),
  572.       ],
  573.     );
  574.   }
  575.  
  576.   Widget botaoIniciar() {
  577.     return Column(
  578.       //BOTAO INICIAR
  579.       children: <Widget>[
  580.         SizedBox(
  581.           height: 60,
  582.           width: 60,
  583.           child: FloatingActionButton(
  584.             heroTag: 'teste2',
  585.             elevation: 5,
  586.             backgroundColor: Colors.white,
  587.             child: AnimatedIcon(
  588.               icon: AnimatedIcons.play_pause,
  589.               progress: _animationController,
  590.               size: 35,
  591.               color: Colors.black,
  592.             ),
  593.             onPressed: onpressedIniciar(),
  594.           ),
  595.         ),
  596.         Padding(
  597.           padding: EdgeInsets.only(bottom: 3),
  598.         ),
  599.         Text(
  600.           textoBotaoPlay,
  601.           style: TextStyle(fontSize: 14, color: Colors.white),
  602.         ),
  603.       ],
  604.     );
  605.   }
  606.  
  607.   Widget botaoReiniciar() {
  608.     return Column(
  609.       //BOTAO REINICIAR
  610.       children: <Widget>[
  611.         Padding(
  612.           padding: EdgeInsets.only(bottom: 50),
  613.         ),
  614.         SizedBox(
  615.           width: 40,
  616.           height: 40,
  617.           child: new FloatingActionButton(
  618.               heroTag: 'teste3',
  619.               elevation: 5,
  620.               backgroundColor: Colors.white,
  621.               onPressed: onpressedReiniciar(),
  622.               child: new Icon(
  623.                 Icons.refresh,
  624.                 color: Colors.black,
  625.                 size: 20,
  626.               )),
  627.         ),
  628.         Padding(
  629.           padding: EdgeInsets.only(bottom: 3),
  630.         ),
  631.         Text(
  632.           "Reiniciar",
  633.           style: TextStyle(fontSize: 12, color: Colors.white),
  634.         ),
  635.       ],
  636.     );
  637.   }
  638.  
  639.   Widget botaoLembrete() {
  640.     return RaisedButton(
  641.       color: Colors.white,
  642.       child: Text("Definir Lembrete",
  643.           style: TextStyle(fontSize: 15, color: Colors.black87)),
  644.       onPressed: onpressedLembrete(),
  645.     );
  646.   }
  647.  
  648.   Widget botaoTempoManual() {
  649.     return RaisedButton(
  650.         color: Colors.white,
  651.         child: Text("Tempo Manual",
  652.             style: TextStyle(fontSize: 15, color: Colors.black87)),
  653.         onPressed: onpressedTempoManual());
  654.   }
  655.  
  656.  
  657.  
  658. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top