import 'dart:convert'; import 'package:brasil_fields/brasil_fields.dart'; import 'package:educa_controle_acesso/models/aluno_model.dart'; import 'package:educa_controle_acesso/models/responsavel_model.dart'; import 'package:educa_controle_acesso/widgets/dados_responsaveis_container.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; import 'package:intl/intl.dart'; import '../utils/colors.dart'; import '../widgets/buttom_custom.dart'; import '../widgets/caixa_texto_container.dart'; import '../widgets/input_text.dart'; import '../widgets/snackBars.dart'; import '../widgets/text_custom.dart'; import 'package:http/http.dart' as http; class ResponsibleRegisterScreen extends StatefulWidget { AlunoModel alunoModel; ResponsibleRegisterScreen(this.alunoModel); @override State createState() => _ResponsibleRegisterScreenState(); } class _ResponsibleRegisterScreenState extends State { List responsaveis = []; bool showRegister = false; bool editando = false; int? indice; var inputNome = TextEditingController(); var inputParentesco = TextEditingController(); var inputCpf = TextEditingController(); var inputSenha = TextEditingController(); var inputData = TextEditingController(); bool carregando = true; inserirDB()async{ final url = 'http://localhost:8000/inserirpais'; final response = await http.post( Uri.parse(url), body:{ 'CD_ALUNO' : widget.alunoModel.dados['CD_ALUNO'], 'CPF': inputCpf.text, 'NOME' : inputNome.text, 'SENHA' : inputSenha.text, 'PARENTESCO' : inputParentesco.text, 'DATA_CADASTRO' : DateFormat('dd/MM/yyyy HH:mm').format(DateTime.now()), 'CONDICAO' : editando?'EDITADO':'NOVO' } ); print(response.body); if(response.body == 'cadastrado com sucesso' || response.body == 'editado com sucesso'){ editando? showSnackBar(context, 'Responsável alterado!', Colors.green): showSnackBar(context, 'Responsável adicionado!', Colors.green); if(editando && indice!=null){ responsaveis[indice!] = ResponsavelModel( CD_ALUNO: widget.alunoModel.dados['CD_ALUNO'], NOME: inputNome.text, PARENTESCO: inputParentesco.text, CPF: inputCpf.text, SENHA: inputSenha.text, DATA_CADASTRO: DateFormat('dd/MM/yyyy HH:mm').format(DateTime.now()), CONDICAO: '' ); }else{ responsaveis.add( ResponsavelModel( CD_ALUNO: widget.alunoModel.dados['CD_ALUNO'], NOME: inputNome.text.toUpperCase(), PARENTESCO: inputParentesco.text.toUpperCase(), CPF: inputCpf.text, SENHA: inputSenha.text.toUpperCase(), DATA_CADASTRO: DateFormat('dd/MM/yyyy HH:mm').format(DateTime.now()), CONDICAO: '' ) ); } inputNome.clear(); inputParentesco.clear(); inputCpf.clear(); inputSenha.clear(); showRegister = false; editando = false; indice = null; inputData.clear(); paisBanco(); setState((){}); }else{ carregando = false; setState((){}); showSnackBar(context, 'Erro ao fazer o registro, verifique os dados do usuário', Colors.red); } } salvarResponsavel() { if(inputNome.text.isNotEmpty && inputNome.text.contains(' ')){ if(inputParentesco.text.isNotEmpty){ if(inputCpf.text.isNotEmpty && GetUtils.isCpf(inputCpf.text)){ if(inputSenha.text.isNotEmpty && inputSenha.text.length > 5){ setState(() { carregando = true; }); inserirDB(); }else{ showSnackBar(context, 'Insira o uma senha com o mínimo de 6 caracteres', Colors.red); } }else{ showSnackBar(context, 'CPF inválido', Colors.red); } }else{ showSnackBar(context, 'Insira o parentesco do responsável', Colors.red); } }else{ showSnackBar(context, 'Insira o nome completo do responsável', Colors.red); } } carregaPais(var map){ responsaveis.clear(); List list = map; if(widget.alunoModel.dados['NO_PAI']!=''){ responsaveis.add( ResponsavelModel( CD_ALUNO: widget.alunoModel.dados['CD_ALUNO'], NOME: widget.alunoModel.dados['NO_PAI'], PARENTESCO: 'PAI', CPF: '', SENHA: '', DATA_CADASTRO: DateFormat('dd/MM/yyyy HH:mm').format(DateTime.now()), CONDICAO: '' ) ); } if(widget.alunoModel.dados['NO_MAE']!=''){ responsaveis.add( ResponsavelModel( CD_ALUNO: widget.alunoModel.dados['CD_ALUNO'], NOME: widget.alunoModel.dados['NO_MAE'], PARENTESCO: 'MAE', CPF: '', SENHA: '', DATA_CADASTRO: DateFormat('dd/MM/yyyy HH:mm').format(DateTime.now()), CONDICAO: '' ) ); } //fazer if comparando os parentescos para não duplicar e não falta pais for(int i = 0; list.length>i;i++){ if(list[i]['PARENTESCO'].toString().toUpperCase()=='PAI'){ responsaveis[0]= ResponsavelModel( CD_ALUNO: list[i]['CD_ALUNO']??'', NOME: list[i]['NOME']??'', PARENTESCO: list[i]['PARENTESCO']??'', CPF: list[i]['CPF']??'', SENHA: list[i]['SENHA']??'', DATA_CADASTRO: list[i]['DATA_CADASTRO']??'', CONDICAO: list[i]['CONDICAO']??'' ); }else if (list[i]['PARENTESCO'].toString().toUpperCase()=='MAE' ||list[i]['PARENTESCO'].toString().toUpperCase()=='MÃE'){ responsaveis[1]= ResponsavelModel( CD_ALUNO: list[i]['CD_ALUNO']??'', NOME: list[i]['NOME'].toString().toUpperCase()??'', PARENTESCO: list[i]['PARENTESCO'].toString().toUpperCase()??'', CPF: list[i]['CPF'].toString().toUpperCase()??'', SENHA: list[i]['SENHA'].toString().toUpperCase()??'', DATA_CADASTRO: list[i]['DATA_CADASTRO'].toString().toUpperCase()??'', CONDICAO: list[i]['CONDICAO']??'' ); }else{ responsaveis.add( ResponsavelModel( CD_ALUNO: list[i]['CD_ALUNO']??'', NOME: list[i]['NOME'].toString().toUpperCase()??'', PARENTESCO: list[i]['PARENTESCO'].toString().toUpperCase()??'', CPF: list[i]['CPF'].toString().toUpperCase()??'', SENHA: list[i]['SENHA'].toString().toUpperCase()??'', DATA_CADASTRO: list[i]['DATA_CADASTRO'].toString().toUpperCase()??'', CONDICAO: list[i]['CONDICAO']??'' ) ); } } carregando = false; setState(() {}); } paisBanco()async{ final url = 'http://localhost:8000/pais?CD_ALUNO=${widget.alunoModel.dados['CD_ALUNO']}'; // print(url); final response = await http.get(Uri.parse(url)); var map = json.decode(response.body); // print(map); carregaPais(map); } excluirResponsavel(int index, String cpf)async{ Navigator.pop(context); setState(() { carregando = true; }); final url = 'http://localhost:8000/deleta?CPF=$cpf'; // print(url); final response = await http.get(Uri.parse(url)); // print(response.body); if(response.body == 'deletado com sucesso'){ responsaveis.removeAt(index); carregando = false; setState(() {}); showSnackBar(context, 'Responsável deletado!', Colors.green); } } @override void initState() { super.initState(); paisBanco(); } @override Widget build(BuildContext context) { double width = MediaQuery.of(context).size.width; double height = MediaQuery.of(context).size.height; return Scaffold( appBar: AppBar( title: Row( children: [ Container( child: Image.asset("assets/images/logoEduca.png",width:width * 0.08,height: height * 0.12) ), TextCustom(text: '- Cadastrar Responsável',color: Colors.white,), ], ), backgroundColor: PaletteColors.grey, ), body: carregando?Center( child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ CircularProgressIndicator(), SizedBox(width: 20,), TextCustom(text: 'AGUARDE ...') ], ), ):Padding( padding: const EdgeInsets.all(30.0), child: Column( children: [ Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ CaixaTextoContainer(texto: widget.alunoModel.nome.toUpperCase(),titulo: 'Estudante'), CaixaTextoContainer(texto: widget.alunoModel.serie.toUpperCase()+'°',titulo: 'Série',), CaixaTextoContainer(texto: widget.alunoModel.turma.toUpperCase(),titulo: 'Turma',), ], ), Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ CaixaTextoContainer(texto: widget.alunoModel.ra.toUpperCase(),titulo: 'RA'), CaixaTextoContainer(texto: widget.alunoModel.escola.toUpperCase(),titulo: 'Escola',), ], ), SizedBox(height: 50,), Row( children: [ TextCustom(text: 'Responsáveis Cadastrados:'), IconButton( icon: Icon(Icons.add_circle,color: PaletteColors.primaryColor), onPressed: ()=>setState(()=>showRegister = true), ) ], ), showRegister?Container( alignment: Alignment.center, padding: EdgeInsets.symmetric(horizontal: width*0.35), width: width, child: Card( elevation: 10, child: Padding( padding: EdgeInsets.only(bottom: 20), child: Column( children: [ Container( width: width*0.30, padding: EdgeInsets.all(10), color: Colors.black54, child: TextCustom( text: editando?'Editar responsável':'Novo responsável', color: Colors.white, textAlign: TextAlign.center, ), ), Padding( padding: const EdgeInsets.symmetric(vertical: 15.0), child: TextCustom(text: 'Prencha os campos todos os campos para adicionar.'), ), Container( width: width>900? width * 0.18:width*0.4, child: InputText( inputFormatters: [], controller: inputNome, title: 'Nome Completo', width: width * 0.18, colorBorder: PaletteColors.white, ), ), Container( width: width>900? width * 0.18:width*0.4, child: InputText( inputFormatters: [], controller: inputParentesco, title: 'Parentesco', width: width * 0.18, colorBorder: PaletteColors.white, ), ), Container( width: width>900? width * 0.18:width*0.4, child: InputText( controller: inputCpf, enable: !editando, title: 'CPF', width: width * 0.18, colorBorder: PaletteColors.white, inputFormatters: [ FilteringTextInputFormatter.digitsOnly, CpfInputFormatter(), ], ), ), Container( width: width>900? width * 0.18:width*0.4, child: InputText( inputFormatters: [], controller: inputSenha, title: 'Senha', width: width * 0.18, colorBorder: PaletteColors.white, ), ), editando?Container( width: width>900? width * 0.18:width*0.4, child: InputText( inputFormatters: [], controller: inputData, title: 'Data de Cadastro', width: width * 0.18, colorBorder: PaletteColors.white, enable: false, ), ):Container(), SizedBox(height: 50,), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ ButtonCustom( onPressed:()=>setState((){ showRegister = false; editando = false; indice = null; inputData.clear(); inputNome.clear(); inputParentesco.clear(); inputSenha.clear(); inputCpf.clear(); }), text: 'Cancelar', widthCustom: 0.1, heightCustom: 0.05, colorText: Colors.white, colorBorder: PaletteColors.primaryColor, colorButton: PaletteColors.primaryColor, size: 15, ), SizedBox(width: 50,), ButtonCustom( onPressed:()=>salvarResponsavel(), text: 'Salvar', widthCustom: 0.1, heightCustom: 0.05, colorText: Colors.white, colorBorder: PaletteColors.green, colorButton: PaletteColors.green, size: 15, ) ], ) ], ), ), ), ):Container(), showRegister?Container():Container( alignment: Alignment.centerLeft, width: width, height: height*0.4, child: ListView.separated( itemCount: responsaveis.length, separatorBuilder: (context,index){ return Divider(); }, itemBuilder: (context,index){ return DadosResponsaveisContainer( responsavelModel: responsaveis[index], onTapEdit: (){ showRegister = true; if(responsaveis[index].CONDICAO == 'NOVO' || responsaveis[index].CONDICAO == 'EDITADO'){ editando = true; } indice = index; inputNome.text = responsaveis[index].NOME; inputParentesco.text = responsaveis[index].PARENTESCO; inputCpf.text = responsaveis[index].CPF; inputSenha.text = responsaveis[index].SENHA; inputData.text = responsaveis[index].DATA_CADASTRO; setState(() {}); }, onTapDelete: (){ showDialog( context: context, builder: (BuildContext context){ return AlertDialog( title: TextCustom(text: 'Excluir Responsável'), content: TextCustom(text:'Deseja realmente excluir esse responsável?',), actions: [ ButtonCustom( onPressed:()=>Navigator.pop(context), text: 'NÃO', widthCustom: 0.1, heightCustom: 0.05, colorText: Colors.white, colorBorder: PaletteColors.bgColor, colorButton: PaletteColors.bgColor, size: 15, ), ButtonCustom( onPressed:()=>excluirResponsavel(index, responsaveis[index].CPF), text: 'SIM', widthCustom: 0.1, heightCustom: 0.05, colorText: Colors.white, colorBorder: PaletteColors.primaryColor, colorButton: PaletteColors.primaryColor, size: 15, ), ], ); }); }, ); } ), ), ], ), ) ); } }