diff --git a/lib/main.dart b/lib/main.dart index eae6cd0..a38a0e9 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -13,7 +13,7 @@ class MyApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, - title: 'Controle de Acesso', + title: 'CONTROLE DE ACESSO', home: LoginScreen(), ); } diff --git a/lib/screens/home_screen.dart b/lib/screens/home_screen.dart index 55a1f30..fbafb79 100644 --- a/lib/screens/home_screen.dart +++ b/lib/screens/home_screen.dart @@ -2,8 +2,8 @@ import 'package:educa_controle_acesso/utils/colors.dart'; import 'package:educa_controle_acesso/widgets/input_text.dart'; import 'package:educa_controle_acesso/widgets/text_custom.dart'; import 'package:flutter/material.dart'; - import '../models/aluno_model.dart'; +import '../widgets/buttom_custom.dart'; import '../widgets/dados_alunos_container.dart'; class HomeScreen extends StatefulWidget { @@ -18,10 +18,18 @@ class _HomeScreenState extends State { var controllerPesquisa = TextEditingController(); List alunos = []; List resultadoPesquisa = []; + bool filtroEstudante = false; + bool filtroData = false; + bool filtroRA = false; + bool filtroSerie = false; + bool filtroTurma = false; + bool filtroEscola = false; carregarAlunos(){ - alunos.add(AlunoModel(nome: 'Maria da Silva', data_nasc: '01/01/2010', ra: '000.000.000-8', escola: 'EMEI Profª Therezinha de Jesus Alguz', serie: '8', turma: 'A')); - alunos.add(AlunoModel(nome: 'Pedro Costa Almeida', data_nasc: '01/01/2015', ra: '111.111.111-5', escola: 'EMEI Profª Enestina Loureiro Miranda', serie: '7', turma: 'C')); + alunos=[ + AlunoModel(nome: 'Maria da Silva', data_nasc: '01/01/2010', ra: '000.000.000-8', escola: 'EMEI Profª Therezinha de Jesus Alguz', serie: '8', turma: 'A'), + AlunoModel(nome: 'Pedro Costa Almeida', data_nasc: '01/01/2015', ra: '111.111.111-5', escola: 'EMEI Profª Enestina Loureiro Miranda', serie: '7', turma: 'C') + ]; pesquisarAluno(); } @@ -47,8 +55,14 @@ class _HomeScreenState extends State { } } }else{ - for(int i = 0;i<10;i++){ - resultadoPesquisa.add(alunos[i]); + if(alunos.length<10){ + for(int i = 0;i { Container( child: Image.asset("assets/images/logoEduca.png",width:width * 0.08,height: height * 0.12) ), - TextCustom(text: '- Pesquisar aluno',color: Colors.white,), + TextCustom(text: '- PESQUISAR ALUNO',color: Colors.white,), ], ), backgroundColor: PaletteColors.grey, @@ -85,20 +99,169 @@ class _HomeScreenState extends State { children: [ SizedBox(height: height*0.05), Padding( - padding: EdgeInsets.symmetric(horizontal: width>900?width*0.3:width*0.05), - child: InputText(controller: controllerPesquisa, width: width*0.2,title: 'Pesquisar Aluno(a)',inputFormatters: [],) + padding: EdgeInsets.symmetric(horizontal: width>900?width*0.15:width*0.05), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + InputText( + hint: 'Pesquisar por estudante, RA ou data de nascimento'.toUpperCase(), + controller: controllerPesquisa, + width: width*0.25, + inputFormatters: [], + fontSize: 12, + colorBackground: Colors.white, + ), + ButtonCustom( + widthCustom: 0.05, + heightCustom: 0.063, + text: "LIMPAR", + size: 10.0, + colorText: PaletteColors.white, + colorButton: PaletteColors.primaryColor, + colorBorder: PaletteColors.primaryColor, + onPressed: ()=>setState(()=>controllerPesquisa.clear()), + ) + ], + ) ), Container( - padding: EdgeInsets.symmetric(horizontal: width>900?width*0.3:width*0.05), + margin: EdgeInsets.symmetric(vertical: 20), + padding: EdgeInsets.symmetric(horizontal: width>900?width*0.15:width*0.05), + width: width, + alignment: Alignment.center, + child: Row( + children: [ + Container( + width: width*0.2, + child: Row( + children: [ + TextCustom(text: 'ESTUDANTE',size: 12,fontWeight: FontWeight.bold,color: Colors.black87,), + IconButton( + icon: Icon(filtroEstudante?Icons.arrow_drop_up:Icons.arrow_drop_down,color: filtroEstudante?PaletteColors.primaryColor:PaletteColors.grey,), + onPressed: ()=>setState((){ + filtroEstudante?filtroEstudante=false:filtroEstudante=true; + filtroData = false; + filtroRA = false; + filtroSerie = false; + filtroTurma = false; + filtroEscola = false; + }), + ) + ], + ) + ), + Container( + width: width*0.1, + child: Row( + children: [ + TextCustom(text: 'DATA DE NASCIMENTO',size: 12,fontWeight: FontWeight.bold,color: Colors.black87,), + IconButton( + icon: Icon(filtroData?Icons.arrow_drop_up:Icons.arrow_drop_down,color: filtroData?PaletteColors.primaryColor:PaletteColors.grey,), + onPressed: ()=>setState((){ + filtroData?filtroData=false:filtroData=true; + filtroEstudante = false; + filtroRA = false; + filtroSerie = false; + filtroTurma = false; + filtroEscola = false; + }), + ) + ], + ) + ), + Container( + width: width*0.08, + child: Row( + children: [ + TextCustom(text: 'RA',size: 12,fontWeight: FontWeight.bold,color: Colors.black87,), + IconButton( + icon: Icon(filtroRA?Icons.arrow_drop_up:Icons.arrow_drop_down,color: filtroRA?PaletteColors.primaryColor:PaletteColors.grey,), + onPressed: ()=>setState((){ + filtroRA?filtroRA=false:filtroRA=true; + filtroData = false; + filtroEstudante = false; + filtroSerie = false; + filtroTurma = false; + filtroEscola = false; + }), + ) + ], + ) + ), + Container( + width: width*0.05, + child: Row( + children: [ + TextCustom(text: 'Série',size: 12,fontWeight: FontWeight.bold,color: Colors.black87,), + IconButton( + icon: Icon(filtroSerie?Icons.arrow_drop_up:Icons.arrow_drop_down,color: filtroSerie?PaletteColors.primaryColor:PaletteColors.grey,), + onPressed: ()=>setState((){ + filtroSerie?filtroSerie=false:filtroSerie=true; + filtroData = false; + filtroRA = false; + filtroEstudante = false; + filtroTurma = false; + filtroEscola = false; + }), + ) + ], + ) + ), + Container( + width: width*0.05, + child: Row( + children: [ + TextCustom(text: 'Turma',size: 12,fontWeight: FontWeight.bold,color: Colors.black87,), + IconButton( + icon: Icon(filtroTurma?Icons.arrow_drop_up:Icons.arrow_drop_down,color: filtroTurma?PaletteColors.primaryColor:PaletteColors.grey,), + onPressed: ()=>setState((){ + filtroTurma?filtroTurma=false:filtroTurma=true; + filtroData = false; + filtroRA = false; + filtroSerie = false; + filtroEstudante = false; + filtroEscola = false; + }), + ) + ], + ) + ), + Container( + width: width*0.15, + child: Row( + children: [ + TextCustom(text: 'Escola',size: 12,fontWeight: FontWeight.bold,color: Colors.black87,), + IconButton( + icon: Icon(filtroEscola?Icons.arrow_drop_up:Icons.arrow_drop_down,color: filtroEscola?PaletteColors.primaryColor:PaletteColors.grey,), + onPressed: ()=>setState((){ + filtroEscola?filtroEscola=false:filtroEscola=true; + filtroData = false; + filtroRA = false; + filtroSerie = false; + filtroTurma = false; + filtroEstudante = false; + }), + ) + ], + ) + ), + ], + ), + ), + Container( + padding: EdgeInsets.symmetric(horizontal: width>900?width*0.15:width*0.05), width: width*0.5, - height: height*0.5, + height: height*0.8, child: ListView.separated( separatorBuilder: (context,index){ return Divider(); }, itemCount: resultadoPesquisa.length, itemBuilder:(context,index){ - return DadosAlunosContainer(alunoModel: resultadoPesquisa[index],); + + final items = filtroEstudante||filtroData||filtroRA||filtroSerie||filtroTurma||filtroEscola?resultadoPesquisa.reversed.toList():resultadoPesquisa; + + return DadosAlunosContainer(alunoModel: items[index]); } ), ) diff --git a/lib/screens/login_screen.dart b/lib/screens/login_screen.dart index 9ed035f..3f9c498 100644 --- a/lib/screens/login_screen.dart +++ b/lib/screens/login_screen.dart @@ -96,7 +96,7 @@ class _LoginScreenState extends State { child: InputText( inputFormatters: [], controller: inputLogin, - title: 'Login', + title: 'LOGIN', width: width>900? width * 0.18:width*0.5, colorBorder: PaletteColors.white, ), @@ -107,7 +107,7 @@ class _LoginScreenState extends State { child: InputText( inputFormatters: [], controller: inputSenha, - title: 'Senha', + title: 'SENHA', obscure: true, width: width * 0.18, colorBorder: PaletteColors.white, @@ -119,12 +119,12 @@ class _LoginScreenState extends State { children: [ CircularProgressIndicator(), SizedBox(width: 20,), - TextCustom(text: 'Validando Acesso...') + TextCustom(text: 'VALIDANDO ACESSO...') ], ):ButtonCustom( widthCustom: 0.1, heightCustom: 0.07, - text: "Entrar", + text: "ENTRAR", size: 14.0, colorText: PaletteColors.white, colorButton: PaletteColors.primaryColor, diff --git a/lib/screens/responsible_register_screen.dart b/lib/screens/responsible_register_screen.dart index c812577..7bef538 100644 --- a/lib/screens/responsible_register_screen.dart +++ b/lib/screens/responsible_register_screen.dart @@ -8,6 +8,7 @@ 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'; @@ -114,12 +115,22 @@ class _ResponsibleRegisterScreenState extends State { body: Padding( padding: const EdgeInsets.all(30.0), child: Column( - crossAxisAlignment: CrossAxisAlignment.start, children: [ - TextCustom(text: 'Aluno(a): ${widget.alunoModel.nome}'), - TextCustom(text: 'Turma: ${widget.alunoModel.serie}° ANO ${widget.alunoModel.turma}'), - TextCustom(text: 'RA: ${widget.alunoModel.ra}'), - TextCustom(text: 'Escola: ${widget.alunoModel.escola}'), + 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: [ @@ -250,34 +261,35 @@ class _ResponsibleRegisterScreenState extends State { ), ):Container(), showRegister?Container():Container( - width: width*0.3, + alignment: Alignment.centerLeft, + width: width, height: height*0.3, child: ListView.separated( - itemCount: responsaveis.length, - separatorBuilder: (context,index){ - return Divider(); - }, - itemBuilder: (context,index){ - return DadosResponsaveisContainer( - responsavelModel: responsaveis[index], - onTapEdit: (){ - showRegister = true; - editando = true; - indice = index; - inputNome.text = responsaveis[index].nomeResponsavel; - inputParentesco.text = responsaveis[index].parentesco; - inputCpf.text = responsaveis[index].cpf; - inputSenha.text = responsaveis[index].senha; - inputData.text = responsaveis[index].dataCadastro; - setState(() {}); - }, - onTapDelete: (){ - responsaveis.removeAt(index); - setState(() {}); - showSnackBar(context, 'Responsável deletado!', Colors.green); - }, - ); - } + itemCount: responsaveis.length, + separatorBuilder: (context,index){ + return Divider(); + }, + itemBuilder: (context,index){ + return DadosResponsaveisContainer( + responsavelModel: responsaveis[index], + onTapEdit: (){ + showRegister = true; + editando = true; + indice = index; + inputNome.text = responsaveis[index].nomeResponsavel; + inputParentesco.text = responsaveis[index].parentesco; + inputCpf.text = responsaveis[index].cpf; + inputSenha.text = responsaveis[index].senha; + inputData.text = responsaveis[index].dataCadastro; + setState(() {}); + }, + onTapDelete: (){ + responsaveis.removeAt(index); + setState(() {}); + showSnackBar(context, 'Responsável deletado!', Colors.green); + }, + ); + } ), ), ], diff --git a/lib/widgets/caixa_texto_container.dart b/lib/widgets/caixa_texto_container.dart new file mode 100644 index 0000000..ac3f844 --- /dev/null +++ b/lib/widgets/caixa_texto_container.dart @@ -0,0 +1,39 @@ +import 'package:educa_controle_acesso/widgets/text_custom.dart'; +import 'package:flutter/material.dart'; +import '../utils/colors.dart'; + +class CaixaTextoContainer extends StatelessWidget { + String texto; + String titulo; + double widthCustom; + + CaixaTextoContainer({ + required this.texto, + required this.titulo, + this.widthCustom = 0.2 +}); + + @override + Widget build(BuildContext context) { + double width = MediaQuery.of(context).size.width; + return Container( + margin: EdgeInsets.all(5), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + TextCustom(text: titulo,size: 12,), + Container( + child: TextCustom(text: texto), + width: width*widthCustom, + padding: EdgeInsets.all(5), + decoration: BoxDecoration( + color: PaletteColors.greyInput, + borderRadius: BorderRadius.circular(3), + border: Border.all(color: PaletteColors.lightGrey) + ), + ), + ], + ), + ); + } +} diff --git a/lib/widgets/dados_alunos_container.dart b/lib/widgets/dados_alunos_container.dart index ec2a6fa..ac8abb9 100644 --- a/lib/widgets/dados_alunos_container.dart +++ b/lib/widgets/dados_alunos_container.dart @@ -3,6 +3,7 @@ import 'package:educa_controle_acesso/screens/responsible_register_screen.dart'; import 'package:educa_controle_acesso/widgets/text_custom.dart'; import 'package:flutter/material.dart'; import '../utils/colors.dart'; +import 'caixa_texto_container.dart'; class DadosAlunosContainer extends StatelessWidget { @@ -14,7 +15,11 @@ class DadosAlunosContainer extends StatelessWidget { @override Widget build(BuildContext context) { + + double width = MediaQuery.of(context).size.width; + return InkWell( + hoverColor: PaletteColors.lightGrey, onTap: (){ Navigator.push( context, @@ -22,34 +27,37 @@ class DadosAlunosContainer extends StatelessWidget { ); }, child: Container( - padding: EdgeInsets.symmetric(vertical: 10,horizontal: 5), + padding: EdgeInsets.symmetric(vertical: 10,horizontal: 0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - TextCustom( - text: 'Nome: '+alunoModel.nome, - color: PaletteColors.grey, - size: 20, - ), - TextCustom( - text: 'Data de Nascimento: '+alunoModel.data_nasc, - color: PaletteColors.grey, - size: 15, - ), - TextCustom( - text: 'RA: '+alunoModel.ra, - color: PaletteColors.grey, - size: 15, - ), - TextCustom( - text: 'Turma: '+alunoModel.serie+'° ANO '+alunoModel.turma, - color: PaletteColors.grey, - size: 15, - ), - TextCustom( - text: 'Escola: '+alunoModel.escola, - color: PaletteColors.grey, - size: 15, + Row( + children: [ + Container( + width: width*0.2, + child: TextCustom(text: alunoModel.nome.toUpperCase()) + ), + Container( + width: width*0.1, + child: TextCustom(text: alunoModel.data_nasc.toUpperCase()) + ), + Container( + width: width*0.08, + child: TextCustom(text: alunoModel.ra.toUpperCase()) + ), + Container( + width: width*0.05, + child: TextCustom(text: alunoModel.serie.toUpperCase()+'°') + ), + Container( + width: width*0.05, + child: TextCustom(text: alunoModel.turma.toUpperCase()) + ), + Container( + width: width*0.20, + child: TextCustom(text: alunoModel.escola.toUpperCase()) + ), + ], ), ], ), diff --git a/lib/widgets/dados_responsaveis_container.dart b/lib/widgets/dados_responsaveis_container.dart index e98a309..8723c73 100644 --- a/lib/widgets/dados_responsaveis_container.dart +++ b/lib/widgets/dados_responsaveis_container.dart @@ -4,6 +4,7 @@ import 'package:educa_controle_acesso/screens/responsible_register_screen.dart'; import 'package:educa_controle_acesso/widgets/text_custom.dart'; import 'package:flutter/material.dart'; import '../utils/colors.dart'; +import 'caixa_texto_container.dart'; class DadosResponsaveisContainer extends StatelessWidget { @@ -31,12 +32,13 @@ class DadosResponsaveisContainer extends StatelessWidget { icon: Icon(Icons.delete,color: PaletteColors.grey,), ), Container( - width: width*0.15, + width: width*0.35, padding: EdgeInsets.symmetric(vertical: 10,horizontal: 5), - child: TextCustom( - text: '${responsavelModel.nomeResponsavel}, ${responsavelModel.parentesco}', - color: PaletteColors.grey, - size: 15, + child: Row( + children: [ + CaixaTextoContainer(texto: responsavelModel.nomeResponsavel,titulo: 'Nome',widthCustom: 0.15), + CaixaTextoContainer(texto: responsavelModel.parentesco,titulo: 'Parentesco',widthCustom: 0.1,), + ], ), ), ], diff --git a/lib/widgets/input_text.dart b/lib/widgets/input_text.dart index 48fd52a..e7de370 100644 --- a/lib/widgets/input_text.dart +++ b/lib/widgets/input_text.dart @@ -1,4 +1,5 @@ import 'package:educa_controle_acesso/utils/colors.dart'; +import 'package:educa_controle_acesso/widgets/text_custom.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -7,10 +8,12 @@ class InputText extends StatelessWidget { var controller; double fontSize; String title; + String hint; double width; TextInputType textInputType; int maxLines; Color colorBorder; + Color colorBackground; var onChanged; bool enable; List inputFormatters; @@ -21,9 +24,11 @@ class InputText extends StatelessWidget { this.obscure = false, this.fontSize = 15.0, this.title = '', + this.hint = '', this.textInputType = TextInputType.text, this.maxLines = 1, this.colorBorder = PaletteColors.grey, + this.colorBackground = PaletteColors.greyInput, this.onChanged = null, this.enable = true, required this.inputFormatters @@ -31,47 +36,54 @@ class InputText extends StatelessWidget { @override Widget build(BuildContext context) { - return Container( - color:PaletteColors.greyInput, - width: width, - margin: EdgeInsets.only(bottom: 5), - child: TextFormField( - inputFormatters: inputFormatters, - keyboardType: textInputType, - maxLines: maxLines, - onChanged: onChanged, - obscureText: this.obscure, - controller: this.controller, - enabled: enable, - style: TextStyle( - color: Colors.black, - fontSize: this.fontSize, - fontFamily: 'Nunito' + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + TextCustom(text: title,size: 10), + Container( + color:colorBackground, + width: width, + margin: EdgeInsets.only(bottom: 5), + child: TextFormField( + inputFormatters: inputFormatters, + keyboardType: textInputType, + maxLines: maxLines, + onChanged: onChanged, + obscureText: this.obscure, + controller: this.controller, + enabled: enable, + style: TextStyle( + color: Colors.black, + fontSize: this.fontSize, + fontFamily: 'Nunito' + ), + decoration: InputDecoration( + // fillColor: PaletteColors.primaryColor, + // labelText: title, + border: OutlineInputBorder( + borderSide: BorderSide(width: 1,color: colorBorder) + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(width: 1, color: colorBorder), + borderRadius: BorderRadius.circular(3), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(width: 1, color: colorBorder), + borderRadius: BorderRadius.circular(3), + ), + disabledBorder: OutlineInputBorder( + borderSide: BorderSide(width: 1, color: colorBorder), + borderRadius: BorderRadius.circular(3), + ), + hintText: hint, + hintStyle: TextStyle( + color: PaletteColors.grey, + fontSize: this.fontSize, + ) + ) + ), ), - decoration: InputDecoration( - // fillColor: PaletteColors.primaryColor, - labelText: title, - border: OutlineInputBorder( - borderSide: BorderSide(width: 1,color: colorBorder) - ), - focusedBorder: OutlineInputBorder( - borderSide: BorderSide(width: 1, color: colorBorder), - borderRadius: BorderRadius.circular(3), - ), - enabledBorder: OutlineInputBorder( - borderSide: BorderSide(width: 1, color: colorBorder), - borderRadius: BorderRadius.circular(3), - ), - disabledBorder: OutlineInputBorder( - borderSide: BorderSide(width: 1, color: colorBorder), - borderRadius: BorderRadius.circular(3), - ), - hintStyle: TextStyle( - color: Colors.black, - fontSize: this.fontSize, - ) - ) - ), + ], ); } }