This commit is contained in:
jantunesmesias 2024-08-28 16:45:21 -03:00
parent 6702017e07
commit 2742d7d9f6
16 changed files with 370 additions and 334 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

@ -1,10 +1,8 @@
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:hub/components/molecular_components/order_filter_modal/order_filter_modal_model.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/internationalization.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
class OrderFilterModalWidget extends StatefulWidget {
final String defaultAdresseeType;
@ -25,12 +23,28 @@ class _OrderFilterModalWidgetState extends State<OrderFilterModalWidget> {
late Map<String, dynamic> selected;
final List<Map<String, String>> adresseeTypeOptions = [
{'title': 'Morador', 'value': 'MOR'},
{'title': 'Propriedade', 'value': 'PRO'},
{
'title': FFLocalizations.of(AppState().context!)
.getVariableText(enText: 'Resident', ptText: 'Morador'),
'value': 'MOR'
},
{
'title': FFLocalizations.of(AppState().context!)
.getVariableText(enText: 'Property', ptText: 'Propriedade'),
'value': 'PRO'
},
];
final List<Map<String, String>> statusOptions = [
{'title': 'Aguardando Retirada', 'value': 'notPickedUp'},
{'title': 'Retirado', 'value': 'pickedUp'},
{
'title': FFLocalizations.of(AppState().context!).getVariableText(
ptText: 'Aguardando Retirada', enText: 'Waiting for Pickup'),
'value': 'notPickedUp'
},
{
'title': FFLocalizations.of(AppState().context!)
.getVariableText(ptText: 'Retirado', enText: 'Picked Up'),
'value': 'pickedUp'
},
];
@override
@ -46,8 +60,12 @@ class _OrderFilterModalWidgetState extends State<OrderFilterModalWidget> {
_model = createModel(context, () => OrderFilterModalModel());
selected = {
'adresseeType': widget.defaultAdresseeType == '.*' ? ['MOR', 'PRO'] : [widget.defaultAdresseeType],
'status': widget.defaultStatus == '.*' ? ['notPickedUp', 'pickedUp'] : [widget.defaultStatus],
'adresseeType': widget.defaultAdresseeType == '.*'
? ['MOR', 'PRO']
: [widget.defaultAdresseeType],
'status': widget.defaultStatus == '.*'
? ['notPickedUp', 'pickedUp']
: [widget.defaultStatus],
};
}
@ -76,7 +94,8 @@ class _OrderFilterModalWidgetState extends State<OrderFilterModalWidget> {
Navigator.pop(context, filterResult);
}
Widget _buildCheckboxListTile(String key, List<Map<String, String>> options, double fontsize) {
Widget _buildCheckboxListTile(
String key, List<Map<String, String>> options, double fontsize) {
return Column(
children: [
Row(
@ -89,13 +108,13 @@ class _OrderFilterModalWidgetState extends State<OrderFilterModalWidget> {
key == 'status' ? 'Status' : 'Destinátario',
textAlign: TextAlign.left,
style: FlutterFlowTheme.of(context).bodyMedium.override(
fontFamily: FlutterFlowTheme.of(context).bodyMediumFamily,
fontSize: fontsize,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).bodyMediumFamily),
color: FlutterFlowTheme.of(context).primaryText,
),
fontFamily: FlutterFlowTheme.of(context).bodyMediumFamily,
fontSize: fontsize,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).bodyMediumFamily),
color: FlutterFlowTheme.of(context).primaryText,
),
),
),
],
@ -110,12 +129,13 @@ class _OrderFilterModalWidgetState extends State<OrderFilterModalWidget> {
title: Text(
option['title']!,
style: FlutterFlowTheme.of(context).bodyMedium.override(
fontFamily: FlutterFlowTheme.of(context).bodyMediumFamily,
letterSpacing: 0.0,
fontSize: fontsize,
useGoogleFonts: GoogleFonts.asMap().containsKey(FlutterFlowTheme.of(context).bodyMediumFamily),
color: FlutterFlowTheme.of(context).primaryText,
),
fontFamily: FlutterFlowTheme.of(context).bodyMediumFamily,
letterSpacing: 0.0,
fontSize: fontsize,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).bodyMediumFamily),
color: FlutterFlowTheme.of(context).primaryText,
),
),
dense: true,
value: selected[key]!.contains(option['value']),
@ -141,7 +161,8 @@ class _OrderFilterModalWidgetState extends State<OrderFilterModalWidget> {
width: 5,
color: FlutterFlowTheme.of(context).secondaryText,
),
controlAffinity: ListTileControlAffinity.leading, // Adiciona esta linha
controlAffinity:
ListTileControlAffinity.leading, // Adiciona esta linha
);
},
),
@ -177,17 +198,17 @@ class _OrderFilterModalWidgetState extends State<OrderFilterModalWidget> {
FFLocalizations.of(context)
.getText('yfj9pd6k'), // Filtros
style:
FlutterFlowTheme.of(context).headlineMedium.override(
fontFamily: FlutterFlowTheme.of(context)
.headlineMediumFamily,
color: FlutterFlowTheme.of(context).primaryText,
fontSize: 18.0,
letterSpacing: 0.0,
fontWeight: FontWeight.bold,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context)
.headlineMediumFamily),
),
FlutterFlowTheme.of(context).headlineMedium.override(
fontFamily: FlutterFlowTheme.of(context)
.headlineMediumFamily,
color: FlutterFlowTheme.of(context).primaryText,
fontSize: 18.0,
letterSpacing: 0.0,
fontWeight: FontWeight.bold,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context)
.headlineMediumFamily),
),
),
),
],
@ -199,7 +220,8 @@ class _OrderFilterModalWidgetState extends State<OrderFilterModalWidget> {
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
_buildCheckboxListTile('adresseeType', adresseeTypeOptions, 14),
_buildCheckboxListTile(
'adresseeType', adresseeTypeOptions, 14),
_buildCheckboxListTile('status', statusOptions, 14),
],
),
@ -220,4 +242,4 @@ class _OrderFilterModalWidgetState extends State<OrderFilterModalWidget> {
),
);
}
}
}

