feat: Add access history and liberation history pages

This commit is contained in:
Jonatas Antunes Messias 2024-06-21 11:17:46 -03:00
commit 15b8faaf4a
16 changed files with 3479 additions and 630 deletions

View File

@ -44,8 +44,8 @@
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
6436409627A31CD500820AF7 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/InfoPlist.strings; sourceTree = "<group>"; }; 6436409227A31CD100820AF7 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/InfoPlist.strings; sourceTree = "<group>"; };
6436409C27A31CD700820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; }; 6436409227A31CD000820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
@ -225,8 +225,8 @@
6436409C27A31CD800820AF7 /* InfoPlist.strings */ = { 6436409C27A31CD800820AF7 /* InfoPlist.strings */ = {
isa = PBXVariantGroup; isa = PBXVariantGroup;
children = ( children = (
6436409627A31CD500820AF7 /* pt */, 6436409227A31CD100820AF7 /* pt */,
6436409C27A31CD700820AF7 /* en */, 6436409227A31CD000820AF7 /* en */,
); );
name = InfoPlist.strings; name = InfoPlist.strings;
sourceTree = "<group>"; sourceTree = "<group>";

View File

@ -1176,6 +1176,8 @@ class GetVisitsCall {
String? userUUID = '', String? userUUID = '',
String? cliID = '', String? cliID = '',
String? atividade = '', String? atividade = '',
int? pageSize,
int? pageNumber,
}) async { }) async {
final baseUrl = PhpGroup.getBaseUrl(); final baseUrl = PhpGroup.getBaseUrl();
@ -1191,6 +1193,8 @@ class GetVisitsCall {
'userUUID': userUUID, 'userUUID': userUUID,
'cliID': cliID, 'cliID': cliID,
'atividade': atividade, 'atividade': atividade,
'pageSize': pageSize,
'pageNumber': pageNumber,
}, },
bodyType: BodyType.X_WWW_FORM_URL_ENCODED, bodyType: BodyType.X_WWW_FORM_URL_ENCODED,
returnBody: true, returnBody: true,

View File

