Merge pull request #21 from FRE-Informatica/bugfix-relayout/fd-600

Fd-600: Ajustes na tela de visita completa
This commit is contained in:
Ivan Antunes 2024-08-19 17:37:34 -03:00 committed by GitHub
commit 4fdf5c75ad
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 271 additions and 152 deletions

View File

@ -0,0 +1,22 @@
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
class ToastUtil {
static void showToast({
required String message,
ToastGravity gravity = ToastGravity.BOTTOM,
Toast toastLength = Toast.LENGTH_SHORT,
Color backgroundColor = Colors.black,
Color textColor = Colors.white,
double fontSize = 16.0,
}) {
Fluttertoast.showToast(
msg: message,
toastLength: toastLength,
gravity: gravity,
backgroundColor: backgroundColor,
textColor: textColor,
fontSize: fontSize,
);
}
}

View File

@ -2,6 +2,7 @@ import 'dart:developer';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:hub/backend/api_requests/api_calls.dart'; import 'package:hub/backend/api_requests/api_calls.dart';
import 'package:hub/components/atomic_components/shared_components_atoms/toast.dart';
import 'package:hub/components/molecular_components/visitor_not_found_component/visitor_not_found_component_widget.dart'; import 'package:hub/components/molecular_components/visitor_not_found_component/visitor_not_found_component_widget.dart';
import 'package:hub/components/templates_components/visitor_details_modal_template_component/visitor_details_modal_template_component_widget.dart'; import 'package:hub/components/templates_components/visitor_details_modal_template_component/visitor_details_modal_template_component_widget.dart';
import 'package:hub/components/templates_components/visitor_search_modal_template_component/visitor_search_modal_template_component_model.dart'; import 'package:hub/components/templates_components/visitor_search_modal_template_component/visitor_search_modal_template_component_model.dart';
@ -59,37 +60,17 @@ class _VisitorSearchModalTemplateComponentWidgetState
super.dispose(); super.dispose();
} }
void _showErrorSnackbar(BuildContext context) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
FFLocalizations.of(context).getVariableText(
ptText: "Visitante já adicionado.",
enText: "Visitor already added."),
),
duration: const Duration(seconds: 3),
backgroundColor: FlutterFlowTheme.of(context).error,
dismissDirection: DismissDirection.up,
behavior: SnackBarBehavior.floating,
margin: EdgeInsets.only(
bottom: MediaQuery.of(context).size.height - 150,
left: 10,
right: 10),
),
);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
context.watch<FFAppState>(); context.watch<FFAppState>();
return Padding( return Padding(
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 20.0, 0.0, 0.0), padding: const EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 0.0),
child: Container( child: Container(
width: MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
decoration: BoxDecoration( decoration: const BoxDecoration(
color: Colors.transparent, color: Colors.transparent,
borderRadius: const BorderRadius.only( borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(0.0), bottomLeft: Radius.circular(0.0),
bottomRight: Radius.circular(0.0), bottomRight: Radius.circular(0.0),
topLeft: Radius.circular(15.0), topLeft: Radius.circular(15.0),
@ -110,7 +91,7 @@ class _VisitorSearchModalTemplateComponentWidgetState
), ),
Padding( Padding(
padding: padding:
const EdgeInsetsDirectional.fromSTEB(16.0, 15.0, 16.0, 0.0), const EdgeInsetsDirectional.fromSTEB(16.0, 25.0, 16.0, 0.0),
child: TextFormField( child: TextFormField(
controller: _model.textController, controller: _model.textController,
focusNode: _model.textFieldFocusNode, focusNode: _model.textFieldFocusNode,
@ -488,7 +469,10 @@ class _VisitorSearchModalTemplateComponentWidgetState
_model.addToDocs(_model.textController.text); _model.addToDocs(_model.textController.text);
safeSetState(() {}); safeSetState(() {});
} else if (existDoc == true) { } else if (existDoc == true) {
_showErrorSnackbar(context); ToastUtil.showToast(
message: FFLocalizations.of(context).getVariableText(
ptText: 'Visitante já adicionado!',
enText: 'Visitor already added!'));
} }
} else { } else {
await showAdaptiveDialog( await showAdaptiveDialog(

View File

@ -182,6 +182,7 @@ Theme wrapInMaterialTimePickerTheme(
required Color headerForegroundColor, required Color headerForegroundColor,
required TextStyle headerTextStyle, required TextStyle headerTextStyle,
required Color pickerBackgroundColor, required Color pickerBackgroundColor,
required Color pickerDialForegroundColor,
required Color pickerForegroundColor, required Color pickerForegroundColor,
required Color selectedDateTimeBackgroundColor, required Color selectedDateTimeBackgroundColor,
required Color selectedDateTimeForegroundColor, required Color selectedDateTimeForegroundColor,
@ -263,7 +264,7 @@ Theme wrapInMaterialTimePickerTheme(
dialTextColor: WidgetStateColor.resolveWith((states) => dialTextColor: WidgetStateColor.resolveWith((states) =>
states.contains(WidgetState.selected) states.contains(WidgetState.selected)
? selectedDateTimeForegroundColor ? selectedDateTimeForegroundColor
: pickerForegroundColor), : pickerDialForegroundColor),
dayPeriodBorderSide: BorderSide( dayPeriodBorderSide: BorderSide(
color: pickerForegroundColor, color: pickerForegroundColor,
), ),

View File

@ -98,11 +98,11 @@ class ScheduleCompleteVisitPageModel
ptText: 'Este campo é obrigatório.', ptText: 'Este campo é obrigatório.',
); );
} }
if (val != null) { if (val != '0') {
try { try {
DateTime startDate = DateFormat('d/M/y H:mm:ss').parse(val); DateTime startDate = DateFormat('dd/MM/yyyy HH:mm:ss').parse(val);
DateTime endDate = DateTime endDate =
DateFormat('d/M/y H:mm:ss').parse(textController2!.text); DateFormat('dd/MM/yyyy HH:mm:ss').parse(textController2!.text);
if (startDate.isAfter(endDate)) { if (startDate.isAfter(endDate)) {
return FFLocalizations.of(context).getVariableText( return FFLocalizations.of(context).getVariableText(
ptText: 'A data de início deve ser anterior à data de término.', ptText: 'A data de início deve ser anterior à data de término.',
@ -116,7 +116,9 @@ class ScheduleCompleteVisitPageModel
); );
} }
} catch (e) { } catch (e) {
return '$e'; return FFLocalizations.of(context).getVariableText(
ptText: 'Preencha corretamente o campo de término da visita!',
enText: 'Fill in the end of visit field correctly!');
} }
} }
return null; return null;
@ -134,11 +136,12 @@ class ScheduleCompleteVisitPageModel
ptText: 'Este campo é obrigatório.', ptText: 'Este campo é obrigatório.',
); );
} }
if (val != null) { if (val != '0') {
try { try {
DateTime endDate = DateFormat('d/M/y H:mm:ss').parse(val); DateTime endDate = DateFormat('dd/MM/yyyy HH:mm:ss').parse(val);
DateTime startDate = DateTime startDate =
DateFormat('d/M/y H:mm:ss').parse(textController1!.text); DateFormat('dd/MM/yyyy HH:mm:ss').parse(textController1!.text);
if (endDate.isBefore(startDate)) { if (endDate.isBefore(startDate)) {
return FFLocalizations.of(context).getVariableText( return FFLocalizations.of(context).getVariableText(
enText: 'End date must be after start date.', enText: 'End date must be after start date.',
@ -152,7 +155,9 @@ class ScheduleCompleteVisitPageModel
); );
} }
} catch (e) { } catch (e) {
return '$e'; return FFLocalizations.of(context).getVariableText(
ptText: 'Preencha corretamente o campo de início da visita!',
enText: 'Fill in the visit start field correctly!');
} }
} }
return null; return null;

View File

@ -64,7 +64,10 @@ class _ScheduleCompleteVisitPageWidgetState
// On page load action. // On page load action.
SchedulerBinding.instance.addPostFrameCallback((_) async { SchedulerBinding.instance.addPostFrameCallback((_) async {
if ((widget.visitorStrList != null && widget.visitorStrList != '') && ((widget.visitorJsonList != null && (widget.visitorJsonList)!.isNotEmpty) != null)) { if ((widget.visitorStrList != null && widget.visitorStrList != '') &&
((widget.visitorJsonList != null &&
(widget.visitorJsonList)!.isNotEmpty) !=
null)) {
_model.visitorJsonList = widget.visitorJsonList! _model.visitorJsonList = widget.visitorJsonList!
.where((e) => .where((e) =>
widget.visitorStrList == widget.visitorStrList ==
@ -82,7 +85,8 @@ class _ScheduleCompleteVisitPageWidgetState
return; return;
} }
if ((widget.dropdownValue1 != null && widget.dropdownValue1 != '') && (widget.dropdownValue2 != null && widget.dropdownValue2 != '')) { if ((widget.dropdownValue1 != null && widget.dropdownValue1 != '') &&
(widget.dropdownValue2 != null && widget.dropdownValue2 != '')) {
_model.dropDownValue1 = widget.dropdownValue1!; _model.dropDownValue1 = widget.dropdownValue1!;
_model.dropDownValue2 = widget.dropdownValue2!; _model.dropDownValue2 = widget.dropdownValue2!;
safeSetState(() {}); safeSetState(() {});
@ -391,7 +395,7 @@ Widget scheduleVisit(BuildContext context,
.bodyMediumFamily), .bodyMediumFamily),
lineHeight: 1.8, lineHeight: 1.8,
), ),
textAlign: TextAlign.center, textAlign: TextAlign.start,
validator: _model.textController1Validator validator: _model.textController1Validator
.asValidator(context)), .asValidator(context)),
), ),
@ -486,13 +490,15 @@ Widget scheduleVisit(BuildContext context,
FlutterFlowTheme.of(context) FlutterFlowTheme.of(context)
.primaryBackground, .primaryBackground,
pickerForegroundColor: pickerForegroundColor:
FlutterFlowTheme.of(context) FlutterFlowTheme.of(context).info,
.primaryText,
selectedDateTimeBackgroundColor: selectedDateTimeBackgroundColor:
FlutterFlowTheme.of(context) FlutterFlowTheme.of(context)
.primary, .primary,
selectedDateTimeForegroundColor: selectedDateTimeForegroundColor:
FlutterFlowTheme.of(context).info, FlutterFlowTheme.of(context).info,
pickerDialForegroundColor:
FlutterFlowTheme.of(context)
.primaryText,
actionButtonForegroundColor: actionButtonForegroundColor:
FlutterFlowTheme.of(context) FlutterFlowTheme.of(context)
.primaryText, .primaryText,
@ -516,7 +522,7 @@ Widget scheduleVisit(BuildContext context,
} }
safeSetState(() { safeSetState(() {
_model.textController1?.text = dateTimeFormat( _model.textController1?.text = dateTimeFormat(
'd/M/y H:mm:ss', 'dd/MM/yyyy HH:mm:ss',
_model.datePicked1, _model.datePicked1,
locale: FFLocalizations.of(context) locale: FFLocalizations.of(context)
.languageCode, .languageCode,
@ -638,7 +644,7 @@ Widget scheduleVisit(BuildContext context,
.bodyMediumFamily), .bodyMediumFamily),
lineHeight: 1.8, lineHeight: 1.8,
), ),
textAlign: TextAlign.center, textAlign: TextAlign.start,
validator: _model.textController2Validator validator: _model.textController2Validator
.asValidator(context), .asValidator(context),
), ),
@ -734,13 +740,15 @@ Widget scheduleVisit(BuildContext context,
FlutterFlowTheme.of(context) FlutterFlowTheme.of(context)
.primaryBackground, .primaryBackground,
pickerForegroundColor: pickerForegroundColor:
FlutterFlowTheme.of(context) FlutterFlowTheme.of(context).info,
.primaryText,
selectedDateTimeBackgroundColor: selectedDateTimeBackgroundColor:
FlutterFlowTheme.of(context) FlutterFlowTheme.of(context)
.primary, .primary,
selectedDateTimeForegroundColor: selectedDateTimeForegroundColor:
FlutterFlowTheme.of(context).info, FlutterFlowTheme.of(context).info,
pickerDialForegroundColor:
FlutterFlowTheme.of(context)
.primaryText,
actionButtonForegroundColor: actionButtonForegroundColor:
FlutterFlowTheme.of(context) FlutterFlowTheme.of(context)
.primaryText, .primaryText,
@ -764,7 +772,7 @@ Widget scheduleVisit(BuildContext context,
} }
safeSetState(() { safeSetState(() {
_model.textController2?.text = dateTimeFormat( _model.textController2?.text = dateTimeFormat(
'd/M/y H:mm:ss', 'dd/MM/yyyy HH:mm:ss',
_model.datePicked2, _model.datePicked2,
locale: FFLocalizations.of(context) locale: FFLocalizations.of(context)
.languageCode, .languageCode,
@ -1098,29 +1106,58 @@ Widget scheduleVisit(BuildContext context,
); );
} }
final dropDownGetDadosResponse = snapshot.data!; final dropDownGetDadosResponse =
final reasonsJsonList = PhpGroup.getDadosCall.reasonsJsonList(dropDownGetDadosResponse.jsonBody); snapshot.data!;
final reasonsJsonList =
PhpGroup.getDadosCall.reasonsJsonList(
dropDownGetDadosResponse.jsonBody);
if (_model.dropDownValue1 != '' && _model.dropDownValue1 != null) { if (_model.dropDownValue1 != '' &&
String value = _model.dropDownValue1.toString() ?? ''; _model.dropDownValue1 != null) {
String value =
_model.dropDownValue1.toString() ??
'';
if (value.contains('{') && value.contains('}') && value.contains(':')) { if (value.contains('{') &&
value.contains('}') &&
value.contains(':')) {
// log("Valor e um Objeto | Usuário Escolheu o Motivo ${_model.dropDownValue1}"); // log("Valor e um Objeto | Usuário Escolheu o Motivo ${_model.dropDownValue1}");
} else { } else {
// log("Valor e uma String | Usuário Escolheu o Motivo ${_model.dropDownValue1}"); // log("Valor e uma String | Usuário Escolheu o Motivo ${_model.dropDownValue1}");
if (reasonsJsonList != null && reasonsJsonList.isNotEmpty) { if (reasonsJsonList != null &&
var item = reasonsJsonList.where((reason) => reason['MOT_DESCRICAO'].toString().contains(_model.dropDownValue1 ?? '')); reasonsJsonList.isNotEmpty) {
_model.dropDownValue1 = item.firstOrNull.toString() ?? ''; var item = reasonsJsonList.where(
(reason) =>
reason['MOT_DESCRICAO']
.toString()
.contains(_model
.dropDownValue1 ??
''));
_model.dropDownValue1 =
item.firstOrNull.toString() ?? '';
} }
} }
} }
return FlutterFlowDropDown<String>( return FlutterFlowDropDown<String>(
fillColor: FlutterFlowTheme.of(context).primaryBackground, fillColor: FlutterFlowTheme.of(context)
controller: _model.dropDownValueController1 ??= FormFieldController<String>(_model.dropDownValue1 ??= ''), .primaryBackground,
options: reasonsJsonList != null && reasonsJsonList != [] ? reasonsJsonList.map((e) => e.toString()).toList() : [], controller:
optionLabels: PhpGroup.getDadosCall.reasonsMotDescStrList(dropDownGetDadosResponse.jsonBody), _model.dropDownValueController1 ??=
onChanged: (val) => safeSetState(() => _model.dropDownValue1 = val), FormFieldController<String>(
_model.dropDownValue1 ??= ''),
options: reasonsJsonList != null &&
reasonsJsonList != []
? reasonsJsonList
.map((e) => e.toString())
.toList()
: [],
optionLabels: PhpGroup.getDadosCall
.reasonsMotDescStrList(
dropDownGetDadosResponse
.jsonBody),
onChanged: (val) => safeSetState(
() => _model.dropDownValue1 = val),
width: double.infinity, width: double.infinity,
height: double.infinity, height: double.infinity,
textStyle: FlutterFlowTheme.of(context) textStyle: FlutterFlowTheme.of(context)
@ -1223,28 +1260,55 @@ Widget scheduleVisit(BuildContext context,
); );
} }
final dropDownGetDadosResponse = snapshot.data!; final dropDownGetDadosResponse =
final lavelList = PhpGroup.getDadosCall.levelJsonList(dropDownGetDadosResponse.jsonBody); snapshot.data!;
final lavelList = PhpGroup.getDadosCall
.levelJsonList(
dropDownGetDadosResponse.jsonBody);
if (_model.dropDownValue2 != '' && _model.dropDownValue2 != null) { if (_model.dropDownValue2 != '' &&
String value = _model.dropDownValue2.toString() ?? ''; _model.dropDownValue2 != null) {
String value =
_model.dropDownValue2.toString() ??
'';
if (value.contains('{') && value.contains('}') && value.contains(':')) { if (value.contains('{') &&
value.contains('}') &&
value.contains(':')) {
// log("Valor e um Objeto | Usuário Escolheu o Nivel ${_model.dropDownValue2}"); // log("Valor e um Objeto | Usuário Escolheu o Nivel ${_model.dropDownValue2}");
} else { } else {
// log("Valor e uma String | Usuário Escolheu o Nivel ${_model.dropDownValue2}"); // log("Valor e uma String | Usuário Escolheu o Nivel ${_model.dropDownValue2}");
if (lavelList != null && lavelList.isNotEmpty) { if (lavelList != null &&
var item = lavelList.where((level) => level['NAC_DESCRICAO'].toString().contains(_model.dropDownValue2 ?? '')); lavelList.isNotEmpty) {
_model.dropDownValue2 = item.firstOrNull.toString() ?? ''; var item = lavelList.where((level) =>
level['NAC_DESCRICAO']
.toString()
.contains(
_model.dropDownValue2 ??
''));
_model.dropDownValue2 =
item.firstOrNull.toString() ?? '';
} }
} }
} }
return FlutterFlowDropDown<String>( return FlutterFlowDropDown<String>(
controller: _model.dropDownValueController2 ??= FormFieldController<String>(_model.dropDownValue2 ??= ''), controller:
options: lavelList != null && lavelList != [] ? lavelList.map((e) => e.toString()).toList() : [], _model.dropDownValueController2 ??=
optionLabels: PhpGroup.getDadosCall.levelNACDescricaoStrList(dropDownGetDadosResponse.jsonBody), FormFieldController<String>(
onChanged: (val) => safeSetState(() => _model.dropDownValue2 = val), _model.dropDownValue2 ??= ''),
options:
lavelList != null && lavelList != []
? lavelList
.map((e) => e.toString())
.toList()
: [],
optionLabels: PhpGroup.getDadosCall
.levelNACDescricaoStrList(
dropDownGetDadosResponse
.jsonBody),
onChanged: (val) => safeSetState(
() => _model.dropDownValue2 = val),
width: double.infinity, width: double.infinity,
height: double.infinity, height: double.infinity,
textStyle: FlutterFlowTheme.of(context) textStyle: FlutterFlowTheme.of(context)
@ -1552,7 +1616,6 @@ Widget scheduleVisit(BuildContext context,
), ),
onPressed: _model.isValid() onPressed: _model.isValid()
? () async { ? () async {
await showDialog( await showDialog(
context: context, context: context,
builder: (context) { builder: (context) {

View File

@ -17,7 +17,6 @@ import 'package:google_fonts/google_fonts.dart';
import 'package:hub/pages/schedule_provisional_visit_page/schedule_provisional_visit_page_model.dart'; import 'package:hub/pages/schedule_provisional_visit_page/schedule_provisional_visit_page_model.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class ScheduleProvisionalVisitPageWidget extends StatefulWidget { class ScheduleProvisionalVisitPageWidget extends StatefulWidget {
const ScheduleProvisionalVisitPageWidget({super.key}); const ScheduleProvisionalVisitPageWidget({super.key});
@ -55,7 +54,8 @@ class _ScheduleProvisionalVisitPageWidgetState
} }
bool _isFormValid() { bool _isFormValid() {
if (_model.personNameTextController.text == '' || _model.personNameTextController.text.length > 80) { if (_model.personNameTextController.text == '' ||
_model.personNameTextController.text.length > 80) {
return false; return false;
} }
@ -161,10 +161,12 @@ class _ScheduleProvisionalVisitPageWidgetState
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
Align( Align(
alignment: const AlignmentDirectional(-1.0, 0.0), alignment:
const AlignmentDirectional(-1.0, 0.0),
child: Padding( child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB( padding:
24.0, 0.0, 0.0, 0.0), const EdgeInsetsDirectional.fromSTEB(
24.0, 0.0, 0.0, 0.0),
child: Text( child: Text(
FFLocalizations.of(context).getText( FFLocalizations.of(context).getText(
'8d3679lf' /* Propriedade */, '8d3679lf' /* Propriedade */,
@ -210,7 +212,8 @@ class _ScheduleProvisionalVisitPageWidgetState
MainAxisAlignment.start, MainAxisAlignment.start,
children: [ children: [
ClipRRect( ClipRRect(
borderRadius: const BorderRadius.only( borderRadius:
const BorderRadius.only(
bottomLeft: Radius.circular(50.0), bottomLeft: Radius.circular(50.0),
bottomRight: bottomRight:
Radius.circular(50.0), Radius.circular(50.0),
@ -218,10 +221,10 @@ class _ScheduleProvisionalVisitPageWidgetState
topRight: Radius.circular(50.0), topRight: Radius.circular(50.0),
), ),
child: CachedNetworkImage( child: CachedNetworkImage(
fadeInDuration: fadeInDuration: const Duration(
const Duration(milliseconds: 200), milliseconds: 200),
fadeOutDuration: fadeOutDuration: const Duration(
const Duration(milliseconds: 200), milliseconds: 200),
imageUrl: imageUrl:
'https://freaccess.com.br/freaccess/Images/Clients/${FFAppState().cliUUID}.png', 'https://freaccess.com.br/freaccess/Images/Clients/${FFAppState().cliUUID}.png',
width: 35.0, width: 35.0,
@ -232,9 +235,8 @@ class _ScheduleProvisionalVisitPageWidgetState
), ),
), ),
Padding( Padding(
padding: padding: const EdgeInsetsDirectional
const EdgeInsetsDirectional.fromSTEB( .fromSTEB(15.0, 0.0, 0.0, 0.0),
15.0, 0.0, 0.0, 0.0),
child: Text( child: Text(
FFAppState().local, FFAppState().local,
style: style:
@ -272,10 +274,12 @@ class _ScheduleProvisionalVisitPageWidgetState
MainAxisAlignment.spaceEvenly, MainAxisAlignment.spaceEvenly,
children: [ children: [
Align( Align(
alignment: const AlignmentDirectional(-1.0, 0.0), alignment:
const AlignmentDirectional(-1.0, 0.0),
child: Padding( child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB( padding:
24.0, 10.0, 0.0, 10.0), const EdgeInsetsDirectional.fromSTEB(
24.0, 10.0, 0.0, 10.0),
child: Text( child: Text(
FFLocalizations.of(context).getText( FFLocalizations.of(context).getText(
'z6aawgqa' /* Dados da Visita */, 'z6aawgqa' /* Dados da Visita */,
@ -303,12 +307,11 @@ class _ScheduleProvisionalVisitPageWidgetState
Container( Container(
height: 80.0, height: 80.0,
decoration: const BoxDecoration(), decoration: const BoxDecoration(),
alignment: alignment: const AlignmentDirectional(
const AlignmentDirectional(0.0, 0.0), 0.0, 0.0),
child: Padding( child: Padding(
padding: padding: const EdgeInsetsDirectional
const EdgeInsetsDirectional.fromSTEB( .fromSTEB(24.0, 0.0, 24.0, 0.0),
24.0, 0.0, 24.0, 0.0),
child: SizedBox( child: SizedBox(
width: double.infinity, width: double.infinity,
child: TextFormField( child: TextFormField(
@ -319,7 +322,8 @@ class _ScheduleProvisionalVisitPageWidgetState
onChanged: (_) => onChanged: (_) =>
EasyDebounce.debounce( EasyDebounce.debounce(
'_model.personNameTextController', '_model.personNameTextController',
const Duration(milliseconds: 500), const Duration(
milliseconds: 500),
() => setState(() {}), () => setState(() {}),
), ),
autofocus: false, autofocus: false,
@ -463,12 +467,13 @@ class _ScheduleProvisionalVisitPageWidgetState
SizedBox( SizedBox(
height: 80.0, height: 80.0,
child: Stack( child: Stack(
alignment: alignment: const AlignmentDirectional(
const AlignmentDirectional(0.0, 0.0), 0.0, 0.0),
children: [ children: [
Padding( Padding(
padding: const EdgeInsetsDirectional padding:
.fromSTEB( const EdgeInsetsDirectional
.fromSTEB(
24.0, 0.0, 24.0, 0.0), 24.0, 0.0, 24.0, 0.0),
child: TextFormField( child: TextFormField(
controller: _model controller: _model
@ -478,7 +483,8 @@ class _ScheduleProvisionalVisitPageWidgetState
onChanged: (_) => onChanged: (_) =>
EasyDebounce.debounce( EasyDebounce.debounce(
'_model.dateTimeTextController', '_model.dateTimeTextController',
const Duration(milliseconds: 500), const Duration(
milliseconds: 500),
() => setState(() {}), () => setState(() {}),
), ),
readOnly: true, readOnly: true,
@ -590,8 +596,9 @@ class _ScheduleProvisionalVisitPageWidgetState
), ),
), ),
Padding( Padding(
padding: const EdgeInsetsDirectional padding:
.fromSTEB( const EdgeInsetsDirectional
.fromSTEB(
24.0, 0.0, 24.0, 0.0), 24.0, 0.0, 24.0, 0.0),
child: InkWell( child: InkWell(
splashColor: Colors.transparent, splashColor: Colors.transparent,
@ -715,11 +722,15 @@ class _ScheduleProvisionalVisitPageWidgetState
pickerForegroundColor: pickerForegroundColor:
FlutterFlowTheme.of( FlutterFlowTheme.of(
context) context)
.primaryText, .info,
selectedDateTimeBackgroundColor: selectedDateTimeBackgroundColor:
FlutterFlowTheme.of( FlutterFlowTheme.of(
context) context)
.primary, .primary,
pickerDialForegroundColor:
FlutterFlowTheme.of(
context)
.primaryText,
selectedDateTimeForegroundColor: selectedDateTimeForegroundColor:
FlutterFlowTheme.of( FlutterFlowTheme.of(
context) context)
@ -787,24 +798,28 @@ class _ScheduleProvisionalVisitPageWidgetState
], ],
), ),
Padding( Padding(
padding: const EdgeInsetsDirectional.fromSTEB( padding:
0.0, 10.0, 0.0, 10.0), const EdgeInsetsDirectional.fromSTEB(
0.0, 10.0, 0.0, 10.0),
child: Column( child: Column(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
children: [ children: [
Align( Align(
alignment: alignment: const AlignmentDirectional(
const AlignmentDirectional(0.0, 0.0), 0.0, 0.0),
child: Container( child: Container(
decoration: const BoxDecoration(), decoration: const BoxDecoration(),
alignment: alignment:
const AlignmentDirectional(0.0, 0.0), const AlignmentDirectional(
0.0, 0.0),
child: Align( child: Align(
alignment: const AlignmentDirectional( alignment:
0.0, 0.0), const AlignmentDirectional(
0.0, 0.0),
child: Padding( child: Padding(
padding: const EdgeInsetsDirectional padding:
.fromSTEB( const EdgeInsetsDirectional
.fromSTEB(
24.0, 0.0, 24.0, 0.0), 24.0, 0.0, 24.0, 0.0),
child: SizedBox( child: SizedBox(
width: double.infinity, width: double.infinity,
@ -961,51 +976,71 @@ class _ScheduleProvisionalVisitPageWidgetState
), ),
), ),
FFButtonWidget( FFButtonWidget(
onPressed: !_isFormValid() ? null : () async { onPressed: !_isFormValid()
? null
: () async {
try {
_model.provVisitSchedule = await PhpGroup
.postProvVisitSchedulingCall
.call(
devUUID: FFAppState().devUUID,
userUUID: FFAppState().userUUID,
cliID: FFAppState().cliUUID,
atividade: 'putAgendamentoProv',
data:
_model.dateTimeTextController.text,
motivo: _model.notesTextController.text,
nome: _model
.personNameTextController.text,
proID: FFAppState().ownerUUID,
);
try { if (PhpGroup.postProvVisitSchedulingCall
_model.provVisitSchedule = await PhpGroup.postProvVisitSchedulingCall.call( .error((_model.provVisitSchedule
devUUID: FFAppState().devUUID, ?.jsonBody ??
userUUID: FFAppState().userUUID, '')) ==
cliID: FFAppState().cliUUID, false) {
atividade: 'putAgendamentoProv', DialogUtil.success(
data: _model.dateTimeTextController.text, context,
motivo: _model.notesTextController.text, FFLocalizations.of(context).getVariableText(
nome: _model.personNameTextController.text, ptText:
proID: FFAppState().ownerUUID, "Agendamento Provisório Realizado com Sucesso!",
); enText:
"Provisional Scheduling Successfully Completed"));
setState(() {
_model.dateTimeTextController
?.clear();
_model.personNameTextController
?.clear();
_model.notesTextController?.clear();
});
} else {
var message = PhpGroup
.postProvVisitSchedulingCall
.msg((_model.provVisitSchedule
?.jsonBody ??
''));
if (message != null) {
DialogUtil.error(context, message);
} else {
DialogUtil.errorDefault(context);
}
}
if (PhpGroup.postProvVisitSchedulingCall.error((_model.provVisitSchedule?.jsonBody ?? '')) == false) { setState(() {});
DialogUtil.success( } catch (e, s) {
context, DialogUtil.errorDefault(context);
FFLocalizations.of(context).getVariableText( LogUtil.requestAPIFailed(
ptText: "Agendamento Provisório Realizado com Sucesso!", "processRequest.php",
enText: "Provisional Scheduling Successfully Completed" "",
) "Cadastrar Visita Provisória",
); e,
setState(() { s);
_model.dateTimeTextController?.clear(); }
_model.personNameTextController?.clear(); },
_model.notesTextController?.clear();
});
} else {
var message = PhpGroup.postProvVisitSchedulingCall.msg((_model.provVisitSchedule?.jsonBody ?? ''));
if (message != null) {
DialogUtil.error(context, message);
} else {
DialogUtil.errorDefault(context);
}
}
setState(() {});
} catch (e, s) {
DialogUtil.errorDefault(context);
LogUtil.requestAPIFailed("processRequest.php", "", "Cadastrar Visita Provisória", e, s);
}
},
showLoadingIndicator: true, showLoadingIndicator: true,
text: FFLocalizations.of(context).getText('bv5fg9sv' /* Enviar */), text: FFLocalizations.of(context)
.getText('bv5fg9sv' /* Enviar */),
options: FFButtonOptions( options: FFButtonOptions(
width: 150.0, width: 150.0,
height: 50.0, height: 50.0,
@ -1051,4 +1086,4 @@ class _ScheduleProvisionalVisitPageWidgetState
), ),
); );
} }
} }

View File

@ -653,6 +653,14 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
fluttertoast:
dependency: "direct main"
description:
name: fluttertoast
sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc"
url: "https://pub.dev"
source: hosted
version: "8.2.8"
font_awesome_flutter: font_awesome_flutter:
dependency: "direct main" dependency: "direct main"
description: description:

View File

@ -108,6 +108,7 @@ dependencies:
qr_flutter: ^4.1.0 qr_flutter: ^4.1.0
permission_handler: ^11.3.1 permission_handler: ^11.3.1
firebase_crashlytics: ^4.0.1 firebase_crashlytics: ^4.0.1
fluttertoast: ^8.2.8
dependency_overrides: dependency_overrides:
http: 1.2.1 http: 1.2.1