View File

@ -4,7 +4,6 @@ import 'package:hub/components/atomic_components/menu_button_item/menu_button_it
import 'package:hub/components/atomic_components/menu_card_item/menu_card_item.dart';
import 'package:hub/components/molecular_components/menu_item/menu_item.dart';
import 'package:hub/flutter_flow/nav/nav.dart';
import 'package:material_symbols_icons/symbols.dart';
import '/components/organism_components/menu_list_view_component/menu_list_view_component_widget.dart';
import '/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart';
@ -128,14 +127,36 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
else
return <MenuEntry>[
MenuButtonWidget(
icon: Icons.share_location_outlined,
icon: Icons.engineering_outlined,
action: () async {
await _model.provisionalSchedule(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'Schedule\nProviders',
ptText: 'Agendar\nPrestadores',
),
),
MenuButtonWidget(
icon: Icons.sports_motorsports_outlined,
action: () async {
await _model.deliverySchedule(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'Schedule\nDeliveries',
ptText: 'Agendar\nEntregas',
),
),
MenuButtonWidget(
icon: Icons.attach_email_outlined,
action: () async {
await _model.fastPassAction(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'Fast\nVisit',
ptText: 'Agenda\nRápida',
ptText: 'Convidar\nVisitantes',
enText: 'Invite\nVisitors',
),
),
MenuButtonWidget(
@ -160,17 +181,6 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
enText: 'My\nOrders',
),
),
MenuButtonWidget(
icon: Icons.engineering_outlined,
action: () async {
await _model.provisionalSchedule(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'Register\nProviders',
ptText: 'Cadastrar\nPrestadores',
),
),
MenuButtonWidget(
icon: Icons.event_available,
action: () async {
@ -178,19 +188,8 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
ptText: 'Reserva\nde Itens',
enText: 'Item\nReservation',
),
),
MenuButtonWidget(
icon: Icons.sports_motorsports_outlined,
action: () async {
await _model.deliverySchedule(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'Register\nDeliveries',
ptText: 'Cadastrar\nEntregas',
ptText: 'Reservas',
enText: 'Reservations',
),
),
MenuButtonWidget(
@ -216,14 +215,14 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
),
),
MenuButtonWidget(
icon: Icons.groups,
icon: Icons.transfer_within_a_station_outlined,
action: () async {
await _model.peopleOnThePropertyAction(context);
await _model.accessHistoryAction(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'People on\nthe Property',
ptText: 'Pessoas na\nPropriedade',
enText: 'Access\nHistory',
ptText: 'Consultar\nAcessos',
),
),
MenuButtonWidget(
@ -237,28 +236,6 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
ptText: 'Consultar\nLiberações',
),
),
MenuButtonWidget(
icon: Icons.transfer_within_a_station_outlined,
action: () async {
await _model.accessHistoryAction(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'Access\nHistory',
ptText: 'Consultar\nAcessos',
),
),
MenuButtonWidget(
icon: Symbols.location_away,
action: () async {
await _model.visitHistoryAction(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'Visit\nHistory',
ptText: 'Consultar\nVisitas',
),
),
MenuButtonWidget(
icon: Icons.chat_outlined,
action: () async {
@ -270,6 +247,17 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
ptText: 'Consultar\nMensagens',
),
),
MenuButtonWidget(
icon: Icons.groups,
action: () async {
await _model.peopleOnThePropertyAction(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'People on\nthe Property',
ptText: 'Pessoas na\nPropriedade',
),
),
MenuButtonWidget(
icon: Icons.settings,
action: () async {
@ -384,7 +372,7 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'Provisional Schedule',
enText: 'Schedule Providers',
ptText: 'Agendar Prestadores',
),
),
@ -395,19 +383,19 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'Delivery Schedule',
enText: 'Schedule Deliveries',
ptText: 'Agendar Entregas',
),
),
MenuCardItem(
icon: Icons.share_location_outlined,
icon: Icons.attach_email_outlined,
action: () async {
await _model.fastPassAction(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'Fast Visit',
ptText: 'Agenda Rápida',
ptText: 'Convidar Visitantes',
enText: 'Invite Visitors',
),
),
MenuCardItem(
@ -439,19 +427,19 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
ptText: 'Reserva de Itens',
enText: 'Item Reservation',
ptText: 'Reservas',
enText: 'Reservations',
),
),
MenuCardItem(
icon: FFIcons.khome,
icon: Icons.person_add_alt_1_outlined,
action: () async {
await _model.registerVisitorOptAction(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'Register Visitor',
ptText: 'Cadastro de Visitante',
ptText: 'Cadastrar Visitante',
),
),
MenuCardItem(
@ -466,29 +454,7 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
),
),
MenuCardItem(
icon: Icons.groups,
action: () async {
await _model.peopleOnThePropertyAction(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'People on the Property',
ptText: 'Pessoas na Propriedade',
),
),
MenuCardItem(
icon: Icons.group_add_outlined,
action: () async {
await _model.liberationHistoryAction(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'Liberations History',
ptText: 'Consultar Liberações',
),
),
MenuCardItem(
icon: Icons.key_outlined,
icon: Icons.transfer_within_a_station_outlined,
action: () async {
await _model.accessHistoryAction(context);
setState(() {});
@ -499,14 +465,14 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
),
),
MenuCardItem(
icon: Icons.people_outline_sharp,
icon: Icons.how_to_reg_outlined,
action: () async {
await _model.visitHistoryAction(context);
await _model.liberationHistoryAction(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'Visit History',
ptText: 'Consultar Visitas',
enText: 'Liberations History',
ptText: 'Consultar Liberações',
),
),
MenuCardItem(
@ -520,6 +486,17 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
ptText: 'Consultar Mensagens',
),
),
MenuCardItem(
icon: Icons.groups,
action: () async {
await _model.peopleOnThePropertyAction(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'People on the Property',
ptText: 'Pessoas na Propriedade',
),
),
MenuCardItem(
icon: Icons.settings,
action: () async {
@ -546,57 +523,17 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
];
}();
return Padding(
padding: const EdgeInsetsDirectional.only(
top: 10,
),
child: Builder(
builder: (context) {
if (widget.style == MenuView.list_grid &&
widget.expandable == true &&
widget.item == MenuItem.button) {
if (_model.isGrid == true) {
return wrapWithModel(
model: _model.menuStaggeredViewComponentModel,
updateCallback: () => setState(() {}),
updateOnChange: true,
child: MenuStaggeredViewComponentWidget(
options: options,
expandable: widget.expandable,
item: widget.item,
changeMenuStyle: () async {
await _model.changeMenuStyle(context);
setState(() {});
},
isGrid: _model.isGrid,
),
);
} else {
return wrapWithModel(
model: _model.menuStaggeredViewComponentModel,
updateCallback: () => setState(() {}),
updateOnChange: true,
child: MenuStaggeredViewComponentWidget(
options: options,
expandable: widget.expandable,
item: widget.item,
changeMenuStyle: () async {
await _model.changeMenuStyle(context);
setState(() {});
},
isGrid: _model.isGrid,
),
);
}
}
if (widget.style == MenuView.list &&
widget.expandable == false &&
widget.item == MenuItem.tile) {
return Builder(
builder: (context) {
if (widget.style == MenuView.list_grid &&
widget.expandable == true &&
widget.item == MenuItem.button) {
if (_model.isGrid == true) {
return wrapWithModel(
model: _model.menuListViewComponentModel,
model: _model.menuStaggeredViewComponentModel,
updateCallback: () => setState(() {}),
updateOnChange: true,
child: MenuListViewComponentWidget(
child: MenuStaggeredViewComponentWidget(
options: options,
expandable: widget.expandable,
item: widget.item,
@ -604,12 +541,47 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
await _model.changeMenuStyle(context);
setState(() {});
},
isGrid: _model.isGrid,
),
);
} else {
return wrapWithModel(
model: _model.menuStaggeredViewComponentModel,
updateCallback: () => setState(() {}),
updateOnChange: true,
child: MenuStaggeredViewComponentWidget(
options: options,
expandable: widget.expandable,
item: widget.item,
changeMenuStyle: () async {
await _model.changeMenuStyle(context);
setState(() {});
},
isGrid: _model.isGrid,
),
);
}
return const SizedBox();
},
),
}
if (widget.style == MenuView.list &&
widget.expandable == false &&
widget.item == MenuItem.tile) {
return wrapWithModel(
model: _model.menuListViewComponentModel,
updateCallback: () => setState(() {}),
updateOnChange: true,
child: MenuListViewComponentWidget(
options: options,
expandable: widget.expandable,
item: widget.item,
changeMenuStyle: () async {
await _model.changeMenuStyle(context);
setState(() {});
},
),
);
}
return const SizedBox();
},
);
}

View File

@ -107,9 +107,9 @@ class _MenuListViewComponentWidgetState
}
Widget buildMenuList(BuildContext context) {
return SizedBox(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
return Expanded(
// width: MediaQuery.of(context).size.width,
// height: MediaQuery.of(context).size.height,
child: ListView.separated(
padding: const EdgeInsets.symmetric(horizontal: 15),
shrinkWrap: true,

View File

@ -87,7 +87,9 @@ class _MenuStaggeredViewComponentWidgetState
);
},
),
],
]
.addToStart(const SizedBox(height: 30))
.addToEnd(const SizedBox(height: 30)),
);
}

View File

@ -27,8 +27,8 @@ Widget buildDetails(
showAlertDialog(
context,
FFLocalizations.of(context).getVariableText(
ptText: 'Bloquear Visita',
enText: 'Block Visit',
ptText: 'Cancelar Visita',
enText: 'Cancel Visit',
),
FFLocalizations.of(context).getVariableText(
ptText: 'Você tem certeza que deseja bloquear essa visita?',

View File

@ -1,8 +1,7 @@
import 'package:flutter/material.dart';
import 'package:hub/backend/api_requests/api_manager.dart';
import 'package:hub/components/templates_components/provisional_schedule_template/provisional_shcedule_template_widget.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/flutter_flow/internationalization.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
class ScheduleProvisionalVisitPageModel
extends FlutterFlowModel<ScheduleProvisionalVisitPageWidget> {
@ -62,6 +61,26 @@ class ScheduleProvisionalVisitPageModel
);
}
DateTime selectedDateTime;
DateTime currentDateTime = DateTime.now();
selectedDateTime = DateFormat('dd/MM/yyyy HH:mm:ss').parse(val);
try {
selectedDateTime = DateFormat('dd/MM/yyyy HH:mm:ss').parse(val);
} catch (e) {
return FFLocalizations.of(context).getVariableText(
ptText: 'Formato de data/hora inválido',
enText: 'Invalid date/time format',
);
}
if (selectedDateTime.isBefore(currentDateTime)) {
return FFLocalizations.of(context).getVariableText(
ptText: 'A data/hora selecionada é inválida',
enText: 'The selected date/time is invalid',
);
}
return null;
}

View File

@ -942,8 +942,9 @@ class _ScheduleProvisionalVisitPageWidgetState
"Agendamento Provisório Realizado com Sucesso!",
enText:
"Provisional Scheduling Successfully Completed"));
setState(() {
safeSetState(() {
_model.dateTimeTextController?.clear();
_model.personNameTextController
?.clear();
_model.notesTextController?.clear();

View File

@ -1,25 +1,22 @@
import 'dart:async';
import 'dart:developer';
import 'package:hub/components/molecular_components/throw_exception/throw_exception_widget.dart';
import 'package:hub/custom_code/actions/convert_image_file_to_base64.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:flutter/material.dart';
import 'package:hub/shared/utils/validator_util.dart';
import '/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/form_field_controller.dart';
import 'package:flutter/material.dart';
import 'regisiter_vistor_template_component_widget.dart';
class RegisiterVistorTemplateComponentModel extends FlutterFlowModel<RegisiterVistorTemplateComponentWidget> {
class RegisiterVistorTemplateComponentModel
extends FlutterFlowModel<RegisiterVistorTemplateComponentWidget> {
/// State fields for stateful widgets in this page.
Timer? _debounceTimer;
final unfocusNode = FocusNode();
bool isDataUploading = false;
FFUploadedFile uploadedLocalFile = FFUploadedFile(bytes: Uint8List.fromList([]));
FFUploadedFile uploadedLocalFile =
FFUploadedFile(bytes: Uint8List.fromList([]));
void debounce(Function() fn, Duration time) {
if (_debounceTimer != null) {
@ -28,6 +25,8 @@ class RegisiterVistorTemplateComponentModel extends FlutterFlowModel<RegisiterVi
_debounceTimer = Timer(time, fn);
}
// State field(s) for TextField widget.
FocusNode? textFieldFocusNode1;
TextEditingController? textController1;
@ -97,7 +96,9 @@ class RegisiterVistorTemplateComponentModel extends FlutterFlowModel<RegisiterVi
TextEditingController? textController4;
String? Function(BuildContext, String?)? textController4Validator;
String? _textController4Validator(BuildContext context, String? val) {
if (val != null && val.isNotEmpty && ValidatorUtil.isValidEmail(val) == false) {
if (val != null &&
val.isNotEmpty &&
ValidatorUtil.isValidEmail(val) == false) {
return FFLocalizations.of(context).getVariableText(
enText: 'Invalid email',
ptText: 'Email inválido',

View File

@ -1,24 +1,20 @@
import 'dart:developer';
import 'package:easy_debounce/easy_debounce.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:hub/shared/utils/dialog_util.dart';
import 'package:hub/shared/utils/validator_util.dart';
import 'package:json_path/fun_sdk.dart';
import 'package:provider/provider.dart';
import 'package:rxdart/rxdart.dart';
import '/backend/api_requests/api_calls.dart';
import '/components/molecular_components/throw_exception/throw_exception_widget.dart';
import '/custom_code/actions/index.dart' as actions;
import '/flutter_flow/flutter_flow_drop_down.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/flutter_flow_widgets.dart';
import '/flutter_flow/form_field_controller.dart';
import '/flutter_flow/upload_data.dart';
import '/custom_code/actions/index.dart' as actions;
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart';
import 'regisiter_vistor_template_component_model.dart';
export 'regisiter_vistor_template_component_model.dart';
@ -44,13 +40,20 @@ class _RegisiterVistorTemplateComponentWidgetState
bool _isVisitorRegistered = false;
BehaviorSubject<bool> visitorAlreadyRegistered = BehaviorSubject<bool>();
final _formKey = GlobalKey<FormState>();
void _resetForm() {
_formKey.currentState?.reset();
}
@override
void initState() {
super.initState();
visitorAlreadyRegistered = BehaviorSubject<bool>.seeded(false);
_model = createModel(context, () => RegisiterVistorTemplateComponentModel());
_model =
createModel(context, () => RegisiterVistorTemplateComponentModel());
_model.textController1 ??= TextEditingController();
_model.textFieldFocusNode1 ??= FocusNode();
@ -87,15 +90,19 @@ class _RegisiterVistorTemplateComponentWidgetState
return false;
}
if (_model.textController1.text.isEmpty || _model.textController1.text == '') {
if (_model.textController1.text.isEmpty ||
_model.textController1.text == '') {
return false;
}
if (_model.dropDownValue == null || _model.dropDownValue!.isEmpty || _model.dropDownValue == '') {
if (_model.dropDownValue == null ||
_model.dropDownValue!.isEmpty ||
_model.dropDownValue == '') {
return false;
}
if (_model.textController2.text.isEmpty || _model.textController2.text == '') {
if (_model.textController2.text.isEmpty ||
_model.textController2.text == '') {
return false;
}
@ -103,7 +110,9 @@ class _RegisiterVistorTemplateComponentWidgetState
return false;
}
if (_model.textController4.text.isNotEmpty && _model.textController4.text != '' && ValidatorUtil.isValidEmail(_model.textController4.text) == false) {
if (_model.textController4.text.isNotEmpty &&
_model.textController4.text != '' &&
ValidatorUtil.isValidEmail(_model.textController4.text) == false) {
return false;
}
@ -129,6 +138,7 @@ class _RegisiterVistorTemplateComponentWidgetState
),
child: SingleChildScrollView(
child: Form(
key: _formKey,
autovalidateMode: AutovalidateMode.onUserInteraction,
child: Column(
mainAxisSize: MainAxisSize.min,
@ -137,7 +147,8 @@ class _RegisiterVistorTemplateComponentWidgetState
Align(
alignment: const AlignmentDirectional(-1.0, 0.0),
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(20.0, 0.0, 0.0, 15.0),
padding: const EdgeInsetsDirectional.fromSTEB(
20.0, 0.0, 0.0, 15.0),
child: Text(
FFLocalizations.of(context).getText(
'zazj5d8b' /* Preencha o formulário com os d... */,
@ -167,6 +178,7 @@ class _RegisiterVistorTemplateComponentWidgetState
keyboardType: TextInputType.number,
textInputAction: TextInputAction.next,
obscureText: false,
maxLength: 20,
decoration: InputDecoration(
isDense: true,
labelText: FFLocalizations.of(context).getText(
@ -246,6 +258,7 @@ class _RegisiterVistorTemplateComponentWidgetState
_model.textController2Validator.asValidator(context),
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp('[0-9]')),
LengthLimitingTextInputFormatter(20)
],
),
_model.textController2.text.isEmpty
@ -295,13 +308,11 @@ class _RegisiterVistorTemplateComponentWidgetState
controller: _model.textController1,
autovalidateMode: AutovalidateMode.onUserInteraction,
focusNode: _model.textFieldFocusNode1,
onChanged: (_) =>
EasyDebounce.debounce(
'_model.textFieldFocusNode1',
const Duration(
milliseconds: 500),
() => setState(() {}),
),
onChanged: (_) => EasyDebounce.debounce(
'_model.textFieldFocusNode1',
const Duration(milliseconds: 500),
() => setState(() {}),
),
autofocus: true,
textInputAction: TextInputAction.next,
obscureText: false,
@ -372,8 +383,11 @@ class _RegisiterVistorTemplateComponentWidgetState
FlutterFlowTheme.of(context).bodyMediumFamily),
),
maxLines: null,
maxLength: 80,
keyboardType: TextInputType.name,
validator: _model.textController1Validator.asValidator(context),
inputFormatters: [LengthLimitingTextInputFormatter(80)],
validator:
_model.textController1Validator.asValidator(context),
),
),
Padding(
@ -460,10 +474,12 @@ class _RegisiterVistorTemplateComponentWidgetState
),
),
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(24.0, 0.0, 24.0, 0.0),
padding: const EdgeInsetsDirectional.fromSTEB(
24.0, 0.0, 24.0, 0.0),
child: Builder(
builder: (context) {
if ((_model.uploadedLocalFile.bytes?.isNotEmpty ?? false)) {
if ((_model.uploadedLocalFile.bytes?.isNotEmpty ??
false)) {
return InkWell(
splashColor: Colors.transparent,
focusColor: Colors.transparent,
@ -495,7 +511,7 @@ class _RegisiterVistorTemplateComponentWidgetState
child: FFButtonWidget(
onPressed: () async {
final selectedMedia =
await selectMediaWithSourceBottomSheet(
await selectMediaWithSourceBottomSheet(
context: context,
// maxWidth: 300.00,
// maxHeight: 300.00,
@ -508,9 +524,10 @@ class _RegisiterVistorTemplateComponentWidgetState
// selectedMedia.every((m) =>
// validateFileFormat(
// m.storagePath, context))) {
setState(() => _model.isDataUploading = true);
setState(
() => _model.isDataUploading = true);
var selectedUploadedFiles =
<FFUploadedFile>[];
<FFUploadedFile>[];
try {
showUploadMessage(
@ -520,13 +537,14 @@ class _RegisiterVistorTemplateComponentWidgetState
);
selectedUploadedFiles = selectedMedia
.map((m) => FFUploadedFile(
name:
m.storagePath.split('/').last,
bytes: m.bytes,
height: m.dimensions?.height,
width: m.dimensions?.width,
// blurHash: m.blurHash,
))
name: m.storagePath
.split('/')
.last,
bytes: m.bytes,
height: m.dimensions?.height,
width: m.dimensions?.width,
// blurHash: m.blurHash,
))
.toList();
} finally {
ScaffoldMessenger.of(context)
@ -557,26 +575,27 @@ class _RegisiterVistorTemplateComponentWidgetState
options: FFButtonOptions(
width: double.infinity,
height: 120.0,
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 20.0),
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 20.0),
iconPadding:
const EdgeInsetsDirectional.fromSTEB(
14.0, 0.0, 0.0, 20.0),
const EdgeInsetsDirectional.fromSTEB(
14.0, 0.0, 0.0, 20.0),
color: FlutterFlowTheme.of(context)
.primaryBackground,
textStyle: FlutterFlowTheme.of(context)
.titleSmall
.override(
fontFamily: FlutterFlowTheme.of(context)
.titleSmallFamily,
color: FlutterFlowTheme.of(context)
.primaryText,
fontSize: 16.0,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.titleSmallFamily),
),
fontFamily: FlutterFlowTheme.of(context)
.titleSmallFamily,
color: FlutterFlowTheme.of(context)
.primaryText,
fontSize: 16.0,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.titleSmallFamily),
),
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).accent1,
width: 0.2,
@ -597,16 +616,16 @@ class _RegisiterVistorTemplateComponentWidgetState
style: FlutterFlowTheme.of(context)
.bodyMedium
.override(
fontFamily: FlutterFlowTheme.of(context)
.bodyMediumFamily,
color: FlutterFlowTheme.of(context)
.primaryText,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
),
fontFamily: FlutterFlowTheme.of(context)
.bodyMediumFamily,
color: FlutterFlowTheme.of(context)
.primaryText,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
),
),
),
),
@ -645,12 +664,16 @@ class _RegisiterVistorTemplateComponentWidgetState
autovalidateMode: AutovalidateMode.onUserInteraction,
autofocus: false,
textInputAction: TextInputAction.next,
maxLength: 25,
keyboardType: TextInputType.phone,
inputFormatters: [
FilteringTextInputFormatter.allow(
RegExp('[0-9, +, -, (, )]')),
LengthLimitingTextInputFormatter(25)
],
obscureText: false,
decoration: InputDecoration(
isDense: true,
labelText: FFLocalizations.of(context).getText(
@ -729,15 +752,14 @@ class _RegisiterVistorTemplateComponentWidgetState
focusNode: _model.textFieldFocusNode4,
autovalidateMode: AutovalidateMode.onUserInteraction,
autofocus: true,
onChanged: (_) =>
EasyDebounce.debounce(
'_model.textFieldFocusNode4',
const Duration(
milliseconds: 500),
() => setState(() {}),
),
onChanged: (_) => EasyDebounce.debounce(
'_model.textFieldFocusNode4',
const Duration(milliseconds: 500),
() => setState(() {}),
),
textInputAction: TextInputAction.done,
obscureText: false,
maxLength: 80,
decoration: InputDecoration(
isDense: true,
labelText: FFLocalizations.of(context).getText(
@ -805,11 +827,14 @@ class _RegisiterVistorTemplateComponentWidgetState
FlutterFlowTheme.of(context).bodyMediumFamily),
),
keyboardType: TextInputType.emailAddress,
validator: _model.textController4Validator.asValidator(context),
inputFormatters: [LengthLimitingTextInputFormatter(80)],
validator:
_model.textController4Validator.asValidator(context),
),
),
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 65.0, 0.0, 0.0),
padding:
const EdgeInsetsDirectional.fromSTEB(0.0, 65.0, 0.0, 0.0),
child: FFButtonWidget(
onPressed: _isFormValid(context)
? () async {
@ -835,29 +860,7 @@ class _RegisiterVistorTemplateComponentWidgetState
foto: 'base64;jpeg,${_model.imgBase64}',
)
.onError((e, s) async {
return await showAdaptiveDialog(
context: context,
builder: (context) {
return GestureDetector(
onTap: () => Navigator.pop(context),
child: Padding(
padding: MediaQuery.viewInsetsOf(context),
child: Dialog(
backgroundColor: Colors.transparent,
child: ThrowExceptionWidget(
msg: FFLocalizations.of(context)
.getVariableText(
ptText:
'Você esqueceu de adicionar algum dado obrigatório. Verifique se a imagem, nome, tipo e documento foram preenchidos corretamente.',
enText:
'You forgot to add some required data. Check if the image, name, type and document were filled in correctly.',
),
),
),
),
);
},
);
return await DialogUtil.errorDefault(context);
});
if (PhpGroup.postScheduleVisitorCall.error(
(_model.scheduleVisitor?.jsonBody ?? ''),
@ -895,6 +898,7 @@ class _RegisiterVistorTemplateComponentWidgetState
),
),
);
_formKey.currentState?.reset();
if (widget.source ==
'VisitorNotFoundComponent') {
Navigator.pop(context, true);

View File

@ -187,8 +187,8 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
'en': 'Service provider',
},
'pmezihb4': {
'pt': 'Selecione...',
'en': 'Please select...',
'pt': 'Selecione o tipo de pessoa...',
'en': 'Please select the type of person...',
},
'yza6i4t7': {
'pt': 'Search for an item...',
@ -286,12 +286,12 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
'en': 'Single visit',
},
'eftcs67c': {
'pt': 'Você tem alguma observação sobre está visita?',
'pt': 'Você tem alguma observação sobre esta visita?',
'en': 'Do you have any observations about this visit?',
},
't0q2vuup': {
'pt': 'Observações da Visita',
'en': 'Visit Observations',
'en': 'Visit Notes',
},
'w18iztdm': {
'pt': 'Escreva as suas observações aqui',
@ -350,7 +350,7 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
},
'cw8b3tbb': {
'pt': 'Observação da Visita',
'en': 'Notes Visit',
'en': 'Visit Notes',
},
'k4qkbv1f': {
'pt': '',
@ -482,7 +482,7 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
'en': 'Release QR Code',
},
'6z6kvmhl': {
'pt': 'Certifique-se de que o QRCode está visivel para o leitor',
'pt': 'Certifique-se de que o QRCode está visível para o leitor',
'en': '',
},
'wkjkxd2e': {
@ -1181,7 +1181,7 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
},
'ujodm2ci': {
'pt':
'Para gerar o QR Code digite a senha cadastrado no aplicativo e clique em enviar.',
'Para gerar o QR Code digite a senha cadastrada no aplicativo e clique em enviar.',
'en':
'To generate the QR Code, enter the password registered in the application and click send.',
},

View File

@ -23,7 +23,8 @@ class AcessHistoryPageWidget extends StatefulWidget {
};
AcessHistoryPageWidget({super.key, required this.opt});
@override
State<AcessHistoryPageWidget> createState() => _AcessHistoryPageWidgetState(opt);
State<AcessHistoryPageWidget> createState() =>
_AcessHistoryPageWidgetState(opt);
}
class _AcessHistoryPageWidgetState extends State<AcessHistoryPageWidget> {
@ -43,7 +44,8 @@ class _AcessHistoryPageWidgetState extends State<AcessHistoryPageWidget> {
late Future<void> _accessFuture;
List<dynamic> _accessWrap = [];
_AcessHistoryPageWidgetState(Map<String, String> opt) : selectedTypeSubject = BehaviorSubject.seeded(opt) {
_AcessHistoryPageWidgetState(Map<String, String> opt)
: selectedTypeSubject = BehaviorSubject.seeded(opt) {
selectedTypeSubject.listen((value) {});
}
@ -333,9 +335,18 @@ class _AcessHistoryPageWidgetState extends State<AcessHistoryPageWidget> {
imagePath:
'https://freaccess.com.br/freaccess/getImage.php?cliID=${AppState().cliUUID}&atividade=getFoto&Documento=${accessHistoryItem['PES_ID'] ?? ''}&tipo=${accessHistoryItem['PES_TIPO'] ?? ''}',
labelsHashMap: Map<String, String>.from({
'Nome:': accessHistoryItem['PES_NOME'] ?? '',
'Acesso:': accessHistoryItem['ACE_DATAHORA'] ?? '',
'Setor:': accessHistoryItem['SET_DESCRICAO'] ?? '',
FFLocalizations.of(context).getVariableText(
ptText: 'Nome:',
enText: 'Name:',
): accessHistoryItem['PES_NOME'] ?? '',
FFLocalizations.of(context).getVariableText(
ptText: 'Acesso:',
enText: 'Access:',
): accessHistoryItem['ACE_DATAHORA'] ?? '',
FFLocalizations.of(context).getVariableText(
ptText: 'Setor',
enText: 'Sector',
): accessHistoryItem['SET_DESCRICAO'] ?? '',
}),
statusHashMap: [
accessHistoryItem['PES_TIPO'] == 'O'

View File

@ -225,15 +225,18 @@ class _HomePageWidgetState extends State<HomePageWidget> {
}
Widget createBody() {
return Container(
color: FlutterFlowTheme.of(context).primaryBackground,
child: wrapWithModel(
model: _model.menuComponentModel,
updateCallback: () => setState(() {}),
child: const MenuComponentWidget(
expandable: true,
style: MenuView.list_grid,
item: MenuItem.button,
return SingleChildScrollView(
physics: const AlwaysScrollableScrollPhysics(),
child: Container(
color: FlutterFlowTheme.of(context).primaryBackground,
child: wrapWithModel(
model: _model.menuComponentModel,
updateCallback: () => setState(() {}),
child: const MenuComponentWidget(
expandable: true,
style: MenuView.list_grid,
item: MenuItem.button,
),
),
),
);

View File

@ -43,22 +43,24 @@ class PreferencesPageModel with ChangeNotifier {
);
},
).then((value) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
FFLocalizations.of(context).getVariableText(
enText: 'Fingerprint changed successfully',
ptText: 'Impressão digital alterada com sucesso',
),
style: TextStyle(color: FlutterFlowTheme.of(context).info)),
backgroundColor: FlutterFlowTheme.of(context).success,
duration: const Duration(seconds: 3),
behavior: SnackBarBehavior.floating,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30),
if (value) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
FFLocalizations.of(context).getVariableText(
enText: 'Fingerprint changed successfully',
ptText: 'Impressão digital alterada com sucesso',
),
style: TextStyle(color: FlutterFlowTheme.of(context).info)),
backgroundColor: FlutterFlowTheme.of(context).success,
duration: const Duration(seconds: 3),
behavior: SnackBarBehavior.floating,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30),
),
),
),
);
);
}
}).catchError((err, stack) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(

View File

@ -1747,7 +1747,7 @@ Widget scheduleVisit(BuildContext context,
FFLocalizations.of(context).getVariableText(
ptText: 'Inativo',
enText: 'Inactive',
): FlutterFlowTheme.of(context).warning,
): FlutterFlowTheme.of(context).success,
}),
],
onTapCardItemAction: () async {},

View File

@ -72,8 +72,9 @@ class CustomDrawer extends StatelessWidget {
),
),
),
SizedBox(width: 10),
const SizedBox(width: 10),
Expanded(
flex: 1,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@ -161,16 +162,14 @@ class CustomDrawer extends StatelessWidget {
);
}
Expanded _buildDrawerBody() {
return Expanded(
child: wrapWithModel(
model: model.menuComponentModel,
updateCallback: () {},
child: const MenuComponentWidget(
expandable: false,
style: MenuView.list,
item: MenuItem.tile,
),
Widget _buildDrawerBody() {
return wrapWithModel(
model: model.menuComponentModel,
updateCallback: () {},
child: const MenuComponentWidget(
expandable: false,
style: MenuView.list,
item: MenuItem.tile,
),
);
}