Initial commit
This commit is contained in:
360
lib/screens/createEquipment.dart
Normal file
360
lib/screens/createEquipment.dart
Normal file
@@ -0,0 +1,360 @@
|
||||
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;
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user