@ -53,6 +53,12 @@ class _ForgotPasswordTemplateComponentWidgetState
), ),
decoration: BoxDecoration( decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground, color: FlutterFlowTheme.of(context).primaryBackground,
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(0.0),
bottomRight: Radius.circular(0.0),
topLeft: Radius.circular(15.0),
topRight: Radius.circular(15.0),
),
), ),
child: Column( child: Column(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
@ -151,6 +157,7 @@ class _ForgotPasswordTemplateComponentWidgetState
autofillHints: const [AutofillHints.email], autofillHints: const [AutofillHints.email],
obscureText: false, obscureText: false,
decoration: InputDecoration( decoration: InputDecoration(
isDense: true,
labelText: FFLocalizations.of(context).getText( labelText: FFLocalizations.of(context).getText(
'mtz8l7ft' /* Email */, 'mtz8l7ft' /* Email */,
), ),

View File

@ -7,19 +7,45 @@ class SignInTemplateComponentModel
extends FlutterFlowModel<SignInTemplateComponentWidget> { extends FlutterFlowModel<SignInTemplateComponentWidget> {
/// State fields for stateful widgets in this component. /// State fields for stateful widgets in this component.
final formKey = GlobalKey<FormState>();
// State field(s) for emailAddress widget. // State field(s) for emailAddress widget.
FocusNode? emailAddressFocusNode; FocusNode? emailAddressFocusNode;
TextEditingController? emailAddressTextController; TextEditingController? emailAddressTextController;
String? Function(BuildContext, String?)? emailAddressTextControllerValidator; String? Function(BuildContext, String?)? emailAddressTextControllerValidator;
String? _emailAddressTextControllerValidator(
BuildContext context, String? val) {
if (val == null || val.isEmpty) {
return FFLocalizations.of(context).getText(
'xhnawzcb' /* Campo é necessário */,
);
}
if (!RegExp(kTextValidatorEmailRegex).hasMatch(val)) {
return 'Has to be a valid email address.';
}
return null;
}
// State field(s) for password widget. // State field(s) for password widget.
FocusNode? passwordFocusNode; FocusNode? passwordFocusNode;
TextEditingController? passwordTextController; TextEditingController? passwordTextController;
late bool passwordVisibility; late bool passwordVisibility;
String? Function(BuildContext, String?)? passwordTextControllerValidator; String? Function(BuildContext, String?)? passwordTextControllerValidator;
String? _passwordTextControllerValidator(BuildContext context, String? val) {
if (val == null || val.isEmpty) {
return FFLocalizations.of(context).getText(
'9cs5wlmc' /* Campo é necessário */,
);
}
return null;
}
@override @override
void initState(BuildContext context) { void initState(BuildContext context) {
emailAddressTextControllerValidator = _emailAddressTextControllerValidator;
passwordVisibility = false; passwordVisibility = false;
passwordTextControllerValidator = _passwordTextControllerValidator;
} }
@override @override

View File

@ -201,17 +201,25 @@ class _SignInTemplateComponentWidgetState
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
crossAxisAlignment: crossAxisAlignment:
CrossAxisAlignment.center, CrossAxisAlignment.center,
children: [
Form(
key: _model.formKey,
autovalidateMode:
AutovalidateMode.always,
child: Column(
mainAxisSize: MainAxisSize.max,
children: [ children: [
Padding( Padding(
padding: const EdgeInsetsDirectional.fromSTEB( padding: const EdgeInsetsDirectional
.fromSTEB(
0.0, 0.0, 0.0, 16.0), 0.0, 0.0, 0.0, 16.0),
child: SizedBox( child: SizedBox(
width: double.infinity, width: double.infinity,
child: TextFormField( child: TextFormField(
controller: _model controller: _model
.emailAddressTextController, .emailAddressTextController,
focusNode: focusNode: _model
_model.emailAddressFocusNode, .emailAddressFocusNode,
autofocus: false, autofocus: false,
textCapitalization: textCapitalization:
TextCapitalization.none, TextCapitalization.none,
@ -219,95 +227,114 @@ class _SignInTemplateComponentWidgetState
TextInputAction.next, TextInputAction.next,
obscureText: false, obscureText: false,
decoration: InputDecoration( decoration: InputDecoration(
isDense: true,
labelText: labelText:
FFLocalizations.of(context) FFLocalizations.of(
context)
.getText( .getText(
'1ltg0ylb' /* Email */, '1ltg0ylb' /* Email */,
), ),
labelStyle: FlutterFlowTheme.of( labelStyle: FlutterFlowTheme
context) .of(context)
.labelLarge .labelLarge
.override( .override(
fontFamily: fontFamily:
'Plus Jakarta Sans', 'Plus Jakarta Sans',
color: FlutterFlowTheme.of( color: FlutterFlowTheme
context) .of(context)
.primaryText, .primaryText,
fontSize: 16.0, fontSize: 16.0,
letterSpacing: 0.0, letterSpacing: 0.0,
fontWeight: FontWeight.w500, fontWeight:
useGoogleFonts: GoogleFonts FontWeight.w500,
useGoogleFonts:
GoogleFonts
.asMap() .asMap()
.containsKey( .containsKey(
'Plus Jakarta Sans'), 'Plus Jakarta Sans'),
), ),
enabledBorder: OutlineInputBorder( enabledBorder:
OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.customColor1, .customColor1,
width: 0.5, width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
focusedBorder: OutlineInputBorder( focusedBorder:
OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.success, .success,
width: 0.5, width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
errorBorder: OutlineInputBorder( errorBorder:
OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.error, .error,
width: 0.5, width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
focusedErrorBorder: focusedErrorBorder:
OutlineInputBorder( OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.error, .error,
width: 0.5, width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
suffixIcon: Icon( suffixIcon: Icon(
Icons.email, Icons.email,
color: color:
FlutterFlowTheme.of(context) FlutterFlowTheme.of(
context)
.accent1, .accent1,
size: 22.0, size: 22.0,
), ),
), ),
style: FlutterFlowTheme.of(context) style: FlutterFlowTheme.of(
context)
.bodyLarge .bodyLarge
.override( .override(
fontFamily: fontFamily:
'Plus Jakarta Sans', 'Plus Jakarta Sans',
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.primaryText, .primaryText,
fontSize: 16.0, fontSize: 16.0,
letterSpacing: 0.0, letterSpacing: 0.0,
fontWeight: FontWeight.w500, fontWeight:
FontWeight.w500,
useGoogleFonts: GoogleFonts useGoogleFonts: GoogleFonts
.asMap() .asMap()
.containsKey( .containsKey(
'Plus Jakarta Sans'), 'Plus Jakarta Sans'),
), ),
keyboardType: keyboardType: TextInputType
TextInputType.emailAddress, .emailAddress,
validator: _model validator: _model
.emailAddressTextControllerValidator .emailAddressTextControllerValidator
.asValidator(context), .asValidator(context),
@ -315,80 +342,98 @@ class _SignInTemplateComponentWidgetState
), ),
), ),
Padding( Padding(
padding: const EdgeInsetsDirectional.fromSTEB( padding: const EdgeInsetsDirectional
.fromSTEB(
0.0, 0.0, 0.0, 16.0), 0.0, 0.0, 0.0, 16.0),
child: SizedBox( child: SizedBox(
width: double.infinity, width: double.infinity,
child: TextFormField( child: TextFormField(
controller: controller: _model
_model.passwordTextController, .passwordTextController,
focusNode: _model.passwordFocusNode, focusNode:
_model.passwordFocusNode,
autofocus: false, autofocus: false,
textInputAction: textInputAction:
TextInputAction.send, TextInputAction.send,
obscureText: obscureText: !_model
!_model.passwordVisibility, .passwordVisibility,
decoration: InputDecoration( decoration: InputDecoration(
isDense: true,
labelText: labelText:
FFLocalizations.of(context) FFLocalizations.of(
context)
.getText( .getText(
'2x19ce8k' /* Senha */, '2x19ce8k' /* Senha */,
), ),
labelStyle: FlutterFlowTheme.of( labelStyle: FlutterFlowTheme
context) .of(context)
.labelLarge .labelLarge
.override( .override(
fontFamily: fontFamily:
'Plus Jakarta Sans', 'Plus Jakarta Sans',
color: FlutterFlowTheme.of( color: FlutterFlowTheme
context) .of(context)
.primaryText, .primaryText,
fontSize: 16.0, fontSize: 16.0,
letterSpacing: 0.0, letterSpacing: 0.0,
fontWeight: FontWeight.w500, fontWeight:
useGoogleFonts: GoogleFonts FontWeight.w500,
useGoogleFonts:
GoogleFonts
.asMap() .asMap()
.containsKey( .containsKey(
'Plus Jakarta Sans'), 'Plus Jakarta Sans'),
), ),
enabledBorder: OutlineInputBorder( enabledBorder:
OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.customColor1, .customColor1,
width: 0.5, width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
focusedBorder: OutlineInputBorder( focusedBorder:
OutlineInputBorder(
borderSide: const BorderSide( borderSide: const BorderSide(
color: Color(0xFF1AAB5F), color:
width: 0.5, Color(0xFF1AAB5F),
width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
errorBorder: OutlineInputBorder( errorBorder:
OutlineInputBorder(
borderSide: const BorderSide( borderSide: const BorderSide(
color: Color(0xFFFF5963), color:
width: 0.5, Color(0xFFFF5963),
width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
focusedErrorBorder: focusedErrorBorder:
OutlineInputBorder( OutlineInputBorder(
borderSide: const BorderSide( borderSide: const BorderSide(
color: Color(0xFFFF5963), color:
width: 0.5, Color(0xFFFF5963),
width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
filled: true, filled: true,
fillColor: fillColor:
FlutterFlowTheme.of(context) FlutterFlowTheme.of(
context)
.primaryBackground, .primaryBackground,
suffixIcon: InkWell( suffixIcon: InkWell(
onTap: () => setState( onTap: () => setState(
@ -405,24 +450,28 @@ class _SignInTemplateComponentWidgetState
.visibility_outlined .visibility_outlined
: Icons : Icons
.visibility_off_outlined, .visibility_off_outlined,
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.accent1, .accent1,
size: 24.0, size: 24.0,
), ),
), ),
), ),
style: FlutterFlowTheme.of(context) style: FlutterFlowTheme.of(
context)
.bodyLarge .bodyLarge
.override( .override(
fontFamily: fontFamily:
'Plus Jakarta Sans', 'Plus Jakarta Sans',
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.primaryText, .primaryText,
fontSize: 16.0, fontSize: 16.0,
letterSpacing: 0.0, letterSpacing: 0.0,
fontWeight: FontWeight.w500, fontWeight:
FontWeight.w500,
useGoogleFonts: GoogleFonts useGoogleFonts: GoogleFonts
.asMap() .asMap()
.containsKey( .containsKey(
@ -434,6 +483,9 @@ class _SignInTemplateComponentWidgetState
), ),
), ),
), ),
],
),
),
Builder( Builder(
builder: (context) { builder: (context) {
if (MediaQuery.sizeOf(context).width < if (MediaQuery.sizeOf(context).width <
@ -448,12 +500,21 @@ class _SignInTemplateComponentWidgetState
.fromSTEB( .fromSTEB(
0.0, 0.0, 0.0, 16.0), 0.0, 0.0, 0.0, 16.0),
child: FFButtonWidget( child: FFButtonWidget(
onPressed: ((_model.emailAddressTextController onPressed: (((_model.emailAddressTextController
.text == .text ==
'') && '') ||
(_model.passwordTextController ((_model.emailAddressFocusNode
?.hasFocus ??
false) !=
null)) &&
((_model.emailAddressTextController
.text == .text ==
'')) '') ||
((_model.passwordTextController.text ==
'') ||
((_model.passwordFocusNode?.hasFocus ??
false) !=
null))))
? null ? null
: () async { : () async {
await action_blocks await action_blocks
@ -525,7 +586,7 @@ class _SignInTemplateComponentWidgetState
BorderRadius.circular( BorderRadius.circular(
12.0), 12.0),
disabledColor: disabledColor:
const Color(0x951AAB5F), const Color(0xE81AAB5F),
), ),
showLoadingIndicator: false, showLoadingIndicator: false,
), ),
@ -617,9 +678,34 @@ class _SignInTemplateComponentWidgetState
.fromSTEB(0.0, 0.0, .fromSTEB(0.0, 0.0,
0.0, 16.0), 0.0, 16.0),
child: FFButtonWidget( child: FFButtonWidget(
onPressed: () { onPressed: (((_model.emailAddressTextController
print( .text ==
'signInButtonLoginForm pressed ...'); '') ||
((_model.emailAddressFocusNode
?.hasFocus ??
false) !=
null)) &&
((_model.emailAddressTextController
.text ==
'') ||
((_model.passwordTextController.text ==
'') ||
((_model.passwordFocusNode?.hasFocus ??
false) !=
null))))
? null
: () async {
await action_blocks
.singInActionApp(
context,
emailAdress: _model
.emailAddressTextController
.text,
password: _model
.passwordTextController
.text,
);
setState(() {});
}, },
text: FFLocalizations.of( text: FFLocalizations.of(
context) context)
@ -678,6 +764,8 @@ class _SignInTemplateComponentWidgetState
borderRadius: borderRadius:
BorderRadius BorderRadius
.circular(12.0), .circular(12.0),
disabledColor:
const Color(0xE81AAB5F),
), ),
showLoadingIndicator: showLoadingIndicator:
false, false,

View File

@ -7,28 +7,74 @@ class SignUpTemplateComponentModel
extends FlutterFlowModel<SignUpTemplateComponentWidget> { extends FlutterFlowModel<SignUpTemplateComponentWidget> {
/// State fields for stateful widgets in this component. /// State fields for stateful widgets in this component.
final formKey = GlobalKey<FormState>();
// State field(s) for nameRegisterForm widget. // State field(s) for nameRegisterForm widget.
FocusNode? nameRegisterFormFocusNode; FocusNode? nameRegisterFormFocusNode;
TextEditingController? nameRegisterFormTextController; TextEditingController? nameRegisterFormTextController;
String? Function(BuildContext, String?)? String? Function(BuildContext, String?)?
nameRegisterFormTextControllerValidator; nameRegisterFormTextControllerValidator;
String? _nameRegisterFormTextControllerValidator(
BuildContext context, String? val) {
if (val == null || val.isEmpty) {
return FFLocalizations.of(context).getText(
'3bs10dfq' /* Campo é necessário */,
);
}
if (!RegExp(kTextValidatorUsernameRegex).hasMatch(val)) {
return 'Must start with a letter and can only contain letters, digits and - or _.';
}
return null;
}
// State field(s) for emailRegisterForm widget. // State field(s) for emailRegisterForm widget.
FocusNode? emailRegisterFormFocusNode; FocusNode? emailRegisterFormFocusNode;
TextEditingController? emailRegisterFormTextController; TextEditingController? emailRegisterFormTextController;
String? Function(BuildContext, String?)? String? Function(BuildContext, String?)?
emailRegisterFormTextControllerValidator; emailRegisterFormTextControllerValidator;
String? _emailRegisterFormTextControllerValidator(
BuildContext context, String? val) {
if (val == null || val.isEmpty) {
return FFLocalizations.of(context).getText(
'mlvw63yj' /* Campo é necessário */,
);
}
if (!RegExp(kTextValidatorEmailRegex).hasMatch(val)) {
return 'Has to be a valid email address.';
}
return null;
}
// State field(s) for passwordRegisterForm widget. // State field(s) for passwordRegisterForm widget.
FocusNode? passwordRegisterFormFocusNode; FocusNode? passwordRegisterFormFocusNode;
TextEditingController? passwordRegisterFormTextController; TextEditingController? passwordRegisterFormTextController;
late bool passwordRegisterFormVisibility; late bool passwordRegisterFormVisibility;
String? Function(BuildContext, String?)? String? Function(BuildContext, String?)?
passwordRegisterFormTextControllerValidator; passwordRegisterFormTextControllerValidator;
String? _passwordRegisterFormTextControllerValidator(
BuildContext context, String? val) {
if (val == null || val.isEmpty) {
return FFLocalizations.of(context).getText(
'6nn79lmh' /* Campo é necessário */,
);
}
return null;
}
// Stores action output result for [Action Block - signUpActionApp] action in SignUpButtonRegisterForm widget. // Stores action output result for [Action Block - signUpActionApp] action in SignUpButtonRegisterForm widget.
bool? signUp; bool? signUp;
@override @override
void initState(BuildContext context) { void initState(BuildContext context) {
nameRegisterFormTextControllerValidator =
_nameRegisterFormTextControllerValidator;
emailRegisterFormTextControllerValidator =
_emailRegisterFormTextControllerValidator;
passwordRegisterFormVisibility = false; passwordRegisterFormVisibility = false;
passwordRegisterFormTextControllerValidator =
_passwordRegisterFormTextControllerValidator;
} }
@override @override

View File

@ -205,9 +205,17 @@ class _SignUpTemplateComponentWidgetState
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
crossAxisAlignment: crossAxisAlignment:
CrossAxisAlignment.center, CrossAxisAlignment.center,
children: [
Form(
key: _model.formKey,
autovalidateMode:
AutovalidateMode.disabled,
child: Column(
mainAxisSize: MainAxisSize.max,
children: [ children: [
Padding( Padding(
padding: const EdgeInsetsDirectional.fromSTEB( padding: const EdgeInsetsDirectional
.fromSTEB(
0.0, 0.0, 0.0, 16.0), 0.0, 0.0, 0.0, 16.0),
child: SizedBox( child: SizedBox(
width: double.infinity, width: double.infinity,
@ -219,105 +227,129 @@ class _SignUpTemplateComponentWidgetState
onChanged: (_) => onChanged: (_) =>
EasyDebounce.debounce( EasyDebounce.debounce(
'_model.nameRegisterFormTextController', '_model.nameRegisterFormTextController',
const Duration(milliseconds: 2000), const Duration(
milliseconds: 2000),
() => setState(() {}), () => setState(() {}),
), ),
autofocus: false, autofocus: false,
autofillHints: const [AutofillHints.name], autofillHints: const [
AutofillHints.name
],
obscureText: false, obscureText: false,
decoration: InputDecoration( decoration: InputDecoration(
isDense: true,
labelText: labelText:
FFLocalizations.of(context) FFLocalizations.of(
context)
.getText( .getText(
'3corpwhd' /* Nome */, '3corpwhd' /* Nome */,
), ),
labelStyle: FlutterFlowTheme.of( labelStyle: FlutterFlowTheme
context) .of(context)
.labelLarge .labelLarge
.override( .override(
fontFamily: fontFamily:
'Plus Jakarta Sans', 'Plus Jakarta Sans',
color: FlutterFlowTheme.of( color: FlutterFlowTheme
context) .of(context)
.primaryText, .primaryText,
fontSize: 16.0, fontSize: 16.0,
letterSpacing: 0.0, letterSpacing: 0.0,
fontWeight: FontWeight.w500, fontWeight:
useGoogleFonts: GoogleFonts FontWeight.w500,
useGoogleFonts:
GoogleFonts
.asMap() .asMap()
.containsKey( .containsKey(
'Plus Jakarta Sans'), 'Plus Jakarta Sans'),
), ),
enabledBorder: OutlineInputBorder( enabledBorder:
OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.customColor1, .customColor1,
width: 0.5, width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
focusedBorder: OutlineInputBorder( focusedBorder:
OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.success, .success,
width: 0.5, width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
errorBorder: OutlineInputBorder( errorBorder:
OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.error, .error,
width: 0.5, width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
focusedErrorBorder: focusedErrorBorder:
OutlineInputBorder( OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.error, .error,
width: 0.5, width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
filled: true, filled: true,
fillColor: fillColor:
FlutterFlowTheme.of(context) FlutterFlowTheme.of(
context)
.primaryBackground, .primaryBackground,
suffixIcon: Icon( suffixIcon: Icon(
Icons.person, Icons.person,
color: color:
FlutterFlowTheme.of(context) FlutterFlowTheme.of(
context)
.accent1, .accent1,
size: 22.0, size: 22.0,
), ),
), ),
style: FlutterFlowTheme.of(context) style: FlutterFlowTheme.of(
context)
.bodyLarge .bodyLarge
.override( .override(
fontFamily: fontFamily:
'Plus Jakarta Sans', 'Plus Jakarta Sans',
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.primaryText, .primaryText,
fontSize: 16.0, fontSize: 16.0,
letterSpacing: 0.0, letterSpacing: 0.0,
fontWeight: FontWeight.w500, fontWeight:
FontWeight.w500,
useGoogleFonts: GoogleFonts useGoogleFonts: GoogleFonts
.asMap() .asMap()
.containsKey( .containsKey(
'Plus Jakarta Sans'), 'Plus Jakarta Sans'),
), ),
keyboardType: TextInputType.name, keyboardType:
TextInputType.name,
validator: _model validator: _model
.nameRegisterFormTextControllerValidator .nameRegisterFormTextControllerValidator
.asValidator(context), .asValidator(context),
@ -325,7 +357,8 @@ class _SignUpTemplateComponentWidgetState
), ),
), ),
Padding( Padding(
padding: const EdgeInsetsDirectional.fromSTEB( padding: const EdgeInsetsDirectional
.fromSTEB(
0.0, 0.0, 0.0, 16.0), 0.0, 0.0, 0.0, 16.0),
child: SizedBox( child: SizedBox(
width: double.infinity, width: double.infinity,
@ -337,7 +370,8 @@ class _SignUpTemplateComponentWidgetState
onChanged: (_) => onChanged: (_) =>
EasyDebounce.debounce( EasyDebounce.debounce(
'_model.emailRegisterFormTextController', '_model.emailRegisterFormTextController',
const Duration(milliseconds: 2000), const Duration(
milliseconds: 2000),
() => setState(() {}), () => setState(() {}),
), ),
autofocus: false, autofocus: false,
@ -346,99 +380,119 @@ class _SignUpTemplateComponentWidgetState
], ],
obscureText: false, obscureText: false,
decoration: InputDecoration( decoration: InputDecoration(
isDense: true,
labelText: labelText:
FFLocalizations.of(context) FFLocalizations.of(
context)
.getText( .getText(
'80wonb69' /* Email */, '80wonb69' /* Email */,
), ),
labelStyle: FlutterFlowTheme.of( labelStyle: FlutterFlowTheme
context) .of(context)
.labelLarge .labelLarge
.override( .override(
fontFamily: fontFamily:
'Plus Jakarta Sans', 'Plus Jakarta Sans',
color: FlutterFlowTheme.of( color: FlutterFlowTheme
context) .of(context)
.primaryText, .primaryText,
fontSize: 16.0, fontSize: 16.0,
letterSpacing: 0.0, letterSpacing: 0.0,
fontWeight: FontWeight.w500, fontWeight:
useGoogleFonts: GoogleFonts FontWeight.w500,
useGoogleFonts:
GoogleFonts
.asMap() .asMap()
.containsKey( .containsKey(
'Plus Jakarta Sans'), 'Plus Jakarta Sans'),
), ),
enabledBorder: OutlineInputBorder( enabledBorder:
OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.primaryText, .primaryText,
width: 0.5, width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
focusedBorder: OutlineInputBorder( focusedBorder:
OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.success, .success,
width: 0.5, width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
errorBorder: OutlineInputBorder( errorBorder:
OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.error, .error,
width: 0.5, width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
focusedErrorBorder: focusedErrorBorder:
OutlineInputBorder( OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.error, .error,
width: 0.5, width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
filled: true, filled: true,
fillColor: fillColor:
FlutterFlowTheme.of(context) FlutterFlowTheme.of(
context)
.primaryBackground, .primaryBackground,
suffixIcon: Icon( suffixIcon: Icon(
Icons.email, Icons.email,
color: color:
FlutterFlowTheme.of(context) FlutterFlowTheme.of(
context)
.accent1, .accent1,
size: 22.0, size: 22.0,
), ),
), ),
style: FlutterFlowTheme.of(context) style: FlutterFlowTheme.of(
context)
.bodyLarge .bodyLarge
.override( .override(
fontFamily: fontFamily:
'Plus Jakarta Sans', 'Plus Jakarta Sans',
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.customColor1, .customColor1,
fontSize: 16.0, fontSize: 16.0,
letterSpacing: 0.0, letterSpacing: 0.0,
fontWeight: FontWeight.w500, fontWeight:
FontWeight.w500,
useGoogleFonts: GoogleFonts useGoogleFonts: GoogleFonts
.asMap() .asMap()
.containsKey( .containsKey(
'Plus Jakarta Sans'), 'Plus Jakarta Sans'),
), ),
keyboardType: keyboardType: TextInputType
TextInputType.emailAddress, .emailAddress,
validator: _model validator: _model
.emailRegisterFormTextControllerValidator .emailRegisterFormTextControllerValidator
.asValidator(context), .asValidator(context),
@ -446,7 +500,8 @@ class _SignUpTemplateComponentWidgetState
), ),
), ),
Padding( Padding(
padding: const EdgeInsetsDirectional.fromSTEB( padding: const EdgeInsetsDirectional
.fromSTEB(
0.0, 0.0, 0.0, 16.0), 0.0, 0.0, 0.0, 16.0),
child: SizedBox( child: SizedBox(
width: double.infinity, width: double.infinity,
@ -458,7 +513,8 @@ class _SignUpTemplateComponentWidgetState
onChanged: (_) => onChanged: (_) =>
EasyDebounce.debounce( EasyDebounce.debounce(
'_model.passwordRegisterFormTextController', '_model.passwordRegisterFormTextController',
const Duration(milliseconds: 2000), const Duration(
milliseconds: 2000),
() => setState(() {}), () => setState(() {}),
), ),
autofocus: false, autofocus: false,
@ -468,66 +524,82 @@ class _SignUpTemplateComponentWidgetState
obscureText: !_model obscureText: !_model
.passwordRegisterFormVisibility, .passwordRegisterFormVisibility,
decoration: InputDecoration( decoration: InputDecoration(
isDense: true,
labelText: labelText:
FFLocalizations.of(context) FFLocalizations.of(
context)
.getText( .getText(
'0firji8l' /* Senha */, '0firji8l' /* Senha */,
), ),
labelStyle: FlutterFlowTheme.of( labelStyle: FlutterFlowTheme
context) .of(context)
.labelLarge .labelLarge
.override( .override(
fontFamily: fontFamily:
'Plus Jakarta Sans', 'Plus Jakarta Sans',
color: FlutterFlowTheme.of( color: FlutterFlowTheme
context) .of(context)
.primaryText, .primaryText,
fontSize: 16.0, fontSize: 16.0,
letterSpacing: 0.0, letterSpacing: 0.0,
fontWeight: FontWeight.w500, fontWeight:
useGoogleFonts: GoogleFonts FontWeight.w500,
useGoogleFonts:
GoogleFonts
.asMap() .asMap()
.containsKey( .containsKey(
'Plus Jakarta Sans'), 'Plus Jakarta Sans'),
), ),
enabledBorder: OutlineInputBorder( enabledBorder:
OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.customColor1, .customColor1,
width: 0.5, width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
focusedBorder: OutlineInputBorder( focusedBorder:
OutlineInputBorder(
borderSide: const BorderSide( borderSide: const BorderSide(
color: Color(0xFF1AAB5F), color:
width: 0.5, Color(0xFF1AAB5F),
width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
errorBorder: OutlineInputBorder( errorBorder:
OutlineInputBorder(
borderSide: const BorderSide( borderSide: const BorderSide(
color: Color(0xFFFF5963), color:
width: 0.5, Color(0xFFFF5963),
width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
focusedErrorBorder: focusedErrorBorder:
OutlineInputBorder( OutlineInputBorder(
borderSide: const BorderSide( borderSide: const BorderSide(
color: Color(0xFFFF5963), color:
width: 0.5, Color(0xFFFF5963),
width: 0.25,
), ),
borderRadius: borderRadius:
BorderRadius.circular(12.0), BorderRadius.circular(
12.0),
), ),
filled: true, filled: true,
fillColor: fillColor:
FlutterFlowTheme.of(context) FlutterFlowTheme.of(
context)
.primaryBackground, .primaryBackground,
suffixIcon: InkWell( suffixIcon: InkWell(
onTap: () => setState( onTap: () => setState(
@ -544,24 +616,28 @@ class _SignUpTemplateComponentWidgetState
.visibility_outlined .visibility_outlined
: Icons : Icons
.visibility_off_outlined, .visibility_off_outlined,
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.accent1, .accent1,
size: 24.0, size: 24.0,
), ),
), ),
), ),
style: FlutterFlowTheme.of(context) style: FlutterFlowTheme.of(
context)
.bodyLarge .bodyLarge
.override( .override(
fontFamily: fontFamily:
'Plus Jakarta Sans', 'Plus Jakarta Sans',
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.primaryText, .primaryText,
fontSize: 16.0, fontSize: 16.0,
letterSpacing: 0.0, letterSpacing: 0.0,
fontWeight: FontWeight.w500, fontWeight:
FontWeight.w500,
useGoogleFonts: GoogleFonts useGoogleFonts: GoogleFonts
.asMap() .asMap()
.containsKey( .containsKey(
@ -573,13 +649,38 @@ class _SignUpTemplateComponentWidgetState
), ),
), ),
), ),
],
),
),
Padding( Padding(
padding: const EdgeInsetsDirectional.fromSTEB( padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 16.0), 0.0, 0.0, 0.0, 16.0),
child: FFButtonWidget( child: FFButtonWidget(
onPressed: () async { onPressed: (((_model.nameRegisterFormTextController
.text !=
'') ||
((_model.nameRegisterFormFocusNode?.hasFocus ??
false) !=
null)) &&
((_model.emailRegisterFormTextController
.text !=
'') ||
((_model.emailRegisterFormFocusNode
?.hasFocus ??
false) !=
null)) &&
((_model.passwordRegisterFormTextController
.text !=
'') ||
((_model.passwordRegisterFormFocusNode
?.hasFocus ??
false) !=
null)))
? null
: () async {
var shouldSetState = false; var shouldSetState = false;
_model.signUp = await action_blocks _model.signUp =
await action_blocks
.signUpActionApp( .signUpActionApp(
context, context,
name: _model name: _model

View File

@ -414,6 +414,84 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
'en': '', 'en': '',
}, },
}, },
// acessHistoryPage
{
'rjdp7j73': {
'pt': 'Visitantes',
'en': 'Visitors',
},
'nhxs49l9': {
'pt': 'Visitante: ',
'en': 'Visitor:',
},
'x9jg3kfx': {
'pt': 'Início em: ',
'en': 'Beginning in:',
},
'dh8ib64e': {
'pt': 'Fim em: ',
'en': 'End in:',
},
'1qa1ok6g': {
'pt': 'Todos',
'en': 'All',
},
'ftl6katl': {
'pt': 'Visitante: ',
'en': 'Visitor:',
},
'dbquxozy': {
'pt': 'Início em: ',
'en': 'Beginning in:',
},
'gjw5vcc6': {
'pt': 'Fim em: ',
'en': 'End in:',
},
'rvac7h59': {
'pt': 'Moradores',
'en': 'Residents',
},
'0xbh5f3a': {
'pt': 'Visitante: ',
'en': 'Visitor:',
},
'gq3pp39j': {
'pt': 'Início em: ',
'en': 'Beginning in:',
},
'7iaxwb8o': {
'pt': 'Fim em: ',
'en': 'End in:',
},
'5uzkio93': {
'pt': 'Home',
'en': '',
},
},
// liberationHistory
{
'dy0mx15f': {
'pt': 'Label here...',
'en': '',
},
'f77je6tr': {
'pt': 'Visitante: ',
'en': 'Visitor:',
},
'dkzewokx': {
'pt': 'Início em: ',
'en': 'Beginning in:',
},
'qi4mjhtw': {
'pt': 'Fim em: ',
'en': 'End in:',
},
'1skj43ye': {
'pt': 'Home',
'en': '',
},
},
// visitorDetailsModalTemplateComponent // visitorDetailsModalTemplateComponent
{ {
'kqzf7nx2': { 'kqzf7nx2': {
@ -723,6 +801,22 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
'pt': 'Senha', 'pt': 'Senha',
'en': 'Password', 'en': 'Password',
}, },
'xhnawzcb': {
'pt': 'Campo é necessário',
'en': 'Field is required',
},
'2ib9bf67': {
'pt': 'Please choose an option from the dropdown',
'en': '',
},
'9cs5wlmc': {
'pt': 'Campo é necessário',
'en': 'Field is required',
},
'rkxwb0sg': {
'pt': 'Please choose an option from the dropdown',
'en': '',
},
'k44tm7wo': { 'k44tm7wo': {
'pt': 'Entrar', 'pt': 'Entrar',
'en': 'Sign-In', 'en': 'Sign-In',
@ -774,6 +868,30 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
'pt': 'Senha', 'pt': 'Senha',
'en': 'Password', 'en': 'Password',
}, },
'3bs10dfq': {
'pt': 'Campo é necessário',
'en': 'Field is required',
},
'ph22karc': {
'pt': 'Please choose an option from the dropdown',
'en': '',
},
'mlvw63yj': {
'pt': 'Campo é necessário',
'en': 'Field is required',
},
'z0bv6wi2': {
'pt': 'Please choose an option from the dropdown',
'en': '',
},
'6nn79lmh': {
'pt': 'Campo é necessário',
'en': 'Field is required',
},
'rcikqhf1': {
'pt': 'Please choose an option from the dropdown',
'en': '',
},
'rnvdwzei': { 'rnvdwzei': {
'pt': 'Cadastrar-se', 'pt': 'Cadastrar-se',
'en': 'Sign-Up', 'en': 'Sign-Up',

View File

@ -6,7 +6,6 @@ import 'package:provider/provider.dart';
import '/backend/schema/structs/index.dart'; import '/backend/schema/structs/index.dart';
import '/index.dart'; import '/index.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
export 'package:go_router/go_router.dart'; export 'package:go_router/go_router.dart';
@ -136,6 +135,16 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) => GoRouter(
path: '/peopleOnThePropertyPage', path: '/peopleOnThePropertyPage',
builder: (context, params) => const PeopleOnThePropertyPageWidget(), builder: (context, params) => const PeopleOnThePropertyPageWidget(),
), ),
FFRoute(
name: 'acessHistoryPage',
path: '/acessHistoryPage',
builder: (context, params) => const AcessHistoryPageWidget(),
),
FFRoute(
name: 'liberationHistory',
path: '/liberationHistory',
builder: (context, params) => const LiberationHistoryWidget(),
)
].map((r) => r.toRoute(appStateNotifier)).toList(), ].map((r) => r.toRoute(appStateNotifier)).toList(),
); );

View File

@ -12,3 +12,7 @@ export '/pages/fast_pass_page/fast_pass_page_widget.dart'
show FastPassPageWidget; show FastPassPageWidget;
export '/pages/people_on_the_property_page/people_on_the_property_page_widget.dart' export '/pages/people_on_the_property_page/people_on_the_property_page_widget.dart'
show PeopleOnThePropertyPageWidget; show PeopleOnThePropertyPageWidget;
export '/pages/acess_history_page/acess_history_page_widget.dart'
show AcessHistoryPageWidget;
export '/pages/liberation_history/liberation_history_widget.dart'
show LiberationHistoryWidget;

View File

@ -0,0 +1,22 @@
import '/flutter_flow/flutter_flow_util.dart';
import 'acess_history_page_widget.dart' show AcessHistoryPageWidget;
import 'package:flutter/material.dart';
class AcessHistoryPageModel extends FlutterFlowModel<AcessHistoryPageWidget> {
/// State fields for stateful widgets in this page.
final unfocusNode = FocusNode();
// State field(s) for TabBar widget.
TabController? tabBarController;
int get tabBarCurrentIndex =>
tabBarController != null ? tabBarController!.index : 0;
@override
void initState(BuildContext context) {}
@override
void dispose() {
unfocusNode.dispose();
tabBarController?.dispose();
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,23 @@
import '/flutter_flow/flutter_flow_util.dart';
import 'liberation_history_widget.dart' show LiberationHistoryWidget;
import 'package:flutter/material.dart';
class LiberationHistoryModel extends FlutterFlowModel<LiberationHistoryWidget> {
/// State fields for stateful widgets in this page.
final unfocusNode = FocusNode();
// State field(s) for TextField widget.
FocusNode? textFieldFocusNode;
TextEditingController? textController;
String? Function(BuildContext, String?)? textControllerValidator;
@override
void initState(BuildContext context) {}
@override
void dispose() {
unfocusNode.dispose();
textFieldFocusNode?.dispose();
textController?.dispose();
}
}

View File

@ -0,0 +1,680 @@
import '/backend/api_requests/api_calls.dart';
import '/components/templates_components/visit_details_modal_template_component/visit_details_modal_template_component_widget.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/custom_functions.dart' as functions;
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart';
import 'liberation_history_model.dart';
export 'liberation_history_model.dart';
class LiberationHistoryWidget extends StatefulWidget {
const LiberationHistoryWidget({super.key});
@override
State<LiberationHistoryWidget> createState() =>
_LiberationHistoryWidgetState();
}
class _LiberationHistoryWidgetState extends State<LiberationHistoryWidget> {
late LiberationHistoryModel _model;
final scaffoldKey = GlobalKey<ScaffoldState>();
@override
void initState() {
super.initState();
_model = createModel(context, () => LiberationHistoryModel());
_model.textController ??= TextEditingController();
_model.textFieldFocusNode ??= FocusNode();
}
@override
void dispose() {
_model.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
context.watch<FFAppState>();
return GestureDetector(
onTap: () => _model.unfocusNode.canRequestFocus
? FocusScope.of(context).requestFocus(_model.unfocusNode)
: FocusScope.of(context).unfocus(),
child: Scaffold(
key: scaffoldKey,
backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
body: SafeArea(
top: true,
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
width: double.infinity,
height: 100.0,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).secondaryBackground,
),
alignment: const AlignmentDirectional(0.0, -1.0),
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(8.0, 0.0, 8.0, 0.0),
child: TextFormField(
controller: _model.textController,
focusNode: _model.textFieldFocusNode,
autofocus: true,
obscureText: false,
decoration: InputDecoration(
labelText: FFLocalizations.of(context).getText(
'dy0mx15f' /* Label here... */,
),
labelStyle: FlutterFlowTheme.of(context)
.labelMedium
.override(
fontFamily:
FlutterFlowTheme.of(context).labelMediumFamily,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).labelMediumFamily),
),
hintStyle: FlutterFlowTheme.of(context)
.labelMedium
.override(
fontFamily:
FlutterFlowTheme.of(context).labelMediumFamily,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).labelMediumFamily),
),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).alternate,
width: 2.0,
),
borderRadius: BorderRadius.circular(8.0),
),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).primary,
width: 2.0,
),
borderRadius: BorderRadius.circular(8.0),
),
errorBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 2.0,
),
borderRadius: BorderRadius.circular(8.0),
),
focusedErrorBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 2.0,
),
borderRadius: BorderRadius.circular(8.0),
),
prefixIcon: const Icon(
Icons.search_sharp,
),
),
style: FlutterFlowTheme.of(context).bodyMedium.override(
fontFamily:
FlutterFlowTheme.of(context).bodyMediumFamily,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).bodyMediumFamily),
),
validator:
_model.textControllerValidator.asValidator(context),
),
),
),
Expanded(
child: Container(
width: double.infinity,
height: double.infinity,
decoration: const BoxDecoration(),
child: FutureBuilder<ApiCallResponse>(
future: PhpGroup.getVisitsCall.call(
devUUID: FFAppState().devUUID,
userUUID: FFAppState().userUUID,
cliID: FFAppState().cliUUID,
atividade: 'getVisitas',
),
builder: (context, snapshot) {
// Customize what your widget looks like when it's loading.
if (!snapshot.hasData) {
return Center(
child: SizedBox(
width: 50.0,
height: 50.0,
child: SpinKitCircle(
color: FlutterFlowTheme.of(context).primary,
size: 50.0,
),
),
);
}
final wrapGetVisitsResponse = snapshot.data!;
return Builder(
builder: (context) {
final visitaWrap = PhpGroup.getVisitsCall
.visitasList(
wrapGetVisitsResponse.jsonBody,
)
?.toList() ??
[];
return Wrap(
spacing: 2.0,
runSpacing: 1.0,
alignment: WrapAlignment.start,
crossAxisAlignment: WrapCrossAlignment.start,
direction: Axis.horizontal,
runAlignment: WrapAlignment.start,
verticalDirection: VerticalDirection.down,
clipBehavior: Clip.none,
children: List.generate(visitaWrap.length,
(visitaWrapIndex) {
final visitaWrapItem =
visitaWrap[visitaWrapIndex];
return Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: InkWell(
splashColor: Colors.transparent,
focusColor: Colors.transparent,
hoverColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () async {
await showModalBottomSheet(
isScrollControlled: true,
backgroundColor: Colors.transparent,
enableDrag: false,
useSafeArea: true,
context: context,
builder: (context) {
return GestureDetector(
onTap: () => _model
.unfocusNode.canRequestFocus
? FocusScope.of(context)
.requestFocus(
_model.unfocusNode)
: FocusScope.of(context)
.unfocus(),
child: Padding(
padding: MediaQuery.viewInsetsOf(
context),
child:
VisitDetailsModalTemplateComponentWidget(
visitStatusStr: getJsonField(
visitaWrapItem,
r'''$.VAW_STATUS''',
).toString(),
visitStartDateStr: getJsonField(
visitaWrapItem,
r'''$.VAW_DTINICIO''',
).toString(),
visitEndDateStr: getJsonField(
visitaWrapItem,
r'''$.VAW_DTFIM''',
).toString(),
visitReasonStr: getJsonField(
visitaWrapItem,
r'''$.MOT_DESCRICAO''',
).toString(),
visitLevelStr: getJsonField(
visitaWrapItem,
r'''$.NAC_DESCRICAO''',
).toString(),
visitTempStr: getJsonField(
visitaWrapItem,
r'''$.VTE_UNICA''',
).toString(),
visitObsStr: getJsonField(
visitaWrapItem,
r'''$.VAW_OBS''',
).toString(),
visitorImgPath:
valueOrDefault<String>(
'https://freaccess.com.br/freaccess/getImage.php?devUUID=${FFAppState().devUUID}&userUUID=${FFAppState().userUUID}&cliID=${FFAppState().cliUUID}&atividade=getFoto&Documento=${getJsonField(
visitaWrapItem,
r'''$.VTE_DOCUMENTO''',
).toString()}&tipo=E',
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/7ftdetkzc3s0/360_F_64676383_LdbmhiNM6Ypzb3FM4PPuFP9rHe7ri8Ju.jpg',
),
visitorStrList: getJsonField(
visitaWrapItem,
r'''$.VTE_DOCUMENTO''',
).toString(),
visitIdStr: getJsonField(
visitaWrapItem,
r'''$.VAW_ID''',
).toString(),
visitorJsonList: PhpGroup
.getVisitsCall
.visitasList(
wrapGetVisitsResponse.jsonBody,
),
updateToggleIdx: () async {},
repeatVisitSchedule: () async {},
),
),
);
},
).then((value) => safeSetState(() {}));
},
child: Card(
clipBehavior: Clip.antiAliasWithSaveLayer,
color: FlutterFlowTheme.of(context)
.secondaryBackground,
elevation: 5.0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.0),
),
child: Container(
width: 350.0,
height: 115.0,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context)
.secondaryBackground,
),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Container(
width: 100.0,
height: 100.0,
decoration: const BoxDecoration(),
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
Row(
mainAxisSize:
MainAxisSize.max,
children: [
Text(
FFLocalizations.of(
context)
.getText(
'f77je6tr' /* Visitante: */,
),
style:
FlutterFlowTheme.of(
context)
.bodyMedium
.override(
fontFamily: FlutterFlowTheme.of(
context)
.bodyMediumFamily,
fontSize:
12.5,
letterSpacing:
0.0,
fontWeight:
FontWeight
.bold,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
),
),
Align(
alignment:
const AlignmentDirectional(
-1.0, -1.0),
child: Text(
getJsonField(
visitaWrapItem,
r'''$.VTE_NOME''',
).toString(),
style: FlutterFlowTheme
.of(context)
.bodyMedium
.override(
fontFamily: FlutterFlowTheme.of(
context)
.bodyMediumFamily,
fontSize: 12.5,
letterSpacing:
0.0,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
),
),
),
].addToStart(
const SizedBox(width: 10.0)),
),
Row(
mainAxisSize:
MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment.start,
children: [
Text(
FFLocalizations.of(
context)
.getText(
'dkzewokx' /* Início em: */,
),
style:
FlutterFlowTheme.of(
context)
.bodyMedium
.override(
fontFamily: FlutterFlowTheme.of(
context)
.bodyMediumFamily,
fontSize:
12.5,
letterSpacing:
0.0,
fontWeight:
FontWeight
.bold,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
),
),
Text(
getJsonField(
visitaWrapItem,
r'''$.VAW_DTINICIO''',
).toString(),
style:
FlutterFlowTheme.of(
context)
.bodyMedium
.override(
fontFamily: FlutterFlowTheme.of(
context)
.bodyMediumFamily,
fontSize:
12.5,
letterSpacing:
0.0,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
),
),
].addToStart(
const SizedBox(width: 10.0)),
),
Row(
mainAxisSize:
MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment.start,
children: [
Text(
FFLocalizations.of(
context)
.getText(
'qi4mjhtw' /* Fim em: */,
),
style:
FlutterFlowTheme.of(
context)
.bodyMedium
.override(
fontFamily: FlutterFlowTheme.of(
context)
.bodyMediumFamily,
fontSize:
12.5,
letterSpacing:
0.0,
fontWeight:
FontWeight
.bold,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
),
),
Text(
getJsonField(
visitaWrapItem,
r'''$.VAW_DTFIM''',
).toString(),
style:
FlutterFlowTheme.of(
context)
.bodyMedium
.override(
fontFamily: FlutterFlowTheme.of(
context)
.bodyMediumFamily,
fontSize:
12.5,
letterSpacing:
0.0,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
),
),
].addToStart(
const SizedBox(width: 10.0)),
),
Align(
alignment:
const AlignmentDirectional(
-1.0, 0.0),
child: Padding(
padding:
const EdgeInsetsDirectional
.fromSTEB(
10.0,
0.0,
0.0,
0.0),
child: Container(
width: 200.0,
height: 27.0,
decoration:
BoxDecoration(
color: valueOrDefault<
Color>(
() {
if (functions
.jsonToStr(
getJsonField(
visitaWrapItem,
r'''$.VAW_STATUS''',
)) ==
'\"A\"') {
return FlutterFlowTheme.of(
context)
.success;
} else if (functions
.jsonToStr(
getJsonField(
visitaWrapItem,
r'''$.VAW_STATUS''',
)) ==
'\"C\"') {
return FlutterFlowTheme.of(
context)
.error;
} else if (functions
.jsonToStr(
getJsonField(
visitaWrapItem,
r'''$.VAW_STATUS''',
)) ==
'\"I\"') {
return FlutterFlowTheme.of(
context)
.warning;
} else {
return FlutterFlowTheme.of(
context)
.primary;
}
}(),
FlutterFlowTheme.of(
context)
.primary,
),
borderRadius:
BorderRadius
.circular(
5.0),
),
child: Align(
alignment:
const AlignmentDirectional(
0.0, 0.0),
child: Text(
() {
if (functions
.jsonToStr(
getJsonField(
visitaWrapItem,
r'''$.VAW_STATUS''',
)) ==
'\"A\"') {
return FFLocalizations.of(
context)
.getVariableText(
ptText:
'Ativo',
enText:
'Active',
);
} else if ((functions
.jsonToStr(
getJsonField(
visitaWrapItem,
r'''$.VAW_STATUS''',
)) ==
'\"F\"') ||
(functions.jsonToStr(
getJsonField(
visitaWrapItem,
r'''$.VAW_STATUS''',
)) ==
'\"C\"') ||
(functions.jsonToStr(
getJsonField(
visitaWrapItem,
r'''$.VAW_STATUS''',
)) ==
'\"B\"') ||
(functions.jsonToStr(
getJsonField(
visitaWrapItem,
r'''$.VAW_STATUS''',
)) ==
'\"I\"')) {
return FFLocalizations.of(
context)
.getVariableText(
ptText:
'Cancelado',
enText:
'Canceled',
);
} else {
return FFLocalizations.of(
context)
.getVariableText(
ptText:
'Pendente',
enText:
'Pending',
);
}
}(),
style: FlutterFlowTheme
.of(context)
.bodyMedium
.override(
fontFamily: FlutterFlowTheme.of(
context)
.bodyMediumFamily,
color: FlutterFlowTheme.of(
context)
.info,
letterSpacing:
0.0,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
),
),
),
),
),
),
].divide(const SizedBox(height: 3.0)),
),
),
),
ClipRRect(
borderRadius:
BorderRadius.circular(0.0),
child: CachedNetworkImage(
fadeInDuration:
const Duration(milliseconds: 500),
fadeOutDuration:
const Duration(milliseconds: 500),
imageUrl: valueOrDefault<String>(
'https://freaccess.com.br/freaccess/getImage.php?devUUID=${FFAppState().devUUID}&userUUID=${FFAppState().userUUID}&cliID=${FFAppState().cliUUID}&atividade=getFoto&Documento=${getJsonField(
visitaWrapItem,
r'''$.VTE_DOCUMENTO''',
).toString()}&tipo=E',
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/7ftdetkzc3s0/360_F_64676383_LdbmhiNM6Ypzb3FM4PPuFP9rHe7ri8Ju.jpg',
),
fit: BoxFit.cover,
),
),
],
),
),
),
),
);
}),
);
},
);
},
),
),
),
].addToStart(const SizedBox(height: 30.0)),
),
),
),
);
}
}

View File

@ -2167,6 +2167,7 @@ class _ScheduleCompleteVisitPageWidgetState
), ),
textAlign: TextAlign.start, textAlign: TextAlign.start,
maxLines: null, maxLines: null,
maxLength: 80,
validator: _model validator: _model
.textController3Validator .textController3Validator
.asValidator(context), .asValidator(context),
@ -2723,12 +2724,13 @@ class _ScheduleCompleteVisitPageWidgetState
'\"A\"') { '\"A\"') {
return FlutterFlowTheme.of(context) return FlutterFlowTheme.of(context)
.success; .success;
} else if (functions.jsonToStr( } else if ((visitStatusStr == 'C') ||
getJsonField( (visitStatusStr ==
visitaWrapItem, 'F') ||
r'''$.VAW_STATUS''', (visitStatusStr ==
)) == 'B') ||
'\"C\"') { (visitStatusStr ==
'I')) {
return FlutterFlowTheme.of(context) return FlutterFlowTheme.of(context)
.error; .error;
} else if (functions } else if (functions

View File

@ -824,6 +824,7 @@ class _ScheduleProvisionalVisitPageWidgetState
), ),
textAlign: TextAlign.start, textAlign: TextAlign.start,
maxLines: null, maxLines: null,
maxLength: 100,
validator: _model.textController3Validator validator: _model.textController3Validator
.asValidator(context), .asValidator(context),
), ),