esms_project/lib/screens/createEquipment.dart
2021-09-02 08:35:25 -03:00

361 lines
11 KiB
Dart

import 'dart:io';
import 'package:esms_project/client.dart';
import 'package:esms_project/dbhandler.dart';
import 'package:esms_project/electronic.dart';
import 'package:esms_project/mainScreen.dart';
import 'package:esms_project/widgets/widget_button.dart';
import 'package:esms_project/widgets/widget_generate.dart';
import 'package:esms_project/widgets/widget_input.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:intl/intl.dart';
import 'package:path_provider/path_provider.dart';
class CreateEquipment extends StatefulWidget {
Client c;
CreateEquipment({this.c});
@override
_CreateEquipmentState createState() => _CreateEquipmentState();
}
class _CreateEquipmentState extends State<CreateEquipment> {
final values = new List<TextEditingController>.generate(
9, (_) => TextEditingController());
List<String> imagens = [];
List<Map<String, dynamic>> clients;
Client c;
bool _client = true;
bool _justregistered = false;
File _image;
final _formEq = GlobalKey<FormState>();
final _formCli = GlobalKey<FormState>();
@override
void setState(fn) {
if(mounted) {
super.setState(fn);
}
}
@override
void initState() {
c = widget.c == null? null: widget.c;
if(c != null)
{
_client = true;
_justregistered = true;
values[3].text = c.name;
}
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Adicionar Aparelho"),
),
body: _layout());
}
_layout() {
return Container(
padding: EdgeInsets.all(20),
height: double.infinity,
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
RichText(
text: TextSpan(
style: TextStyle(
color: Colors.black,
fontSize: 20,
fontStyle: FontStyle.normal,
fontWeight: FontWeight.w600),
text: "Preencha este formulário com informações do aparelho.",
),
textAlign: TextAlign.center,
),
Form(
key: _formEq,
child: Column(
children: [
InputValidado(
"Nome do Aparelho",
"Ex.: Radio XYZ",
controller: values[0],
),
InputValidado(
"Problema apresentado",
"Ex.: Tela quebrada",
controller: values[1],
),
InputTextos(
"Observações",
"Ex.: Vem com cabos",
controller: values[2],
),
InputData(
"Data de Entrada",
"Ex. " + DateFormat.yMd().format(DateTime.now()),
controller: values[8],
)
],
)),
Divider(
color: Colors.transparent,
),
RichText(
text: TextSpan(
style: TextStyle(
color: Colors.black,
fontSize: 20,
fontStyle: FontStyle.normal,
fontWeight: FontWeight.w600),
text: "O cliente ja é cadastrado?",
),
textAlign: TextAlign.center,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Row(
children: [
Radio(
groupValue: _client,
value: true,
onChanged: _onChangeClient,
),
Text("Sim", style: TextStyle(fontSize: 18)),
],
),
Row(
children: [
Radio(
groupValue: _client,
value: false,
onChanged: _onChangeClient,
),
Text("Não", style: TextStyle(fontSize: 18)),
],
),
],
),
Divider(
color: Colors.transparent,
),
_clientCheck(),
Divider(
color: Colors.transparent,
),
if (_justregistered == true)
Column(
children: [
Botoes(
"Cadastrar Aparelho",
onPressed: _addEquipment,
),
if (imagens != null && imagens.length <= 10)
Botoes(
"Tire uma foto!",
onPressed: _snapPic,
),
],
),
if (imagens != null && imagens.length > 0)
Text("Você tirou " + imagens.length.toString() + " fotos.")
],
),
));
}
_onChangeClient(bool value) {
setState(() {
_client = value;
});
}
Future<void> _GetClient() async {
if (values[3] != null && values[3].text.isNotEmpty) {
clients = await dbHandler.instance.queryByName("client", values[3].text);
List<Map<String,dynamic>> temp = List.empty(growable: true);
setState(() {
if (clients != null) {
for (int i = 0; i < clients.length; i++) {
if (clients[i]['name'] != 'CLIENTE_REMOVIDO')
temp.add(clients[i]);
}
clients = temp;
}
FocusScope.of(context).unfocus();
});
}
}
_clientCheck() {
return _client
? Column(
children: [
Row(
children: [
Expanded(
child: InputTextos(
"Buscar por nome",
"Ex. João da Silva",
controller: values[3],
)),
IconButton(onPressed: _GetClient, icon: Icon(Icons.search))
],
),
if (clients != null)
for (int i = 0; i < clients.length; i++)
Column(
children: [
Divider(),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(children: [
Icon(Icons.account_circle_rounded),
Text(
" Cliente: " + clients[i]['name'].toString(),
style: TextStyle(
fontSize: 18,
color: Colors.black,
fontWeight: FontWeight.w300,
),
),
]),
Botoes("Selecionar", onPressed: () => _loadCli(i))
],
),
],
),
],
)
: Column(
children: [
Form(
key: _formCli,
child: Column(
children: [
InputValidado(
"Digite o nome do Cliente",
"Ex. João da Silva",
controller: values[4],
),
InputTextosPhone(
"Digite um telefone",
"Ex. (15) 1234-5678",
controller: values[5],
),
InputTextosPhone(
"Digite um celular",
"Ex. (15) 991234-5678",
controller: values[6],
),
InputTextos(
"Observações:",
"Ex. Tem (15) 99123-4567 como outro número celular",
controller: values[7],
),
],
)),
Divider(
color: Colors.transparent,
),
Botoes(
"Cadastrar cliente",
onPressed: _addClient,
)
],
);
}
_addClient() {
setState(() {
if (_formCli.currentState.validate()) {
_client = true;
c = new Client(
values[4].text, values[5].text, values[6].text, values[7].text);
c.SaveToDB();
if (c.id != null || c.id != 0) {
values[3].text = values[4].text;
_displaySnackbar("Cliente cadastrado.");
_justregistered = true;
} else {
_displaySnackbar("Erro no cadastro.");
}
} else {
_displaySnackbar("Verifique o cadastro!");
}
});
}
bool _ValidateInputs() {
setState(() {});
return _formEq.currentState.validate() && c != null;
}
Future<void> _snapPic() async {
if (_ValidateInputs()) {
Directory dir = await getApplicationDocumentsDirectory();
final imagem = await ImagePicker().getImage(source: ImageSource.camera);
if (imagem != null) {
setState(() {
_image = File(imagem.path);
});
final fileName = StringGenerator().getRandomString(10) + ".jpg";
final savedImage = await File(imagem.path).copy(
'${dir.path}/Pictures/$fileName');
if(savedImage != null) {
imagens.add(fileName);
_displaySnackbar("Foto adicionada com sucesso.");
}
}
}
}
_displaySnackbar(String text) {
setState(() {
final snackBar =
SnackBar(content: Text(text, style: TextStyle(fontSize: 16)));
ScaffoldMessenger.of(context).showSnackBar(snackBar);
});
}
_addEquipment() {
setState(() {
if (_formEq.currentState.validate()) {
Equipment e = new Equipment(
c.id,
values[0].text,
values[1].text,
values[2].text,
DateFormat.yMd().parse(values[8].text),
);
e.AddImageAsRange(imagens);
if (e.SaveToDB() == 1) {
_displaySnackbar("Erro no cadastro!");
} else {
_displaySnackbar("Cadastrado com sucesso.");
Navigator.of(context).pushReplacement(new MaterialPageRoute(builder: (context) => mainScreen()));
}
}
});
}
_loadCli(int index) {
setState(() {
values[3].text = clients[index]['name'].toString();
c = Client.fromJson(clients[index]);
clients = null;
_justregistered = true;
});
}
}