This commit is contained in:
jantunesmesias 2024-07-30 11:06:32 -03:00
parent 0b57716abe
commit cb6a55cfd3
18 changed files with 2124 additions and 2716 deletions

View File

@ -17,9 +17,6 @@ import 'package:hub/pages/home_page/home_page_model.dart';
import 'package:hub/shared/utils/dialog_util.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'package:url_launcher/url_launcher.dart';
import '../shared/utils/log_util.dart';
@ -111,7 +108,6 @@ Future singInLoginAction(
String? emailAdress,
String? password,
}) async {
try {
String? devUUID;
ApiCallResponse? loginCall;
@ -144,8 +140,7 @@ Future singInLoginAction(
),
);
if (PhpGroup.loginCall.error((loginCall.jsonBody ?? '')) == false) {
if (PhpGroup.loginCall.error((loginCall.jsonBody ?? '')) == false) {
FFAppState().userUUID = PhpGroup.loginCall.userUUID(
(loginCall.jsonBody ?? ''),
)!;
@ -158,11 +153,14 @@ Future singInLoginAction(
FFAppState().updatedAt = '00/00/0000 00:00:00';
FFAppState().status = PhpGroup.loginCall.userStatus((loginCall.jsonBody ?? ''))!;
FFAppState().status =
PhpGroup.loginCall.userStatus((loginCall.jsonBody ?? ''))!;
FFAppState().userDevUUID = PhpGroup.loginCall.userDeviceId((loginCall.jsonBody ?? ''))!;
FFAppState().userDevUUID =
PhpGroup.loginCall.userDeviceId((loginCall.jsonBody ?? ''))!;
FFAppState().name = PhpGroup.loginCall.userName((loginCall.jsonBody ?? ''))!;
FFAppState().name =
PhpGroup.loginCall.userName((loginCall.jsonBody ?? ''))!;
FFAppState().serialNumber = await getSerialNumber() ?? '';
@ -170,11 +168,11 @@ Future singInLoginAction(
await toggleHomePage(context);
} else {
if (PhpGroup.loginCall.msg((loginCall?.jsonBody ?? '')) == null) {
DialogUtil.errorDefault(context);
} else {
DialogUtil.error(context, PhpGroup.loginCall.msg((loginCall?.jsonBody ?? '')).toString());
DialogUtil.error(context,
PhpGroup.loginCall.msg((loginCall?.jsonBody ?? '')).toString());
}
FFAppState().deleteEmail();
@ -188,12 +186,11 @@ Future singInLoginAction(
}
return;
} catch (e, s) {
DialogUtil.errorDefault(context);
LogUtil.requestAPIFailed('login.php', emailAdress.toString(), "Login", e, s);
LogUtil.requestAPIFailed(
'login.php', emailAdress.toString(), "Login", e, s);
}
}
Future<bool> signUpRegisterAction(
@ -333,7 +330,6 @@ Future toggleSignInPage(BuildContext context) async {
}
Future toggleSignUpPage(BuildContext context) async {
context.pushNamed(
'signUpPage',
extra: <String, dynamic>{
@ -468,12 +464,12 @@ Future<bool> checkLocals({
),
),
);
safeSetState(() {}); // Chamada otimizada fora do then para evitar encadeamentos desnecessários.
safeSetState(
() {}); // Chamada otimizada fora do then para evitar encadeamentos desnecessários.
return false;
}
}
Future changeStatusAction(
BuildContext context,
String status,
@ -523,13 +519,9 @@ Future changeStatusAction(
default:
break;
}
}
/// QR Code
/// QR Code
Uint8List assembleQRPacket(int direction, String identifier, String password) {
List<int> packet = [direction];
@ -569,13 +561,15 @@ Uint8List assembleQRPacket(int direction, String identifier, String password) {
check ^= b;
}
if (check == int.parse('0D', radix: 16) || check == int.parse('0A', radix: 16)) {
if (check == int.parse('0D', radix: 16) ||
check == int.parse('0A', radix: 16)) {
packet.add(int.parse('FF', radix: 16));
} else {
packet.add(check);
}
var bytes = packet.map((byte) => byte.toRadixString(16).padLeft(2, '0')).join((' '));
var bytes =
packet.map((byte) => byte.toRadixString(16).padLeft(2, '0')).join((' '));
log("Pacote: $packet");
log("Bytes: $bytes");
@ -586,22 +580,24 @@ Uint8List hexStringToByteArray(String s) {
int len = s.length;
Uint8List data = Uint8List(len ~/ 2);
for (int i = 0; i < len; i += 2) {
data[i ~/ 2] = ((int.parse(s[i], radix: 16) << 4) + int.parse(s[i + 1], radix: 16));
data[i ~/ 2] =
((int.parse(s[i], radix: 16) << 4) + int.parse(s[i + 1], radix: 16));
}
return data;
}
String byteToHexa(Uint8List pDados) {
return pDados.map((byte) => byte.toRadixString(16).padLeft(2, '0').toUpperCase()).join();
return pDados
.map((byte) => byte.toRadixString(16).padLeft(2, '0').toUpperCase())
.join();
}
Future<String> byteToString(Uint8List bytes) async {
return String.fromCharCodes(bytes);
}
Widget buildQrCode(
{
{
// required String data,
// required String type,
// required int version,
@ -610,204 +606,207 @@ Widget buildQrCode(
required double dimension,
required String identifier,
required String pass,
required int direction
}
) {
required int direction}) {
try {
log("pass: $pass");
const Color backgroundColor = Colors.white;
const Color foregroundColor = Colors.black;
return QrImageView.withQr(qr: QrCode.fromUint8List(data: assembleQRPacket(direction, identifier, pass), errorCorrectLevel: errorCorrectLevel), size: dimension, padding: const EdgeInsets.all(10), backgroundColor: backgroundColor, foregroundColor: foregroundColor);
return QrImageView.withQr(
qr: QrCode.fromUint8List(
data: assembleQRPacket(direction, identifier, pass),
errorCorrectLevel: errorCorrectLevel),
size: dimension,
padding: const EdgeInsets.all(10),
backgroundColor: backgroundColor,
foregroundColor: foregroundColor);
} catch (e) {
return Text("Erro ao gerar QR Code: ${e.toString()}");
}
}
// // Retorna o conteúdo a ser codificado no QR Code.
// String getContents() {
// return data;
// }
// // Retorna o conteúdo a ser codificado no QR Code.
// String getContents() {
// return data;
// }
// // Retorna uma versão do conteúdo otimizada para exibição.
// String getDisplayContents() {
// return data.trim();
// }
// // Retorna uma versão do conteúdo otimizada para exibição.
// String getDisplayContents() {
// return data.trim();
// }
// // Retorna o título baseado no tipo de conteúdo.
// String getTitle() {
// return type;
// }
// // Retorna o título baseado no tipo de conteúdo.
// String getTitle() {
// return type;
// }
// // Codifica o conteúdo em uma string adequada para o QR Code.
// Future<String> encodeContents() async {
// // Implementação específica para codificar o conteúdo.
// return data; // Exemplo simplificado.
// }
// // Codifica o conteúdo em uma string adequada para o QR Code.
// Future<String> encodeContents() async {
// // Implementação específica para codificar o conteúdo.
// return data; // Exemplo simplificado.
// }
// // Codifica o conteúdo específico do QR Code.
// Future<Widget> encodeQRCodeContents() async {
// return getQrCode();
// }
// // Codifica o conteúdo específico do QR Code.
// Future<Widget> encodeQRCodeContents() async {
// return getQrCode();
// }
// // Gera o QR Code como um widget.
// // Gera o QR Code como um widget.
// // Codifica o conteúdo como um bitmap (pode ser útil para operações de baixo nível).
// // Future<Image> encodeAsBitmap() async {
// // // Implementação para codificar como bitmap.
// // return Image(image); // Exemplo simplificado.
// // }
// // Codifica o conteúdo como um bitmap (pode ser útil para operações de baixo nível).
// // Future<Image> encodeAsBitmap() async {
// // // Implementação para codificar como bitmap.
// // return Image(image); // Exemplo simplificado.
// // }
// // Adivinha a codificação apropriada para o conteúdo.
// String guessAppropriateEncoding(String content) {
// // Implementação para adivinhar a codificação.
// return "UTF-8"; // Exemplo simplificado.
// }
// // Adivinha a codificação apropriada para o conteúdo.
// String guessAppropriateEncoding(String content) {
// // Implementação para adivinhar a codificação.
// return "UTF-8"; // Exemplo simplificado.
// }
// // Remove espaços em branco do início e do fim do conteúdo.
// String trim(String content) {
// return content.trim();
// }
// // Remove espaços em branco do início e do fim do conteúdo.
// String trim(String content) {
// return content.trim();
// }
// // Escapa caracteres especiais para o formato MECARD.
// String escapeMECARD(String content) {
// // Implementação para escapar caracteres.
// return content.replaceAll(':', '\\:'); // Exemplo simplificado.
// }
// // Escapa caracteres especiais para o formato MECARD.
// String escapeMECARD(String content) {
// // Implementação para escapar caracteres.
// return content.replaceAll(':', '\\:'); // Exemplo simplificado.
// }
/// menu
/// menu
Future scheduleVisitOptAction(BuildContext context) async {
await showAdaptiveDialog(
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: OptionSelectionModalWidget(
routesListStr: <String>[
'scheduleCompleteVisitPage',
'scheduleProvisionalVisitPage',
'fastPassPage',
],
iconsListIcon: <IconData>[
Icons.date_range_rounded,
Icons.date_range_rounded,
Icons.date_range_rounded,
],
nameListStr: <String>[
FFLocalizations.of(context).getVariableText(
ptText: 'Visita\nCompleta',
enText: 'Complete\nSchedule',
),
FFLocalizations.of(context).getVariableText(
ptText: 'Visita\nProvisória',
enText: 'Provisional\nSchedule',
),
FFLocalizations.of(context).getVariableText(
ptText: 'Visita\nRápida',
enText: 'Fast\nSchedule',
),
],
),
);
},
);
}
Future registerVisitorOptAction(BuildContext context) async {
context.pushNamed(
'registerVisitorPage',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.scale,
alignment: Alignment.bottomCenter,
Future scheduleVisitOptAction(BuildContext context) async {
await showAdaptiveDialog(
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: OptionSelectionModalWidget(
routesListStr: <String>[
'scheduleCompleteVisitPage',
'scheduleProvisionalVisitPage',
'fastPassPage',
],
iconsListIcon: <IconData>[
Icons.date_range_rounded,
Icons.date_range_rounded,
Icons.date_range_rounded,
],
nameListStr: <String>[
FFLocalizations.of(context).getVariableText(
ptText: 'Visita\nCompleta',
enText: 'Complete\nSchedule',
),
FFLocalizations.of(context).getVariableText(
ptText: 'Visita\nProvisória',
enText: 'Provisional\nSchedule',
),
FFLocalizations.of(context).getVariableText(
ptText: 'Visita\nRápida',
enText: 'Fast\nSchedule',
),
],
),
},
);
}
);
},
);
}
Future peopleOnThePropertyAction(BuildContext context) async {
context.pushNamed(
'peopleOnThePropertyPage',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.fade,
Future registerVisitorOptAction(BuildContext context) async {
context.pushNamed(
'registerVisitorPage',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.scale,
alignment: Alignment.bottomCenter,
),
},
);
}
Future peopleOnThePropertyAction(BuildContext context) async {
context.pushNamed(
'peopleOnThePropertyPage',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.fade,
),
},
);
}
Future preferencesSettings(BuildContext context) async {
context.pushNamed(
'preferencesSettings',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.scale,
alignment: Alignment.bottomCenter,
),
},
);
}
Future liberationHistoryOptAction(BuildContext context) async {
await showAdaptiveDialog(
// isScrollControlled: true,
// backgroundColor: Colors.transparent,
// enableDrag: false,
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: OptionSelectionModalWidget(
routesListStr: <String>[
'liberationHistory',
'acessHistoryPage',
'scheduleCompleteVisitPage',
// 'messageHistoryPage',
],
iconsListIcon: <IconData>[
Icons.history_rounded,
Icons.history_rounded,
Icons.history_rounded,
// Icons.history_rounded,
],
nameListStr: <String>[
FFLocalizations.of(context).getVariableText(
ptText: 'Histórico\nde Liberação',
enText: 'Liberation\nHistory',
),
FFLocalizations.of(context).getVariableText(
ptText: 'Histórico\nde Acesso',
enText: 'Access\nHistory',
),
FFLocalizations.of(context).getVariableText(
ptText: 'Histórico\nde Visita',
enText: 'Visit\nHistory',
),
// FFLocalizations.of(context).getVariableText(
// ptText: 'Histórico\nde Mensagens',
// enText: 'Message\nHistory',
// ),
],
),
},
);
}
);
},
);
}
Future preferencesSettings(BuildContext context) async {
context.pushNamed(
'preferencesSettings',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.scale,
alignment: Alignment.bottomCenter,
),
},
);
}
Future liberationHistoryOptAction(BuildContext context) async {
await showAdaptiveDialog(
// isScrollControlled: true,
// backgroundColor: Colors.transparent,
// enableDrag: false,
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: OptionSelectionModalWidget(
routesListStr: <String>[
'liberationHistory',
'acessHistoryPage',
'scheduleCompleteVisitPage',
// 'messageHistoryPage',
],
iconsListIcon: <IconData>[
Icons.history_rounded,
Icons.history_rounded,
Icons.history_rounded,
// Icons.history_rounded,
],
nameListStr: <String>[
FFLocalizations.of(context).getVariableText(
ptText: 'Histórico\nde Liberação',
enText: 'Liberation\nHistory',
),
FFLocalizations.of(context).getVariableText(
ptText: 'Histórico\nde Acesso',
enText: 'Access\nHistory',
),
FFLocalizations.of(context).getVariableText(
ptText: 'Histórico\nde Visita',
enText: 'Visit\nHistory',
),
// FFLocalizations.of(context).getVariableText(
// ptText: 'Histórico\nde Mensagens',
// enText: 'Message\nHistory',
// ),
],
),
);
},
);
}
Future accessQRCodeOptAction(BuildContext context) async {
context.pushNamed(
'qrCodePage',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.scale,
alignment: Alignment.bottomCenter,
),
},
);
}
Future accessQRCodeOptAction(BuildContext context) async {
context.pushNamed(
'qrCodePage',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.scale,
alignment: Alignment.bottomCenter,
),
},
);
}

View File

@ -17,7 +17,7 @@ class FFAppState extends ChangeNotifier {
// Verifica suporte biométrico
Future<bool> checkBiometrics() async {
try {
return await auth.canCheckBiometrics;
return await auth.canCheckBiometrics;
} catch (e) {
clearBiometricAuthentication();
debugPrint('Error checking biometrics: $e');
@ -30,14 +30,13 @@ class FFAppState extends ChangeNotifier {
bool authenticated = false;
try {
authenticated = await auth.authenticate(
localizedReason: 'Scan your fingerprint to authenticate',
options: const AuthenticationOptions(
biometricOnly: true,
stickyAuth: true,
useErrorDialogs: true,
sensitiveTransaction: true,
)
);
localizedReason: 'Scan your fingerprint to authenticate',
options: const AuthenticationOptions(
biometricOnly: true,
stickyAuth: true,
useErrorDialogs: true,
sensitiveTransaction: true,
));
if (authenticated) {
_isBiometricAuthenticated = true;
notifyListeners();
@ -50,7 +49,8 @@ class FFAppState extends ChangeNotifier {
clearBiometricAuthentication();
return Future.error(e);
}
return Future.error(''); // Add this line to ensure a value is always returned
return Future.error(
''); // Add this line to ensure a value is always returned
}
// Função para limpar o estado de autenticação biométrica
@ -60,9 +60,6 @@ class FFAppState extends ChangeNotifier {
// Limpar a informação salva, se necessário
}
static FFAppState _instance = FFAppState._internal();
factory FFAppState() {
@ -123,13 +120,16 @@ class FFAppState extends ChangeNotifier {
_tokenAPNS = await secureStorage.getString('ff_tokenAPNS') ?? _tokenAPNS;
});
await _safeInitAsync(() async {
_userDevUUID = await secureStorage.getString('ff_user_dev_id') ?? _userDevUUID;
_userDevUUID =
await secureStorage.getString('ff_user_dev_id') ?? _userDevUUID;
});
await _safeInitAsync(() async {
_serialNumber = await secureStorage.getString('ff_serialNumber') ?? _serialNumber;
_serialNumber =
await secureStorage.getString('ff_serialNumber') ?? _serialNumber;
});
await _safeInitAsync(() async {
_fingerprintOPT = await secureStorage.getBool('fingerprint') ?? _fingerprintOPT;
_fingerprintOPT =
await secureStorage.getBool('fingerprint') ?? _fingerprintOPT;
});
await _safeInitAsync(() async {
_personOPT = await secureStorage.getBool('person') ?? _personOPT;
@ -137,6 +137,9 @@ class FFAppState extends ChangeNotifier {
await _safeInitAsync(() async {
_passOPT = await secureStorage.getBool('pass') ?? _passOPT;
});
await _safeInitAsync(() async {
_panicOPT = await secureStorage.getBool('panic') ?? _panicOPT;
});
await _safeInitAsync(() async {
_notifyOPT = await secureStorage.getBool('notify') ?? _notifyOPT;
});
@ -147,9 +150,9 @@ class FFAppState extends ChangeNotifier {
_panicPass = await secureStorage.getString('panicPass') ?? _panicPass;
});
await _safeInitAsync(() async {
_fingerprintPass = await secureStorage.getString('fingerprintPass') ?? _fingerprintPass;
_fingerprintPass =
await secureStorage.getString('fingerprintPass') ?? _fingerprintPass;
});
}
void update(VoidCallback callback) {
@ -159,6 +162,17 @@ class FFAppState extends ChangeNotifier {
late FlutterSecureStorage secureStorage;
bool _panicOPT = false;
bool get panic => _panicOPT;
set panic(bool value) {
_panicOPT = value;
secureStorage.setBool('panic', value);
}
void deletePanic() {
secureStorage.delete(key: 'panic');
}
String _fingerprintPass = '';
String get fingerprintPass => _fingerprintPass;
set fingerprintPass(String value) {
@ -185,8 +199,7 @@ class FFAppState extends ChangeNotifier {
String get panicPass => _panicPass;
set panicPass(String value) {
_panicPass = value;
secureStorage.setString
('panicPass', value);
secureStorage.setString('panicPass', value);
}
void deletePanicPass() {
@ -203,8 +216,7 @@ class FFAppState extends ChangeNotifier {
bool _passOPT = false;
bool get pass => _passOPT;
set pass(bool value) {
_passOPT =
value;
_passOPT = value;
secureStorage.setBool('pass', value);
}
@ -486,4 +498,4 @@ extension FlutterSecureStorageExtensions on FlutterSecureStorage {
Future<void> setStringList(String key, List<String> value) async =>
await writeSync(
key: key, value: const ListToCsvConverter().convert([value]));
}
}

View File

@ -10,12 +10,8 @@ import 'throw_exception_model.dart';
export 'throw_exception_model.dart';
class ThrowExceptionWidget extends StatefulWidget {
ThrowExceptionWidget({
super.key,
required this.msg,
this.type = EnumThrowException.error
});
ThrowExceptionWidget(
{super.key, required this.msg, this.type = EnumThrowException.error});
final String? msg;
EnumThrowException type;
@ -89,11 +85,15 @@ class _ThrowExceptionWidgetState extends State<ThrowExceptionWidget>
String _getTitleByType(BuildContext context) {
switch (widget.type) {
case EnumThrowException.error:
return FFLocalizations.of(context).getVariableText(ptText: "Falha :(", enText: "Fail :(");
return FFLocalizations.of(context)
.getVariableText(ptText: "Falha :(", enText: "Fail :(");
case EnumThrowException.warning:
return FFLocalizations.of(context).getVariableText(ptText: "Aviso :O", enText: "Warning :O");
return FFLocalizations.of(context)
.getVariableText(ptText: "Aviso :O", enText: "Warning :O");
case EnumThrowException.success:
return FFLocalizations.of(context).getVariableText(ptText: "Sucesso ;)", enText: "Success ;)");;
return FFLocalizations.of(context)
.getVariableText(ptText: "Sucesso ;)", enText: "Success ;)");
;
}
}
@ -128,8 +128,7 @@ class _ThrowExceptionWidgetState extends State<ThrowExceptionWidget>
),
),
],
).animateOnPageLoad(
animationsMap['stackOnPageLoadAnimation']!),
).animateOnPageLoad(animationsMap['stackOnPageLoadAnimation']!),
Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
@ -143,22 +142,20 @@ class _ThrowExceptionWidgetState extends State<ThrowExceptionWidget>
letterSpacing: 0.0,
fontWeight: FontWeight.bold,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
FlutterFlowTheme.of(context).bodyMediumFamily),
),
),
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 0.0),
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 10.0, 0.0, 0.0),
child: Text(
valueOrDefault<String>(
widget.msg,
'Message Not Found',
),
style: FlutterFlowTheme.of(context)
.bodyMedium
.override(
fontFamily: FlutterFlowTheme.of(context)
.bodyMediumFamily,
style: FlutterFlowTheme.of(context).bodyMedium.override(
fontFamily:
FlutterFlowTheme.of(context).bodyMediumFamily,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context)
@ -175,4 +172,4 @@ class _ThrowExceptionWidgetState extends State<ThrowExceptionWidget>
],
);
}
}
}

View File

@ -1,16 +1,13 @@
import 'package:hub/components/molecular_components/visitor_not_found_component/visitor_not_found_component_model.dart';
import 'package:hub/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_widget.dart';
import 'package:hub/flutter_flow/flutter_flow_icon_button.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:hub/flutter_flow/flutter_flow_widgets.dart';
class VisitorNotFoundComponentWidget extends StatefulWidget {
const VisitorNotFoundComponentWidget({super.key});
@ -65,7 +62,8 @@ class _VisitorNotFoundComponentWidgetState
Align(
alignment: const AlignmentDirectional(1.0, -1.0),
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 5.0, 5.0, 0.0),
padding:
const EdgeInsetsDirectional.fromSTEB(0.0, 5.0, 5.0, 0.0),
child: FlutterFlowIconButton(
borderRadius: 20.0,
borderWidth: 1.0,
@ -87,7 +85,8 @@ class _VisitorNotFoundComponentWidgetState
size: 72.0,
),
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 16.0, 0.0, 0.0),
padding:
const EdgeInsetsDirectional.fromSTEB(0.0, 16.0, 0.0, 0.0),
child: Text(
FFLocalizations.of(context).getText(
'1p9mykbj' /* Usuário não encontrado */,
@ -102,7 +101,8 @@ class _VisitorNotFoundComponentWidgetState
),
),
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(10.0, 4.0, 10.0, 0.0),
padding:
const EdgeInsetsDirectional.fromSTEB(10.0, 4.0, 10.0, 0.0),
child: Text(
FFLocalizations.of(context).getText(
'kt937sp6' /* O documento inserido não corre... */,
@ -128,12 +128,19 @@ class _VisitorNotFoundComponentWidgetState
await showModalBottomSheet(
isScrollControlled: true,
backgroundColor: Colors.transparent,
enableDrag: false,
enableDrag: true,
useSafeArea: true,
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: const RegisiterVistorTemplateComponentWidget(),
child: SizedBox(
width: double.infinity,
height: MediaQuery.of(context).size.height * 0.9,
child:
const RegisiterVistorTemplateComponentWidget(
source: 'VisitorNotFoundComponent',
)),
);
},
).then((value) => safeSetState(() {}));
@ -144,10 +151,10 @@ class _VisitorNotFoundComponentWidgetState
options: FFButtonOptions(
width: double.infinity,
height: 30.0,
padding:
const EdgeInsetsDirectional.fromSTEB(24.0, 0.0, 24.0, 0.0),
iconPadding:
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
padding: const EdgeInsetsDirectional.fromSTEB(
24.0, 0.0, 24.0, 0.0),
iconPadding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 0.0),
color: FlutterFlowTheme.of(context).primary,
textStyle: FlutterFlowTheme.of(context).titleSmall.override(
fontFamily:
@ -177,4 +184,4 @@ class _VisitorNotFoundComponentWidgetState
),
);
}
}
}

View File

@ -314,4 +314,4 @@ class _ForgotPasswordTemplateComponentWidgetState
),
);
}
}
}

View File

@ -1,17 +1,15 @@
import 'dart:typed_data';
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 'package:hub/backend/api_requests/api_manager.dart';
import 'package:hub/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_widget.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/flutter_flow/form_field_controller.dart';
import 'package:hub/flutter_flow/uploaded_file.dart';
import 'regisiter_vistor_template_component_widget.dart';
class RegisiterVistorTemplateComponentModel
extends FlutterFlowModel<RegisiterVistorTemplateComponentWidget> {
/// State fields for stateful widgets in this component.
/// State fields for stateful widgets in this page.
final unfocusNode = FocusNode();
bool isDataUploading = false;
FFUploadedFile uploadedLocalFile =
FFUploadedFile(bytes: Uint8List.fromList([]));
@ -20,31 +18,98 @@ class RegisiterVistorTemplateComponentModel
FocusNode? textFieldFocusNode1;
TextEditingController? textController1;
String? Function(BuildContext, String?)? textController1Validator;
// State field(s) for DropDown widget.
String? dropDownValue;
FormFieldController<String>? dropDownValueController;
String? _textController1Validator(BuildContext context, String? val) {
if (val == null || val.isEmpty) {
return FFLocalizations.of(context).getVariableText(
enText: 'This field is required',
ptText: 'Este campo é obrigatório',
);
}
return null;
}
// State field(s) for TextField widget.
FocusNode? textFieldFocusNode2;
TextEditingController? textController2;
String? Function(BuildContext, String?)? textController2Validator;
String? _textController2Validator(BuildContext context, String? val) {
if (val == null || val.isEmpty) {
return FFLocalizations.of(context).getVariableText(
enText: 'This field is required',
ptText: 'Este campo é obrigatório',
);
}
return null;
}
// State field(s) for DropDown widget.
String? dropDownValue;
FormFieldController<String>? dropDownValueController;
// State field(s) for TextField widget.
FocusNode? textFieldFocusNode3;
TextEditingController? textController3;
String? Function(BuildContext, String?)? textController3Validator;
String? _textController3Validator(BuildContext context, String? val) {
if (val == null || val.isEmpty) {
return FFLocalizations.of(context).getVariableText(
enText: 'This field is required',
ptText: 'Este campo é obrigatório',
);
}
return null;
}
// State field(s) for TextField widget.
FocusNode? textFieldFocusNode4;
TextEditingController? textController4;
String? Function(BuildContext, String?)? textController4Validator;
String? _textController4Validator(BuildContext context, String? val) {
if (val == null || val.isEmpty) {
return FFLocalizations.of(context).getVariableText(
enText: 'This field is required',
ptText: 'Este campo é obrigatório',
);
}
if (!val.contains('@') || !val.contains('.')) {
return FFLocalizations.of(context).getVariableText(
enText: 'Invalid email',
ptText: 'Email inválido',
);
}
return null;
}
// Stores action output result for [Custom Action - convertImageFileToBase64] action in Button widget.
String? imgBase64;
// Stores action output result for [Backend Call - API (postScheduleVisitor)] action in Button widget.
ApiCallResponse? registerVisitor;
ApiCallResponse? scheduleVisitor;
@override
void initState(BuildContext context) {}
void initState(BuildContext context) {
textFieldFocusNode1 = FocusNode();
textController1 = TextEditingController();
textController1Validator = _textController1Validator;
textFieldFocusNode2 = FocusNode();
textController2 = TextEditingController();
textController2Validator = _textController2Validator;
dropDownValue = '';
// dropDownValueController = FormFieldController<String>(initialValue: dropDownValue);
textFieldFocusNode3 = FocusNode();
textController3 = TextEditingController();
textController3Validator = _textController3Validator;
textFieldFocusNode4 = FocusNode();
textController4 = TextEditingController();
textController4Validator = _textController4Validator;
}
@override
void dispose() {
unfocusNode.dispose();
textFieldFocusNode1?.dispose();
textController1?.dispose();
@ -58,4 +123,3 @@ class RegisiterVistorTemplateComponentModel
textController4?.dispose();
}
}

View File

@ -1,28 +1,27 @@
import 'dart:developer';
import 'dart:typed_data';
import 'package:flutter/services.dart';
import '/backend/api_requests/api_calls.dart';
import '/components/molecular_components/throw_exception/throw_exception_widget.dart';
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:hub/app_state.dart';
import 'package:hub/backend/api_requests/api_calls.dart';
import 'package:hub/components/molecular_components/throw_exception/throw_exception_widget.dart';
import 'package:hub/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_model.dart';
import 'package:hub/custom_code/actions/convert_image_file_to_base64.dart';
import 'package:hub/flutter_flow/flutter_flow_drop_down.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:hub/flutter_flow/flutter_flow_widgets.dart';
import 'package:hub/flutter_flow/form_field_controller.dart';
import 'package:hub/flutter_flow/internationalization.dart';
import 'package:hub/flutter_flow/upload_data.dart';
import 'package:hub/flutter_flow/uploaded_file.dart';
import 'package:provider/provider.dart';
import 'regisiter_vistor_template_component_model.dart';
export 'regisiter_vistor_template_component_model.dart';
class RegisiterVistorTemplateComponentWidget extends StatefulWidget {
const RegisiterVistorTemplateComponentWidget({super.key});
final String source;
const RegisiterVistorTemplateComponentWidget(
{super.key, required this.source});
@override
State<RegisiterVistorTemplateComponentWidget> createState() =>
@ -33,11 +32,7 @@ class _RegisiterVistorTemplateComponentWidgetState
extends State<RegisiterVistorTemplateComponentWidget> {
late RegisiterVistorTemplateComponentModel _model;
@override
void setState(VoidCallback callback) {
super.setState(callback);
_model.onUpdate();
}
final scaffoldKey = GlobalKey<ScaffoldState>();
@override
void initState() {
@ -60,7 +55,7 @@ class _RegisiterVistorTemplateComponentWidgetState
@override
void dispose() {
_model.maybeDispose();
_model.dispose();
super.dispose();
}
@ -68,10 +63,14 @@ class _RegisiterVistorTemplateComponentWidgetState
@override
Widget build(BuildContext context) {
context.watch<FFAppState>();
log(context
.describeWidget('RegisiterVistorTemplateComponentWidget')
.toString());
return Align(
alignment: const AlignmentDirectional(0.0, 1.0),
child: Container(
width: double.infinity,
height: double.infinity,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground,
borderRadius: const BorderRadius.only(
@ -81,33 +80,14 @@ class _RegisiterVistorTemplateComponentWidgetState
topRight: Radius.circular(25.0),
),
),
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 30.0, 0.0, 0.0),
child: SingleChildScrollView(
child: SingleChildScrollView(
child: Form(
// key: UniqueKey(),
autovalidateMode: AutovalidateMode.disabled,
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Align(
alignment: const AlignmentDirectional(-1.0, -1.0),
child: Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(20.0, 0.0, 0.0, 20.0),
child: Text(
FFLocalizations.of(context).getText(
'wnhkedzt' /* Cadastrar Visitante */,
),
style: FlutterFlowTheme.of(context).bodyLarge.override(
fontFamily: 'Nunito',
fontSize: 21.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w800,
useGoogleFonts:
GoogleFonts.asMap().containsKey('Nunito'),
),
),
),
),
Builder(
builder: (context) {
if ((_model.uploadedLocalFile.bytes?.isNotEmpty ?? false)) {
@ -129,7 +109,7 @@ class _RegisiterVistorTemplateComponentWidgetState
_model.uploadedLocalFile.bytes ??
Uint8List.fromList([]),
width: 300.0,
height: 100.0,
height: 200.0,
fit: BoxFit.cover,
),
),
@ -171,7 +151,7 @@ class _RegisiterVistorTemplateComponentWidgetState
bytes: m.bytes,
height: m.dimensions?.height,
width: m.dimensions?.width,
blurHash: m.blurHash,
// blurHash: m.blurHash,
))
.toList();
} finally {
@ -205,8 +185,9 @@ class _RegisiterVistorTemplateComponentWidgetState
height: 80.0,
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 0.0),
iconPadding: const EdgeInsetsDirectional.fromSTEB(
14.0, 0.0, 0.0, 20.0),
iconPadding:
const EdgeInsetsDirectional.fromSTEB(
14.0, 0.0, 0.0, 20.0),
color: FlutterFlowTheme.of(context)
.primaryBackground,
textStyle: FlutterFlowTheme.of(context)
@ -238,7 +219,7 @@ class _RegisiterVistorTemplateComponentWidgetState
0.0, 50.0, 0.0, 0.0),
child: Text(
FFLocalizations.of(context).getText(
'kpd31z4d' /* Clique para adicionar a foto p... */,
'p4ftwxcy' /* Clique para adicionar a foto p... */,
),
style: FlutterFlowTheme.of(context)
.bodyMedium
@ -264,11 +245,11 @@ class _RegisiterVistorTemplateComponentWidgetState
Align(
alignment: const AlignmentDirectional(-1.0, 0.0),
child: Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(20.0, 30.0, 0.0, 30.0),
padding: const EdgeInsetsDirectional.fromSTEB(
20.0, 30.0, 0.0, 15.0),
child: Text(
FFLocalizations.of(context).getText(
'q986vs4m' /* Preencha o formulário com os d... */,
'zazj5d8b' /* Preencha o formulário com os d... */,
),
textAlign: TextAlign.start,
style: FlutterFlowTheme.of(context).bodyMedium.override(
@ -282,16 +263,19 @@ 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: TextFormField(
controller: _model.textController1,
autovalidateMode: AutovalidateMode.onUserInteraction,
focusNode: _model.textFieldFocusNode1,
autofocus: false,
textInputAction: TextInputAction.next,
obscureText: false,
decoration: InputDecoration(
isDense: true,
labelText: FFLocalizations.of(context).getText(
'llcw2tei' /* Nome */,
'v7g73yik' /* Nome */,
),
labelStyle: FlutterFlowTheme.of(context)
.labelMedium
@ -315,7 +299,7 @@ class _RegisiterVistorTemplateComponentWidgetState
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).accent1,
color: FlutterFlowTheme.of(context).customColor6,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
@ -360,105 +344,23 @@ class _RegisiterVistorTemplateComponentWidgetState
_model.textController1Validator.asValidator(context),
),
),
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Container(
decoration: const BoxDecoration(),
child: Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 20.0),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.end,
children: [
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
10.0, 20.0, 10.0, 0.0),
child: Text(
FFLocalizations.of(context).getText(
'67ykbznt' /* Selecione o tipo: */,
),
style: FlutterFlowTheme.of(context)
.bodyMedium
.override(
fontFamily: FlutterFlowTheme.of(context)
.bodyMediumFamily,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
),
),
),
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 20.0, 0.0, 5.0),
child: FlutterFlowDropDown<String>(
controller: _model.dropDownValueController ??=
FormFieldController<String>(null),
options: [
FFLocalizations.of(context).getText(
'ugjkeiz7' /* Visitante */,
),
FFLocalizations.of(context).getText(
'8nlk5xlk' /* Prestador de Serviço */,
)
],
onChanged: (val) =>
setState(() => _model.dropDownValue = val),
width: 200.0,
height: 48.0,
textStyle: 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),
),
hintText: FFLocalizations.of(context).getText(
'kw07i43y' /* Selecione... */,
),
icon: Icon(
Icons.keyboard_arrow_down_rounded,
color: FlutterFlowTheme.of(context).primaryText,
size: 24.0,
),
elevation: 2.0,
borderColor: FlutterFlowTheme.of(context).accent1,
borderWidth: 0.5,
borderRadius: 8.0,
margin: const EdgeInsetsDirectional.fromSTEB(
16.0, 4.0, 16.0, 4.0),
hidesUnderline: true,
isOverButton: true,
isSearchable: false,
isMultiSelect: false,
),
),
],
),
),
),
),
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: TextFormField(
controller: _model.textController2,
focusNode: _model.textFieldFocusNode2,
autovalidateMode: AutovalidateMode.onUserInteraction,
autofocus: false,
textCapitalization: TextCapitalization.none,
autofillHints: const [AutofillHints.password],
keyboardType: TextInputType.number,
textInputAction: TextInputAction.next,
obscureText: false,
decoration: InputDecoration(
isDense: true,
labelText: FFLocalizations.of(context).getText(
'96ayre48' /* Documento */,
'rl8tvwnr' /* Documento */,
),
labelStyle: FlutterFlowTheme.of(context)
.labelMedium
@ -481,7 +383,7 @@ class _RegisiterVistorTemplateComponentWidgetState
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).accent1,
color: FlutterFlowTheme.of(context).customColor6,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
@ -522,16 +424,135 @@ class _RegisiterVistorTemplateComponentWidgetState
),
validator:
_model.textController2Validator.asValidator(context),
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp('[0-9]')),
],
),
),
Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 10.0),
child: Container(
width: MediaQuery.sizeOf(context).width * 0.95,
decoration: const BoxDecoration(),
child: Column(
children: [
Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 7.0),
child: Text(
FFLocalizations.of(context).getText(
'yp23q90m' /* Selecione o tipo: */,
),
style: FlutterFlowTheme.of(context)
.bodyMedium
.override(
fontFamily: FlutterFlowTheme.of(context)
.bodyMediumFamily,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
),
),
),
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 5.0),
child: FlutterFlowDropDown<String>(
controller: _model.dropDownValueController ??=
FormFieldController<String>(null),
options: [
FFLocalizations.of(context).getText(
'n8vddmcq' /* Visitante */,
),
FFLocalizations.of(context).getText(
'9luaa09e' /* Prestador de Serviço */,
)
],
onChanged: (val) =>
setState(() => _model.dropDownValue = val),
width: 200.0,
height: 44.0,
textStyle: 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),
),
hintText: FFLocalizations.of(context).getText(
'pmezihb4' /* Selecione... */,
),
icon: Icon(
Icons.keyboard_arrow_down_rounded,
color:
FlutterFlowTheme.of(context).primaryText,
size: 24.0,
),
elevation: 2.0,
borderColor:
FlutterFlowTheme.of(context).customColor6,
borderWidth: 0.5,
borderRadius: 8.0,
margin: const EdgeInsetsDirectional.fromSTEB(
16.0, 0.0, 16.0, 0.0),
hidesUnderline: true,
isOverButton: true,
isSearchable: false,
isMultiSelect: false,
),
),
]
.divide(const SizedBox(width: 19.0))
.addToStart(const SizedBox(width: 30.0)),
),
if (_model.dropDownValue == null ||
_model.dropDownValue == '')
Align(
alignment: const AlignmentDirectional(0.4, 0),
child: Text(
FFLocalizations.of(context).getVariableText(
enText: 'This field is required',
ptText: 'Este campo é obrigatório',
),
style: FlutterFlowTheme.of(context)
.bodySmall
.override(
fontFamily: FlutterFlowTheme.of(context)
.bodySmallFamily,
color: FlutterFlowTheme.of(context)
.customColor6,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.bodySmallFamily),
)),
),
],
),
),
),
Align(
alignment: const AlignmentDirectional(-1.0, 0.0),
child: Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(20.0, 30.0, 0.0, 30.0),
padding: const EdgeInsetsDirectional.fromSTEB(
20.0, 0.0, 0.0, 15.0),
child: Text(
FFLocalizations.of(context).getText(
'j0g7ggs2' /* Contatos */,
'bqpucwh0' /* Contatos */,
),
textAlign: TextAlign.start,
style: FlutterFlowTheme.of(context).bodyMedium.override(
@ -545,16 +566,24 @@ 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: TextFormField(
controller: _model.textController3,
focusNode: _model.textFieldFocusNode3,
autovalidateMode: AutovalidateMode.onUserInteraction,
autofocus: false,
textInputAction: TextInputAction.next,
keyboardType: TextInputType.phone,
inputFormatters: [
FilteringTextInputFormatter.allow(
RegExp('[0-9, +, -, (, )]')),
],
obscureText: false,
decoration: InputDecoration(
isDense: true,
labelText: FFLocalizations.of(context).getText(
'ybdjabnd' /* Telefone */,
'h84ls2r6' /* Telefone */,
),
labelStyle: FlutterFlowTheme.of(context)
.labelMedium
@ -578,7 +607,7 @@ class _RegisiterVistorTemplateComponentWidgetState
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).accent1,
color: FlutterFlowTheme.of(context).customColor6,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
@ -617,21 +646,24 @@ class _RegisiterVistorTemplateComponentWidgetState
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).bodyMediumFamily),
),
validator:
_model.textController3Validator.asValidator(context),
// validator:
// _model.textController3Validator.asValidator(context),
),
),
Padding(
padding: const EdgeInsets.all(24.0),
padding: const EdgeInsetsDirectional.fromSTEB(
24.0, 0.0, 24.0, 0.0),
child: TextFormField(
controller: _model.textController4,
focusNode: _model.textFieldFocusNode4,
autovalidateMode: AutovalidateMode.onUserInteraction,
autofocus: false,
textInputAction: TextInputAction.done,
obscureText: false,
decoration: InputDecoration(
isDense: true,
labelText: FFLocalizations.of(context).getText(
'tlr6uxo4' /* Email */,
'fqp7qmka' /* Email */,
),
labelStyle: FlutterFlowTheme.of(context)
.labelMedium
@ -655,7 +687,7 @@ class _RegisiterVistorTemplateComponentWidgetState
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).accent1,
color: FlutterFlowTheme.of(context).customColor6,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
@ -695,135 +727,199 @@ class _RegisiterVistorTemplateComponentWidgetState
FlutterFlowTheme.of(context).bodyMediumFamily),
),
keyboardType: TextInputType.emailAddress,
validator:
_model.textController4Validator.asValidator(context),
// validator:
// _model.textController4Validator.asValidator(context),
),
),
Align(
alignment: const AlignmentDirectional(0.0, 1.0),
child: Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(0.0, 50.0, 0.0, 0.0),
child: FFButtonWidget(
onPressed: () async {
if (((_model.uploadedLocalFile.bytes?.isNotEmpty ??
false)) &&
(_model.textController1.text != '') &&
(_model.dropDownValue != null &&
_model.dropDownValue != '') &&
(_model.textController2.text != '')) {
_model.imgBase64 =
await convertImageFileToBase64(
_model.uploadedLocalFile,
);
_model.registerVisitor =
await PhpGroup.postScheduleVisitorCall.call(
devUUID: FFAppState().devUUID,
userUUID: FFAppState().userUUID,
cliID: FFAppState().cliUUID,
atividade: 'putVisitante',
documento: _model.textController2.text,
nome: _model.textController1.text,
tipo: (_model.dropDownValue == 'Visitante') ||
(_model.dropDownValue == 'Visitor')
? 'V'
: 'P',
foto: 'base64;jpeg,klajsalkjslkajslkajl',
);
if (PhpGroup.postScheduleVisitorCall.error(
(_model.registerVisitor?.jsonBody ?? ''),
) ==
false) {
setState(() {
_model.textController1?.clear();
_model.textController2?.clear();
_model.textController3?.clear();
_model.textController4?.clear();
});
setState(() {
_model.dropDownValueController?.reset();
});
} else {
await showModalBottomSheet(
isScrollControlled: true,
backgroundColor: Colors.transparent,
enableDrag: false,
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: ThrowExceptionWidget(
msg:
'\\devUUID=${FFAppState().devUUID}\\userUUID=${FFAppState().userUUID}\\cliID=${FFAppState().cliUUID}\\Documento=${_model.textController2.text}\\Nome=${_model.textController1.text}\\dropdown${_model.dropDownValue}\\${PhpGroup.postScheduleVisitorCall.errorMsg(
(_model.registerVisitor?.jsonBody ?? ''),
)}',
),
);
},
).then((value) => safeSetState(() {}));
}
} else {
await showModalBottomSheet(
isScrollControlled: true,
backgroundColor: Colors.transparent,
enableDrag: false,
Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(0.0, 65.0, 0.0, 0.0),
child: FFButtonWidget(
onPressed: () async {
if (((_model.uploadedLocalFile.bytes?.isNotEmpty ??
false)) &&
(_model.textController1.text != '') &&
(_model.dropDownValue != null &&
_model.dropDownValue != '') &&
(_model.textController2.text != '')) {
_model.imgBase64 =
await actions.convertImageFileToBase64(
_model.uploadedLocalFile,
);
_model.scheduleVisitor =
await PhpGroup.postScheduleVisitorCall
.call(
devUUID: FFAppState().devUUID,
userUUID: FFAppState().userUUID,
cliID: FFAppState().cliUUID,
atividade: 'putVisitante',
documento: _model.textController2.text,
nome: _model.textController1.text,
tipo: _model.dropDownValue ==
FFLocalizations.of(context).getText(
'n8vddmcq' /* Visitante */,
)
? 'V'
: 'P',
foto: 'base64;jpeg,${_model.imgBase64}',
)
.onError((e, s) async {
return await showAdaptiveDialog(
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: ThrowExceptionWidget(
msg:
'Você esqueceu de adicionar algum dado obrigatório. Verifique se a imagem, nome, tipo e documento estão foram preenchidos corretamente.- devUUID=${FFAppState().devUUID}- userUUID=${FFAppState().userUUID}- cliID=${FFAppState().cliUUID}- Documento=${_model.textController2.text}- Nome=${_model.textController1.text}- Tipo=${_model.dropDownValue}',
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.',
),
),
),
),
);
},
);
});
if (PhpGroup.postScheduleVisitorCall.error(
(_model.scheduleVisitor?.jsonBody ?? ''),
) ==
false) {
setState(() {
_model.textController1?.clearComposing();
_model.textController2?.clearComposing();
_model.textController3?.clearComposing();
_model.textController4?.clearComposing();
_model.dropDownValueController?.reset();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
FFLocalizations.of(context).getVariableText(
ptText:
'Visitante cadastrado com sucesso.',
enText:
'Visitor successfully registered.'),
style: TextStyle(
color:
FlutterFlowTheme.of(context).info)),
backgroundColor:
FlutterFlowTheme.of(context).primary,
duration: const Duration(seconds: 3),
behavior: SnackBarBehavior.floating,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30),
),
),
);
if (widget.source == 'VisitorNotFoundComponent') {
Navigator.pop(context);
}
});
} else {
await showAdaptiveDialog(
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: Dialog(
backgroundColor: Colors.transparent,
child: ThrowExceptionWidget(
msg: PhpGroup.postScheduleVisitorCall
.errorMsg(_model
.scheduleVisitor?.jsonBody)
.toString()),
),
),
);
},
).then((value) => safeSetState(() {}));
}
} else {
await showAdaptiveDialog(
context: context,
builder: (context) {
return GestureDetector(
onTap: () {
Form.of(context)?.validate();
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.',
),
),
),
),
);
},
).then((value) => safeSetState(() {}));
}
setState(() {});
},
text: FFLocalizations.of(context).getText(
'65puvap9' /* Cadastrar */,
setState(() {});
},
text: FFLocalizations.of(context).getText(
'okbw0aiu' /* Cadastrar */,
),
options: FFButtonOptions(
width: 250.0,
height: 36.0,
padding: const EdgeInsetsDirectional.fromSTEB(
80.0, 0.0, 80.0, 0.0),
iconPadding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 0.0),
color: FlutterFlowTheme.of(context).primary,
textStyle: FlutterFlowTheme.of(context)
.titleSmall
.override(
fontFamily:
FlutterFlowTheme.of(context).titleSmallFamily,
color: FlutterFlowTheme.of(context).info,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).titleSmallFamily),
),
borderSide: const BorderSide(
color: Colors.transparent,
width: 30.0,
),
options: FFButtonOptions(
width: double.infinity,
height: 36.0,
padding: const EdgeInsetsDirectional.fromSTEB(
80.0, 0.0, 80.0, 0.0),
iconPadding:
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
color: FlutterFlowTheme.of(context).primary,
textStyle: FlutterFlowTheme.of(context)
.titleSmall
.override(
fontFamily:
FlutterFlowTheme.of(context).titleSmallFamily,
color: FlutterFlowTheme.of(context).info,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context)
.titleSmallFamily),
),
borderSide: const BorderSide(
color: Colors.transparent,
width: 30.0,
),
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(0.0),
bottomRight: Radius.circular(0.0),
topLeft: Radius.circular(15.0),
topRight: Radius.circular(15.0),
),
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(15.0),
bottomRight: Radius.circular(15.0),
topLeft: Radius.circular(15.0),
topRight: Radius.circular(15.0),
),
),
),
),
],
]
.divide(const SizedBox(height: 10.0))
.addToStart(const SizedBox(height: 30.0))
.addToEnd(const SizedBox(height: 30.0)),
),
),
),
),
);
}
}
}

View File

@ -8,6 +8,7 @@ class SignInTemplateComponentModel
/// State fields for stateful widgets in this component.
final formKey = GlobalKey<FormState>();
final unfocusNode = FocusNode();
// State field(s) for emailAddress widget.
FocusNode? emailAddressFocusNode;
TextEditingController? emailAddressTextController;

View File

@ -131,8 +131,8 @@ class _SignInTemplateComponentWidgetState
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(0.0, 35.0, 0.0, 35.0),
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 35.0, 0.0, 35.0),
child: Container(
width: 548.0,
height: 112.0,
@ -148,7 +148,8 @@ class _SignInTemplateComponentWidgetState
children: [
Expanded(
child: Align(
alignment: const AlignmentDirectional(0.0, 1.0),
alignment:
const AlignmentDirectional(0.0, 1.0),
child: Padding(
padding: const EdgeInsets.all(3.0),
child: Text(
@ -223,8 +224,9 @@ class _SignInTemplateComponentWidgetState
mainAxisSize: MainAxisSize.max,
children: [
Padding(
padding: const EdgeInsetsDirectional
.fromSTEB(
padding:
const EdgeInsetsDirectional
.fromSTEB(
0.0, 0.0, 0.0, 16.0),
child: SizedBox(
width: double.infinity,
@ -236,7 +238,8 @@ class _SignInTemplateComponentWidgetState
onChanged: (_) =>
EasyDebounce.debounce(
'_model.emailAddressTextController',
const Duration(milliseconds: 500),
const Duration(
milliseconds: 500),
() => setState(() {}),
),
autofocus: true,
@ -364,8 +367,9 @@ class _SignInTemplateComponentWidgetState
),
),
Padding(
padding: const EdgeInsetsDirectional
.fromSTEB(
padding:
const EdgeInsetsDirectional
.fromSTEB(
0.0, 0.0, 0.0, 16.0),
child: SizedBox(
width: double.infinity,
@ -377,7 +381,8 @@ class _SignInTemplateComponentWidgetState
onChanged: (_) =>
EasyDebounce.debounce(
'_model.passwordTextController',
const Duration(milliseconds: 500),
const Duration(
milliseconds: 500),
() => setState(() {}),
),
autofocus: true,
@ -430,7 +435,8 @@ class _SignInTemplateComponentWidgetState
),
focusedBorder:
OutlineInputBorder(
borderSide: const BorderSide(
borderSide:
const BorderSide(
color:
Color(0xFF1AAB5F),
width: 0.25,
@ -441,7 +447,8 @@ class _SignInTemplateComponentWidgetState
),
errorBorder:
OutlineInputBorder(
borderSide: const BorderSide(
borderSide:
const BorderSide(
color:
Color(0xFFFF5963),
width: 0.25,
@ -452,7 +459,8 @@ class _SignInTemplateComponentWidgetState
),
focusedErrorBorder:
OutlineInputBorder(
borderSide: const BorderSide(
borderSide:
const BorderSide(
color:
Color(0xFFFF5963),
width: 0.25,
@ -527,8 +535,9 @@ class _SignInTemplateComponentWidgetState
mainAxisSize: MainAxisSize.max,
children: [
Padding(
padding: const EdgeInsetsDirectional
.fromSTEB(
padding:
const EdgeInsetsDirectional
.fromSTEB(
0.0, 0.0, 0.0, 16.0),
child: FFButtonWidget(
onPressed: _isFormInvalid()
@ -556,18 +565,12 @@ class _SignInTemplateComponentWidgetState
height: 44.0,
padding:
const EdgeInsetsDirectional
.fromSTEB(
0.0,
0.0,
0.0,
0.0),
.fromSTEB(0.0,
0.0, 0.0, 0.0),
iconPadding:
const EdgeInsetsDirectional
.fromSTEB(
0.0,
0.0,
0.0,
0.0),
.fromSTEB(0.0,
0.0, 0.0, 0.0),
color:
FlutterFlowTheme.of(
context)
@ -594,7 +597,8 @@ class _SignInTemplateComponentWidgetState
'Plus Jakarta Sans'),
),
elevation: 3.0,
borderSide: const BorderSide(
borderSide:
const BorderSide(
color:
Colors.transparent,
width: 1.0,
@ -613,8 +617,9 @@ class _SignInTemplateComponentWidgetState
),
),
Padding(
padding: const EdgeInsetsDirectional
.fromSTEB(
padding:
const EdgeInsetsDirectional
.fromSTEB(
0.0, 0.0, 0.0, 16.0),
child: FFButtonWidget(
onPressed: () async {
@ -632,18 +637,12 @@ class _SignInTemplateComponentWidgetState
height: 44.0,
padding:
const EdgeInsetsDirectional
.fromSTEB(
0.0,
0.0,
0.0,
0.0),
.fromSTEB(0.0,
0.0, 0.0, 0.0),
iconPadding:
const EdgeInsetsDirectional
.fromSTEB(
0.0,
0.0,
0.0,
0.0),
.fromSTEB(0.0,
0.0, 0.0, 0.0),
color:
FlutterFlowTheme.of(
context)
@ -670,7 +669,8 @@ class _SignInTemplateComponentWidgetState
'Plus Jakarta Sans'),
),
elevation: 3.0,
borderSide: const BorderSide(
borderSide:
const BorderSide(
color:
Colors.transparent,
width: 1.0,
@ -695,7 +695,7 @@ class _SignInTemplateComponentWidgetState
padding:
const EdgeInsetsDirectional
.fromSTEB(0.0, 0.0,
0.0, 16.0),
0.0, 16.0),
child: FFButtonWidget(
onPressed: _isFormInvalid()
? null
@ -727,18 +727,12 @@ class _SignInTemplateComponentWidgetState
height: 44.0,
padding:
const EdgeInsetsDirectional
.fromSTEB(
0.0,
0.0,
0.0,
0.0),
.fromSTEB(0.0,
0.0, 0.0, 0.0),
iconPadding:
const EdgeInsetsDirectional
.fromSTEB(
0.0,
0.0,
0.0,
0.0),
.fromSTEB(0.0,
0.0, 0.0, 0.0),
color:
FlutterFlowTheme.of(
context)
@ -766,7 +760,8 @@ class _SignInTemplateComponentWidgetState
'Plus Jakarta Sans'),
),
elevation: 3.0,
borderSide: const BorderSide(
borderSide:
const BorderSide(
color: Colors
.transparent,
width: 1.0,
@ -775,7 +770,8 @@ class _SignInTemplateComponentWidgetState
BorderRadius
.circular(12.0),
disabledColor:
const Color(0xE81AAB5F),
const Color(
0xE81AAB5F),
),
showLoadingIndicator: true,
),
@ -786,7 +782,7 @@ class _SignInTemplateComponentWidgetState
padding:
const EdgeInsetsDirectional
.fromSTEB(0.0, 0.0,
0.0, 16.0),
0.0, 16.0),
child: FFButtonWidget(
onPressed: () async {
await widget
@ -803,18 +799,12 @@ class _SignInTemplateComponentWidgetState
height: 44.0,
padding:
const EdgeInsetsDirectional
.fromSTEB(
0.0,
0.0,
0.0,
0.0),
.fromSTEB(0.0,
0.0, 0.0, 0.0),
iconPadding:
const EdgeInsetsDirectional
.fromSTEB(
0.0,
0.0,
0.0,
0.0),
.fromSTEB(0.0,
0.0, 0.0, 0.0),
color:
FlutterFlowTheme.of(
context)
@ -842,7 +832,8 @@ class _SignInTemplateComponentWidgetState
'Plus Jakarta Sans'),
),
elevation: 3.0,
borderSide: const BorderSide(
borderSide:
const BorderSide(
color: Colors
.transparent,
width: 1.0,
@ -856,7 +847,8 @@ class _SignInTemplateComponentWidgetState
),
),
),
].divide(const SizedBox(width: 7.0)),
].divide(
const SizedBox(width: 7.0)),
);
}
},
@ -864,8 +856,8 @@ class _SignInTemplateComponentWidgetState
// You will have to add an action on this rich text to go to your login page.
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 12.0, 0.0, 12.0),
padding: const EdgeInsetsDirectional
.fromSTEB(0.0, 12.0, 0.0, 12.0),
child: InkWell(
splashColor: Colors.transparent,
focusColor: Colors.transparent,

View File

@ -1,4 +1,3 @@
import 'package:hub/backend/api_requests/api_calls.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';
@ -9,8 +8,6 @@ import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:hub/flutter_flow/flutter_flow_widgets.dart';
import 'package:hub/flutter_flow/internationalization.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
@ -69,171 +66,167 @@ class _VisitorSearchModalTemplateComponentWidgetState
Widget build(BuildContext context) {
context.watch<FFAppState>();
return Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 300.0, 0.0, 0.0),
child: Container(
width: double.infinity,
decoration: BoxDecoration(
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),
),
return Padding(
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 50.0, 0.0, 0.0),
child: Container(
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
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(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(16.0, 10.0, 16.0, 0.0),
child: TextFormField(
controller: _model.textController,
focusNode: _model.textFieldFocusNode,
onFieldSubmitted: (_) async {
setState(() {
_model.textController?.text = valueOrDefault<String>(
_model.textController.text,
'69696777',
);
_model.textController?.selection =
TextSelection.collapsed(
offset: _model.textController!.text.length);
});
_model.getVisitorByDoc =
await PhpGroup.getVisitorByDocCall.call(
devUUID: FFAppState().devUUID,
userUUID: FFAppState().userUUID,
cliID: FFAppState().cliUUID,
atividade: 'getVisitante',
documento: _model.textController.text,
),
child: Column(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(16.0, 10.0, 16.0, 0.0),
child: TextFormField(
controller: _model.textController,
focusNode: _model.textFieldFocusNode,
onFieldSubmitted: (_) async {
setState(() {
_model.textController?.text = valueOrDefault<String>(
_model.textController.text,
'69696777',
);
_model.textController?.selection = TextSelection.collapsed(
offset: _model.textController!.text.length);
});
_model.getVisitorByDoc =
await PhpGroup.getVisitorByDocCall.call(
devUUID: FFAppState().devUUID,
userUUID: FFAppState().userUUID,
cliID: FFAppState().cliUUID,
atividade: 'getVisitante',
documento: _model.textController.text,
);
if (PhpGroup.getVisitorByDocCall.vistanteId(
(_model.getVisitorByDoc?.jsonBody ?? ''),
) !=
'0') {
_model
.addToVisitors(PhpGroup.getVisitorByDocCall.visitante(
if (PhpGroup.getVisitorByDocCall.vistanteId(
(_model.getVisitorByDoc?.jsonBody ?? ''),
));
setState(() {});
_model.addToDocs(_model.textController.text);
setState(() {});
} else {
await showModalBottomSheet(
isScrollControlled: true,
backgroundColor: Colors.transparent,
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: const VisitorNotFoundComponentWidget(),
);
},
).then((value) => safeSetState(() {}));
}
) !=
'0') {
_model.addToVisitors(PhpGroup.getVisitorByDocCall.visitante(
(_model.getVisitorByDoc?.jsonBody ?? ''),
));
setState(() {});
},
autofocus: false,
textInputAction: TextInputAction.done,
obscureText: false,
decoration: InputDecoration(
isDense: false,
labelText: FFLocalizations.of(context).getText(
'cjlpru1m' /* Procure pelo documento do visi... */,
),
labelStyle: FlutterFlowTheme.of(context)
.labelMedium
.override(
fontFamily:
FlutterFlowTheme.of(context).labelMediumFamily,
color: FlutterFlowTheme.of(context).primaryText,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).labelMediumFamily),
),
hintText: FFLocalizations.of(context).getText(
'8i1qszba' /* test */,
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).accent1,
width: 0.5,
),
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(15.0),
bottomRight: Radius.circular(15.0),
topLeft: Radius.circular(15.0),
topRight: Radius.circular(15.0),
),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).primary,
width: 0.5,
),
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(15.0),
bottomRight: Radius.circular(15.0),
topLeft: Radius.circular(15.0),
topRight: Radius.circular(15.0),
),
),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 0.5,
),
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(15.0),
bottomRight: Radius.circular(15.0),
topLeft: Radius.circular(15.0),
topRight: Radius.circular(15.0),
),
),
focusedErrorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 0.5,
),
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(15.0),
bottomRight: Radius.circular(15.0),
topLeft: Radius.circular(15.0),
topRight: Radius.circular(15.0),
),
),
filled: true,
fillColor: FlutterFlowTheme.of(context).primaryBackground,
prefixIcon: Icon(
Icons.search_outlined,
color: FlutterFlowTheme.of(context).accent1,
),
_model.addToDocs(_model.textController.text);
setState(() {});
} else {
await showModalBottomSheet(
isScrollControlled: true,
enableDrag: true,
isDismissible: true,
backgroundColor: Colors.transparent,
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: const VisitorNotFoundComponentWidget(),
);
},
).then((value) => safeSetState(() {}));
}
setState(() {});
},
autofocus: false,
textInputAction: TextInputAction.done,
obscureText: false,
decoration: InputDecoration(
isDense: false,
labelText: FFLocalizations.of(context).getText(
'cjlpru1m' /* Procure pelo documento do visi... */,
),
style: FlutterFlowTheme.of(context).bodyMedium.override(
labelStyle: FlutterFlowTheme.of(context).labelMedium.override(
fontFamily:
FlutterFlowTheme.of(context).bodyMediumFamily,
FlutterFlowTheme.of(context).labelMediumFamily,
color: FlutterFlowTheme.of(context).primaryText,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).bodyMediumFamily),
FlutterFlowTheme.of(context).labelMediumFamily),
),
keyboardType: TextInputType.number,
validator:
_model.textControllerValidator.asValidator(context),
hintText: FFLocalizations.of(context).getText(
'8i1qszba' /* test */,
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).accent1,
width: 0.5,
),
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(15.0),
bottomRight: Radius.circular(15.0),
topLeft: Radius.circular(15.0),
topRight: Radius.circular(15.0),
),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).primary,
width: 0.5,
),
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(15.0),
bottomRight: Radius.circular(15.0),
topLeft: Radius.circular(15.0),
topRight: Radius.circular(15.0),
),
),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 0.5,
),
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(15.0),
bottomRight: Radius.circular(15.0),
topLeft: Radius.circular(15.0),
topRight: Radius.circular(15.0),
),
),
focusedErrorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 0.5,
),
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(15.0),
bottomRight: Radius.circular(15.0),
topLeft: Radius.circular(15.0),
topRight: Radius.circular(15.0),
),
),
filled: true,
fillColor: FlutterFlowTheme.of(context).primaryBackground,
prefixIcon: Icon(
Icons.search_outlined,
color: FlutterFlowTheme.of(context).accent1,
),
),
style: FlutterFlowTheme.of(context).bodyMedium.override(
fontFamily: FlutterFlowTheme.of(context).bodyMediumFamily,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).bodyMediumFamily),
),
keyboardType: TextInputType.number,
validator: _model.textControllerValidator.asValidator(context),
),
),
if (_model.visitors.isNotEmpty && _model.visitors.length > 0)
Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(16.0, 12.0, 0.0, 0.0),
padding: const EdgeInsetsDirectional.fromSTEB(
16.0, 12.0, 0.0, 0.0),
child: Text(
FFLocalizations.of(context).getText(
'9coywebh' /* Visitantes encontrados */,
@ -249,12 +242,10 @@ class _VisitorSearchModalTemplateComponentWidgetState
),
),
Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(4.0, 12.0, 16.0, 0.0),
padding: const EdgeInsetsDirectional.fromSTEB(
4.0, 12.0, 16.0, 0.0),
child: Text(
FFLocalizations.of(context).getText(
'6f5p0fv6' /* 24 */,
),
_model.visitors.length.toString(),
style: FlutterFlowTheme.of(context).bodyMedium.override(
fontFamily:
FlutterFlowTheme.of(context).bodyMediumFamily,
@ -266,273 +257,270 @@ class _VisitorSearchModalTemplateComponentWidgetState
),
],
),
Expanded(
child: Builder(
builder: (context) {
if (_model.visitors.isNotEmpty) {
return Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(8.0, 8.0, 8.0, 0.0),
child: Builder(
builder: (context) {
final visitor =
_model.visitors.map((e) => e).toList();
Expanded(
child: Builder(
builder: (context) {
if (_model.visitors.isNotEmpty) {
return Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
8.0, 8.0, 8.0, 0.0),
child: Builder(
builder: (context) {
final visitor =
_model.visitors.map((e) => e).toList();
return ListView.builder(
padding: EdgeInsets.zero,
scrollDirection: Axis.vertical,
itemCount: visitor.length,
itemBuilder: (context, visitorIndex) {
final visitorItem = visitor[visitorIndex];
return Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 1.0),
child: InkWell(
splashColor: Colors.transparent,
focusColor: Colors.transparent,
hoverColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () async {
await showModalBottomSheet(
isScrollControlled: true,
enableDrag: false,
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(
context),
child: const SizedBox(
height: 610.0,
child:
VisitorDetailsModalTemplateComponentWidget(),
),
);
},
).then((value) => safeSetState(() {}));
},
child: Container(
width: 100.0,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context)
.secondaryBackground,
boxShadow: [
BoxShadow(
blurRadius: 0.0,
color: FlutterFlowTheme.of(context)
.alternate,
offset: const Offset(
0.0,
1.0,
),
)
],
),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
ClipRRect(
borderRadius:
BorderRadius.circular(40.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(
visitorItem,
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',
),
width: 60.0,
height: 60.0,
fit: BoxFit.cover,
return ListView.builder(
padding: EdgeInsets.zero,
scrollDirection: Axis.vertical,
itemCount: visitor.length,
itemBuilder: (context, visitorIndex) {
final visitorItem = visitor[visitorIndex];
return Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 1.0),
child: InkWell(
splashColor: Colors.transparent,
focusColor: Colors.transparent,
hoverColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () async {
await showModalBottomSheet(
isScrollControlled: true,
enableDrag: false,
context: context,
builder: (context) {
return Padding(
padding:
MediaQuery.viewInsetsOf(context),
child: const SizedBox(
height: 610.0,
child:
VisitorDetailsModalTemplateComponentWidget(),
),
);
},
).then((value) => safeSetState(() {}));
},
child: Container(
width: 100.0,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context)
.secondaryBackground,
boxShadow: [
BoxShadow(
blurRadius: 0.0,
color: FlutterFlowTheme.of(context)
.alternate,
offset: const Offset(
0.0,
1.0,
),
)
],
),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
ClipRRect(
borderRadius:
BorderRadius.circular(40.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(
visitorItem,
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',
),
width: 60.0,
height: 60.0,
fit: BoxFit.cover,
),
Expanded(
child: Column(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Padding(
padding:
const EdgeInsetsDirectional
.fromSTEB(12.0, 0.0,
0.0, 0.0),
child: Text(
valueOrDefault<String>(
getJsonField(
visitorItem,
r'''$.VTE_NOME''',
)?.toString(),
'NOT FOUND',
),
style:
FlutterFlowTheme.of(
context)
.bodyLarge
.override(
fontFamily: FlutterFlowTheme.of(
context)
.bodyLargeFamily,
letterSpacing:
0.0,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.bodyLargeFamily),
),
),
Expanded(
child: Column(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Padding(
padding:
const EdgeInsetsDirectional
.fromSTEB(
12.0, 0.0, 0.0, 0.0),
child: Text(
valueOrDefault<String>(
getJsonField(
visitorItem,
r'''$.VTE_NOME''',
)?.toString(),
'NOT FOUND',
),
style: FlutterFlowTheme.of(
context)
.bodyLarge
.override(
fontFamily:
FlutterFlowTheme.of(
context)
.bodyLargeFamily,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
FlutterFlowTheme.of(
context)
.bodyLargeFamily),
),
),
Padding(
padding:
const EdgeInsetsDirectional
.fromSTEB(4.0, 4.0,
0.0, 0.0),
child: Row(
mainAxisSize:
MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment
.start,
children: [
Align(
alignment:
const AlignmentDirectional(
0.0, -1.0),
child: Padding(
padding:
const EdgeInsetsDirectional
.fromSTEB(
10.0,
0.0,
0.0,
0.0),
child: Text(
getJsonField(
visitorItem,
r'''$.VTE_TELEFONE''',
).toString(),
style: FlutterFlowTheme
.of(context)
.bodyMedium
.override(
fontFamily:
FlutterFlowTheme.of(context)
.bodyMediumFamily,
color: FlutterFlowTheme.of(
context)
.primary,
letterSpacing:
0.0,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
FlutterFlowTheme.of(context).bodyMediumFamily),
),
),
),
Padding(
padding:
const EdgeInsetsDirectional
.fromSTEB(
4.0, 4.0, 0.0, 0.0),
child: Row(
mainAxisSize:
MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment.start,
children: [
Align(
alignment:
const AlignmentDirectional(
0.0, -1.0),
child: Padding(
padding:
const EdgeInsetsDirectional
.fromSTEB(
10.0,
0.0,
0.0,
0.0),
child: Text(
getJsonField(
visitorItem,
r'''$.VTE_TELEFONE''',
).toString(),
style: FlutterFlowTheme
.of(context)
.bodyMedium
.override(
fontFamily: FlutterFlowTheme.of(
context)
.bodyMediumFamily,
color: FlutterFlowTheme.of(
context)
.primary,
letterSpacing:
0.0,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
),
),
),
],
),
),
],
),
],
),
),
],
),
FlutterFlowIconButton(
borderRadius: 20.0,
borderWidth: 1.0,
buttonSize: 40.0,
icon: Icon(
Icons.restore_from_trash,
color:
FlutterFlowTheme.of(context)
.primary,
size: 20.0,
),
onPressed: () async {
_model.removeFromVisitors(
visitorItem);
setState(() {});
},
),
FlutterFlowIconButton(
borderRadius: 20.0,
borderWidth: 1.0,
buttonSize: 40.0,
icon: Icon(
Icons.restore_from_trash,
color:
FlutterFlowTheme.of(context)
.primary,
size: 20.0,
),
],
),
onPressed: () async {
_model.removeFromVisitors(
visitorItem);
setState(() {});
},
),
],
),
),
),
);
},
);
},
),
);
} else {
return Container(
width: 100.0,
height: 100.0,
decoration: BoxDecoration(
color:
FlutterFlowTheme.of(context).secondaryBackground,
),
);
}
},
),
),
FFButtonWidget(
onPressed: () async {
await widget.getVisitors?.call(
_model.visitors,
);
await widget.getDocs?.call(
_model.docs,
);
Navigator.pop(context);
},
text: FFLocalizations.of(context).getText(
'ug6qzyla' /* Adicionar */,
),
options: FFButtonOptions(
width: double.infinity,
height: 30.0,
padding: const EdgeInsetsDirectional.fromSTEB(24.0, 0.0, 24.0, 0.0),
iconPadding:
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
color: FlutterFlowTheme.of(context).primary,
textStyle: FlutterFlowTheme.of(context).titleSmall.override(
fontFamily:
FlutterFlowTheme.of(context).titleSmallFamily,
color: Colors.white,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).titleSmallFamily),
),
);
},
);
},
),
elevation: 3.0,
borderSide: const BorderSide(
color: Colors.transparent,
width: 1.0,
),
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(0.0),
bottomRight: Radius.circular(0.0),
topLeft: Radius.circular(0.0),
topRight: Radius.circular(0.0),
),
);
} else {
return Container(
width: 100.0,
height: 100.0,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).secondaryBackground,
),
);
}
},
),
),
FFButtonWidget(
onPressed: () async {
await widget.getVisitors?.call(
_model.visitors,
);
await widget.getDocs?.call(
_model.docs,
);
Navigator.pop(context);
},
text: FFLocalizations.of(context).getText(
'ug6qzyla' /* Adicionar */,
),
options: FFButtonOptions(
width: double.infinity,
height: 30.0,
padding:
const EdgeInsetsDirectional.fromSTEB(24.0, 0.0, 24.0, 0.0),
iconPadding:
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
color: FlutterFlowTheme.of(context).primary,
textStyle: FlutterFlowTheme.of(context).titleSmall.override(
fontFamily: FlutterFlowTheme.of(context).titleSmallFamily,
color: Colors.white,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).titleSmallFamily),
),
elevation: 3.0,
borderSide: const BorderSide(
color: Colors.transparent,
width: 1.0,
),
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(0.0),
bottomRight: Radius.circular(0.0),
topLeft: Radius.circular(0.0),
topRight: Radius.circular(0.0),
),
),
],
),
),
],
),
),
);
}
}
}

View File

@ -13,7 +13,6 @@ import 'package:url_launcher/url_launcher.dart';
import '../main.dart';
export 'keep_alive_wrapper.dart';
export 'lat_lng.dart';
export 'place.dart';
@ -87,6 +86,46 @@ Theme wrapInMaterialDatePickerTheme(
return Theme(
data: baseTheme.copyWith(
textSelectionTheme: baseTheme.textSelectionTheme.copyWith(
cursorColor: headerBackgroundColor,
selectionColor: headerBackgroundColor.withOpacity(0.4),
selectionHandleColor: headerBackgroundColor,
),
inputDecorationTheme: baseTheme.inputDecorationTheme.copyWith(
isDense: true,
hoverColor: headerBackgroundColor.withOpacity(0.04),
floatingLabelStyle: baseTheme.textTheme.labelMedium!.copyWith(
color: headerBackgroundColor,
),
labelStyle: baseTheme.textTheme.labelMedium!.copyWith(
color: headerBackgroundColor,
),
border: OutlineInputBorder(
borderSide: BorderSide(
color: headerBackgroundColor,
),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: headerBackgroundColor,
),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: headerBackgroundColor.withOpacity(0.6),
),
),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: headerBackgroundColor,
),
),
focusedErrorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: headerBackgroundColor,
),
),
),
colorScheme: baseTheme.colorScheme.copyWith(
onSurface: pickerForegroundColor,
),
@ -149,9 +188,54 @@ Theme wrapInMaterialTimePickerTheme(
final baseTheme = Theme.of(context);
return Theme(
data: baseTheme.copyWith(
focusColor: headerBackgroundColor,
iconTheme: baseTheme.iconTheme.copyWith(
size: iconSize,
),
textSelectionTheme: baseTheme.textSelectionTheme.copyWith(
cursorColor: headerBackgroundColor,
selectionColor: headerBackgroundColor.withOpacity(0.4),
selectionHandleColor: headerBackgroundColor,
),
inputDecorationTheme: baseTheme.inputDecorationTheme.copyWith(
isDense: true,
focusColor: headerBackgroundColor,
hoverColor: headerBackgroundColor.withOpacity(0.04),
floatingLabelStyle: baseTheme.textTheme.labelMedium!.copyWith(
color: headerBackgroundColor,
),
labelStyle: baseTheme.textTheme.labelMedium!.copyWith(
color: headerBackgroundColor,
),
outlineBorder: BorderSide(
color: headerBackgroundColor,
),
border: OutlineInputBorder(
borderSide: BorderSide(
color: headerBackgroundColor,
),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: headerBackgroundColor,
),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: headerBackgroundColor.withOpacity(0.6),
),
),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: headerBackgroundColor,
),
),
focusedErrorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: headerBackgroundColor,
),
),
),
textButtonTheme: TextButtonThemeData(
style: ButtonStyle(
foregroundColor: WidgetStatePropertyAll(
@ -169,6 +253,7 @@ Theme wrapInMaterialTimePickerTheme(
})),
),
timePickerTheme: baseTheme.timePickerTheme.copyWith(
hourMinuteColor: selectedDateTimeBackgroundColor,
backgroundColor: pickerBackgroundColor,
hourMinuteTextColor: pickerForegroundColor,
dialHandColor: selectedDateTimeBackgroundColor,
@ -574,4 +659,4 @@ double computeGradientAlignmentY(double evaluatedAngle) {
y = sin(2 * rads);
}
return double.parse(roundTo(y, 2));
}
}

View File

@ -22,17 +22,11 @@ import 'package:hub/flutter_flow/internationalization.dart';
import 'package:hub/flutter_flow/nav/nav.dart';
import 'package:hub/pages/home_page/home_page_model.dart';
import 'package:provider/provider.dart';
class HomePageWidget extends StatefulWidget {
const HomePageWidget({super.key});
@override
State<HomePageWidget> createState() => _HomePageWidgetState();
}
@ -42,7 +36,6 @@ class _HomePageWidgetState extends State<HomePageWidget> {
bool localStatus = false;
final scaffoldKey = GlobalKey<ScaffoldState>();
Future<void> checkLocalStatus() async {
localStatus = await checkLocals(
context: context,
@ -57,9 +50,6 @@ class _HomePageWidgetState extends State<HomePageWidget> {
_model = createModel(context, () => HomePageModel());
SchedulerBinding.instance.addPostFrameCallback((_) async {
await PushNotificationService().initialize(context);
@override
void initState() {
@ -105,7 +95,6 @@ class _HomePageWidgetState extends State<HomePageWidget> {
@override
Widget build(BuildContext context) {
context.watch<FFAppState>();
return GestureDetector(
onTap: () => _model.unfocusNode.canRequestFocus
@ -122,523 +111,485 @@ class _HomePageWidgetState extends State<HomePageWidget> {
Container buildPage(BuildContext context, bool localStatus) {
return Container(
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground,
),
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Wrap(
spacing: 0.0,
runSpacing: 0.0,
alignment: WrapAlignment.start,
crossAxisAlignment: WrapCrossAlignment.start,
direction: Axis.horizontal,
runAlignment: WrapAlignment.start,
verticalDirection: VerticalDirection.down,
clipBehavior: Clip.none,
children: [
createHeader(context),
createLocal(localStatus),
createBody(),
],
),
],
),
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Wrap(
spacing: 0.0,
runSpacing: 0.0,
alignment: WrapAlignment.start,
crossAxisAlignment: WrapCrossAlignment.start,
direction: Axis.horizontal,
runAlignment: WrapAlignment.start,
verticalDirection: VerticalDirection.down,
clipBehavior: Clip.none,
children: [
createHeader(context),
createLocal(localStatus),
createBody(),
],
),
],
),
),
);
),
);
}
Wrap createBody() {
return Wrap(
spacing: 0.0,
runSpacing: 0.0,
alignment: WrapAlignment.start,
crossAxisAlignment: WrapCrossAlignment.start,
direction: Axis.horizontal,
runAlignment: WrapAlignment.start,
verticalDirection: VerticalDirection.down,
clipBehavior: Clip.none,
children: [
wrapWithModel(
model: _model.menuComponentModel,
updateCallback: () => setState(() {}),
child: const MenuComponentWidget(
expandable: true,
style: MenuView.list_grid,
item: MenuItem.button,
),
),
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Provider<MessageWellNotifier>(
create: (_) => MessageWellNotifier(),
child: wrapWithModel(
model: _model.messageWellComponentModel,
updateCallback: () => setState(() {}),
child: const MessageWellComponentWidget(),
),
),
),
//footer
const SizedBox(
height: 100,
width: double.infinity,
)
],
);
spacing: 0.0,
runSpacing: 0.0,
alignment: WrapAlignment.start,
crossAxisAlignment: WrapCrossAlignment.start,
direction: Axis.horizontal,
runAlignment: WrapAlignment.start,
verticalDirection: VerticalDirection.down,
clipBehavior: Clip.none,
children: [
wrapWithModel(
model: _model.menuComponentModel,
updateCallback: () => setState(() {}),
child: const MenuComponentWidget(
expandable: true,
style: MenuView.list_grid,
item: MenuItem.button,
),
),
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Provider<MessageWellNotifier>(
create: (_) => MessageWellNotifier(),
child: wrapWithModel(
model: _model.messageWellComponentModel,
updateCallback: () => setState(() {}),
child: const MessageWellComponentWidget(),
),
),
),
//footer
const SizedBox(
height: 100,
width: double.infinity,
)
],
);
}
Widget createLocal(bool localStatus) {
return wrapWithModel(
model: _model.localComponentModel,
updateCallback: () => setState(() {}),
child: LocalProfileComponentWidget(
localStatus: localStatus,
),
);
model: _model.localComponentModel,
updateCallback: () => setState(() {}),
child: LocalProfileComponentWidget(
localStatus: localStatus,
),
);
}
Row createHeader(BuildContext context) {
return Row(
mainAxisSize: MainAxisSize.max,
children: [
Expanded(
child: Container(
width: 100.0,
height: 100.0,
decoration: const BoxDecoration(
color: Color(0xFF1AAB5F),
),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Align(
alignment:
const AlignmentDirectional(0.0, 1.0),
child: Container(
height: 50.0,
decoration: const BoxDecoration(),
child: Align(
alignment:
const AlignmentDirectional(0.0, 0.0),
child: Row(
mainAxisSize: MainAxisSize.max,
children: [
Align(
alignment:
const AlignmentDirectional(
-1.0, 0.0),
child: Padding(
padding:
const EdgeInsetsDirectional
.fromSTEB(
10.0, 0.0, 0.0, 0.0),
child: FlutterFlowIconButton(
borderRadius: 20.0,
borderWidth: 1.0,
buttonSize: 40.0,
fillColor:
FlutterFlowTheme.of(context)
.primary,
icon: const Icon(
Icons.menu_rounded,
color: Colors.white,
size: 28.0,
),
onPressed: () async {
scaffoldKey.currentState!
.openDrawer();
},
),
),
),
Align(
alignment:
const AlignmentDirectional(
-1.0, 0.0),
child: Padding(
padding:
const EdgeInsetsDirectional
.fromSTEB(
60.0, 15.0, 0.0, 0.0),
child: ClipRRect(
borderRadius:
BorderRadius.circular(8.0),
child: Image.network(
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/8r2vsbd9i03k/logo.png',
width: 50.0,
height: 200.0,
fit: BoxFit.none,
),
),
),
),
Align(
alignment:
const AlignmentDirectional(
0.0, 0.0),
child: Padding(
padding:
const EdgeInsetsDirectional
.fromSTEB(
0.0, 15.0, 0.0, 0.0),
child: Text(
FFLocalizations.of(context)
.getText(
'rg9pzkpz' /* FRE ACCESS */,
),
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),
),
),
),
),
],
),
mainAxisSize: MainAxisSize.max,
children: [
Expanded(
child: Container(
width: 100.0,
height: 100.0,
decoration: const BoxDecoration(
color: Color(0xFF1AAB5F),
),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Align(
alignment: const AlignmentDirectional(0.0, 1.0),
child: Container(
height: 50.0,
decoration: const BoxDecoration(),
child: Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Row(
mainAxisSize: MainAxisSize.max,
children: [
Align(
alignment: const AlignmentDirectional(-1.0, 0.0),
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
10.0, 0.0, 0.0, 0.0),
child: FlutterFlowIconButton(
borderRadius: 20.0,
borderWidth: 1.0,
buttonSize: 40.0,
fillColor: FlutterFlowTheme.of(context).primary,
icon: const Icon(
Icons.menu_rounded,
color: Colors.white,
size: 28.0,
),
onPressed: () async {
scaffoldKey.currentState!.openDrawer();
},
),
),
),
Align(
alignment: const AlignmentDirectional(-1.0, 0.0),
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
60.0, 15.0, 0.0, 0.0),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.0),
child: Image.network(
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/8r2vsbd9i03k/logo.png',
width: 50.0,
height: 200.0,
fit: BoxFit.none,
),
),
),
Align(
alignment:
const AlignmentDirectional(0.0, 1.0),
child: Container(
width: 100.0,
height: 50.0,
decoration: const BoxDecoration(),
child: Align(
alignment:
const AlignmentDirectional(1.0, 1.0),
child: FlutterFlowIconButton(
borderRadius: 20.0,
borderWidth: 1.0,
buttonSize: 40.0,
icon: Icon(
Icons.notifications_sharp,
color:
FlutterFlowTheme.of(context).info,
size: 24.0,
),
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 15.0, 0.0, 0.0),
child: Text(
FFLocalizations.of(context).getText(
'rg9pzkpz' /* FRE ACCESS */,
),
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),
),
onPressed: () {
log('IconButton pressed ...');
},
),
),
),
),
],
),
),
],
),
),
],
);
),
),
Align(
alignment: const AlignmentDirectional(0.0, 1.0),
child: Container(
width: 100.0,
height: 50.0,
decoration: const BoxDecoration(),
child: Align(
alignment: const AlignmentDirectional(1.0, 1.0),
child: FlutterFlowIconButton(
borderRadius: 20.0,
borderWidth: 1.0,
buttonSize: 40.0,
icon: Icon(
Icons.notifications_sharp,
color: FlutterFlowTheme.of(context).info,
size: 24.0,
),
onPressed: () {
log('IconButton pressed ...');
},
),
),
),
),
],
),
),
),
],
);
}
SizedBox buildDrawer(BuildContext context) {
return SizedBox(
width: 750.0,
child: Drawer(
elevation: 16.0,
child: Container(
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground,
shape: BoxShape.rectangle,
),
child: Column(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: double.infinity,
decoration: const BoxDecoration(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(5.0),
bottomRight: Radius.circular(5.0),
topLeft: Radius.circular(0.0),
topRight: Radius.circular(0.0),
),
shape: BoxShape.rectangle,
width: 750.0,
child: Drawer(
elevation: 16.0,
child: Container(
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground,
shape: BoxShape.rectangle,
),
child: Column(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: double.infinity,
decoration: const BoxDecoration(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(5.0),
bottomRight: Radius.circular(5.0),
topLeft: Radius.circular(0.0),
topRight: Radius.circular(0.0),
),
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
Padding(
padding: const EdgeInsets.fromLTRB(30, 30, 10, 0),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Flexible(
child: Container(
width: double.infinity,
decoration: const BoxDecoration(),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
width: 50.0,
height: 50.0,
clipBehavior: Clip.antiAlias,
decoration: const BoxDecoration(
shape: BoxShape.circle,
),
child: Image.network(
valueOrDefault<String>(
'https://freaccess.com.br/freaccess/Images/Clients/${FFAppState().cliUUID}.png',
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/7ftdetkzc3s0/360_F_64676383_LdbmhiNM6Ypzb3FM4PPuFP9rHe7ri8Ju.jpg',
),
fit: BoxFit.cover,
),
shape: BoxShape.rectangle,
),
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
Padding(
padding: const EdgeInsets.fromLTRB(30, 30, 10, 0),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Flexible(
child: Container(
width: double.infinity,
decoration: const BoxDecoration(),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
width: 50.0,
height: 50.0,
clipBehavior: Clip.antiAlias,
decoration: const BoxDecoration(
shape: BoxShape.circle,
),
Container(
width: 150.0,
child: Text(
valueOrDefault<String>(
convertToUppercase(
FFAppState().local),
'NOME DO LOCAL',
),
style: FlutterFlowTheme.of(context)
.bodyLarge
.override(
fontFamily: 'Nunito Sans',
color:
FlutterFlowTheme.of(context)
.primaryText,
fontSize: 14.0,
letterSpacing: 0.0,
fontWeight: FontWeight.normal,
useGoogleFonts:
GoogleFonts.asMap()
.containsKey(
'Nunito Sans'),
),
child: Image.network(
valueOrDefault<String>(
'https://freaccess.com.br/freaccess/Images/Clients/${FFAppState().cliUUID}.png',
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/7ftdetkzc3s0/360_F_64676383_LdbmhiNM6Ypzb3FM4PPuFP9rHe7ri8Ju.jpg',
),
fit: BoxFit.cover,
),
].divide(const SizedBox(width: 20.0)),
),
),
Container(
width: 150.0,
child: Text(
valueOrDefault<String>(
convertToUppercase(FFAppState().local),
'NOME DO LOCAL',
),
style: FlutterFlowTheme.of(context)
.bodyLarge
.override(
fontFamily: 'Nunito Sans',
color: FlutterFlowTheme.of(context)
.primaryText,
fontSize: 14.0,
letterSpacing: 0.0,
fontWeight: FontWeight.normal,
useGoogleFonts: GoogleFonts.asMap()
.containsKey('Nunito Sans'),
),
),
),
].divide(const SizedBox(width: 20.0)),
),
),
Container(
width: 50.0,
child: Container(
height: 30.0,
decoration: const BoxDecoration(),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.end,
children: [
Flexible(
child: FlutterFlowIconButton(
borderRadius: 100.0,
borderWidth: 1.0,
buttonSize: 40.0,
icon: Icon(
Icons.close_sharp,
color: FlutterFlowTheme.of(context)
.primary,
size: 20.0,
),
onPressed: () async {
if (scaffoldKey.currentState!
.isDrawerOpen ||
scaffoldKey.currentState!
.isEndDrawerOpen) {
Navigator.pop(context);
}
},
),
Container(
width: 50.0,
child: Container(
height: 30.0,
decoration: const BoxDecoration(),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.end,
children: [
Flexible(
child: FlutterFlowIconButton(
borderRadius: 100.0,
borderWidth: 1.0,
buttonSize: 40.0,
icon: Icon(
Icons.close_sharp,
color: FlutterFlowTheme.of(context)
.primary,
size: 20.0,
),
onPressed: () async {
if (scaffoldKey
.currentState!.isDrawerOpen ||
scaffoldKey.currentState!
.isEndDrawerOpen) {
Navigator.pop(context);
}
},
),
],
),
),
],
),
),
]
.divide(const SizedBox(width: 0.0))
.around(const SizedBox(width: 0.0)),
),
),
]
.divide(const SizedBox(width: 0.0))
.around(const SizedBox(width: 0.0)),
),
].addToStart(const SizedBox(height: 30.0)),
),
),
Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 0.0),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Flexible(
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
8.0, 0.0, 8.0, 0.0),
child: TextFormField(
controller: _model.textController,
focusNode: _model.textFieldFocusNode,
autofocus: false,
obscureText: false,
decoration: InputDecoration(
isDense: true,
labelStyle: FlutterFlowTheme.of(context)
.labelMedium
.override(
fontFamily: FlutterFlowTheme.of(context)
.labelMediumFamily,
color: FlutterFlowTheme.of(context)
.primaryText,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.labelMediumFamily),
),
alignLabelWithHint: false,
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)
.customColor1,
width: 0.5,
),
borderRadius: BorderRadius.circular(2.0),
),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).primary,
width: 0.5,
),
borderRadius: BorderRadius.circular(2.0),
),
errorBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 0.5,
),
borderRadius: BorderRadius.circular(2.0),
),
focusedErrorBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 0.5,
),
borderRadius: BorderRadius.circular(2.0),
),
prefixIcon: const Icon(
Icons.search_sharp,
),
),
style: FlutterFlowTheme.of(context)
.bodyMedium
].addToStart(const SizedBox(height: 30.0)),
),
),
Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 0.0),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Flexible(
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
8.0, 0.0, 8.0, 0.0),
child: TextFormField(
controller: _model.textController,
focusNode: _model.textFieldFocusNode,
autofocus: false,
obscureText: false,
decoration: InputDecoration(
isDense: true,
labelStyle: FlutterFlowTheme.of(context)
.labelMedium
.override(
fontFamily: FlutterFlowTheme.of(context)
.bodyMediumFamily,
.labelMediumFamily,
color:
FlutterFlowTheme.of(context).primaryText,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
.containsKey(FlutterFlowTheme.of(context)
.labelMediumFamily),
),
validator: _model.textControllerValidator
.asValidator(context),
alignLabelWithHint: false,
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).customColor1,
width: 0.5,
),
borderRadius: BorderRadius.circular(2.0),
),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).primary,
width: 0.5,
),
borderRadius: BorderRadius.circular(2.0),
),
errorBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 0.5,
),
borderRadius: BorderRadius.circular(2.0),
),
focusedErrorBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 0.5,
),
borderRadius: BorderRadius.circular(2.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),
),
),
]
.addToStart(const SizedBox(width: 30.0))
.addToEnd(const SizedBox(width: 30.0)),
),
),
Expanded(
child: wrapWithModel(
model: _model.menuComponentModel,
updateCallback: () => setState(() {}),
child: MenuComponentWidget(
expandable: false,
style: MenuView.list,
item: MenuItem.card,
),
),
),
FFButtonWidget(
onPressed: () async {
FFAppState().isLogged = false;
setState(() {});
context.goNamed(
'welcomePage',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.scale,
alignment: Alignment.bottomCenter,
),
},
);
},
text: FFLocalizations.of(context).getText(
'xx0db4wi' /* Sair */,
),
options: FFButtonOptions(
height: 40.0,
padding:
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
iconPadding:
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
color: const Color(0x00D70000),
textStyle:
FlutterFlowTheme.of(context).labelMedium.override(
fontFamily: 'Plus Jakarta Sans',
color: FlutterFlowTheme.of(context).primaryText,
fontSize: 14.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts.asMap()
.containsKey('Plus Jakarta Sans'),
),
elevation: 0.0,
borderSide: const BorderSide(
width: 0.0,
),
borderRadius: BorderRadius.circular(50.0),
]
.addToStart(const SizedBox(width: 30.0))
.addToEnd(const SizedBox(width: 30.0)),
),
),
Expanded(
child: wrapWithModel(
model: _model.menuComponentModel,
updateCallback: () => setState(() {}),
child: MenuComponentWidget(
expandable: false,
style: MenuView.list,
item: MenuItem.card,
),
),
].addToEnd(const SizedBox(height: 64.0)),
),
),
FFButtonWidget(
onPressed: () async {
FFAppState().isLogged = false;
setState(() {});
context.goNamed(
'welcomePage',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.scale,
alignment: Alignment.bottomCenter,
),
},
);
},
text: FFLocalizations.of(context).getText(
'xx0db4wi' /* Sair */,
),
options: FFButtonOptions(
height: 40.0,
padding:
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
iconPadding:
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
color: const Color(0x00D70000),
textStyle: FlutterFlowTheme.of(context).labelMedium.override(
fontFamily: 'Plus Jakarta Sans',
color: FlutterFlowTheme.of(context).primaryText,
fontSize: 14.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts.asMap()
.containsKey('Plus Jakarta Sans'),
),
elevation: 0.0,
borderSide: const BorderSide(
width: 0.0,
),
borderRadius: BorderRadius.circular(50.0),
),
),
].addToEnd(const SizedBox(height: 64.0)),
),
);
),
),
);
// body: Container(
// decoration: BoxDecoration(
@ -836,6 +787,5 @@ class _HomePageWidgetState extends State<HomePageWidget> {
// ),
// ),
// );
}
}

View File

@ -1,94 +1,159 @@
import 'dart:developer';
import 'package:hub/app_state.dart';
import 'package:hub/backend/api_requests/api_calls.dart';
import 'package:flutter/material.dart';
import 'package:hub/components/templates_components/change_passs_qr_code_pass_key_template_component/change_pass_widget.dart';
import 'package:hub/flutter_flow/flutter_flow_icon_button.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:hub/flutter_flow/nav/nav.dart';
import 'package:share_plus/share_plus.dart';
class PreferencesPageModel with ChangeNotifier {
final unfocusNode = FocusNode();
Future<void> toggleFingerprint(BuildContext context) async {
// FFAppState().checkBiometrics()
// .then((value) => FFAppState().authenticateBiometric()
// .then( (value) {
// FFAppState().fingerprint = !FFAppState().fingerprint;
// })
// .whenComplete(() => notifyListeners()));
if(FFAppState().fingerprint) {
if (FFAppState().fingerprint) {
FFAppState().fingerprint = false;
FFAppState().deleteFingerprintPass();
notifyListeners();
} else {
await showModalBottomSheet(
isScrollControlled: true,
backgroundColor: Colors.transparent,
useSafeArea: true,
context: context,
builder: (context) {
return Padding(
padding:
MediaQuery.viewInsetsOf(context),
child:
PassKeyTemplateWidget(
toggleActionStatus: (key) async {
log(key);
FFAppState().fingerprintPass = key;
FFAppState().fingerprint = true;
},
),
);
},
).whenComplete(() => notifyListeners());
await showModalBottomSheet(
isScrollControlled: true,
backgroundColor: Colors.transparent,
useSafeArea: true,
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: PassKeyTemplateWidget(
toggleActionStatus: (key) async {
log(key);
FFAppState().fingerprintPass = key;
FFAppState().fingerprint = true;
},
),
);
},
).whenComplete(() => notifyListeners());
}
}
void enablePerson(BuildContext context) {
notifyListeners();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(FFAppState().userDevUUID, style: TextStyle(color: FlutterFlowTheme.of(context).info) ),
SnackBar(
content: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(FFAppState().userDevUUID,
style: TextStyle(color: FlutterFlowTheme.of(context).info)),
FlutterFlowIconButton(
borderColor: Colors.transparent,
borderRadius: 20.0,
borderWidth: 1.0,
buttonSize: 40.0,
icon: Icon(
Icons.share,
color: FlutterFlowTheme.of(context).info,
size: 24.0,
),
onPressed: () {
log('IconButton pressed ...');
// Implement share functionality here
Share.share(
FFAppState().userDevUUID,
);
},
),
],
),
backgroundColor: FlutterFlowTheme.of(context).primary,
duration: const Duration(seconds: 1),
behavior: SnackBarBehavior.floating,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30),
),
),
),
);
}
void toggleNotify() {
void toggleNotify(BuildContext context) {
FFAppState().notify = !FFAppState().notify;
PhpGroup.changeNotifica.call(
PhpGroup.changeNotifica
.call(
userUUID: FFAppState().userUUID,
devUUID: FFAppState().devUUID,
cliID: FFAppState().cliUUID,
atividade: 'updVisitado',
notifica: FFAppState().notify ? 'S' : 'N',
);
)
.catchError((err) {
log(err.toString());
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
FFLocalizations.of(context).getVariableText(
enText: 'Error changing notification',
ptText: 'Erro ao alterar notificação',
),
style: TextStyle(color: FlutterFlowTheme.of(context).info)),
backgroundColor: FlutterFlowTheme.of(context).error,
duration: const Duration(seconds: 3),
behavior: SnackBarBehavior.floating,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30),
),
),
);
});
notifyListeners();
}
void localLogout(){
PhpGroup.resopndeVinculo.call(
void localUnlink(BuildContext context) {
PhpGroup.resopndeVinculo
.call(
userUUID: FFAppState().userUUID,
devUUID: FFAppState().devUUID,
cliID: FFAppState().cliUUID,
tarefa: 'I',
)
.catchError((err) {
log(err.toString());
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
FFLocalizations.of(context).getVariableText(
enText: 'Error unlinking device',
ptText: 'Erro ao desvincular dispositivo',
),
style: TextStyle(color: FlutterFlowTheme.of(context).info)),
backgroundColor: FlutterFlowTheme.of(context).error,
duration: const Duration(seconds: 3),
behavior: SnackBarBehavior.floating,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30),
),
),
);
}).then(
(value) {
FFAppState().deleteCliUUID();
FFAppState().deleteLocal();
FFAppState().deleteOwnerUUID();
Navigator.pop(context);
},
);
notifyListeners();
}
@ -108,57 +173,99 @@ class PreferencesPageModel with ChangeNotifier {
);
}
Future<void> togglePass(BuildContext context) async {
Future<void> togglePass(BuildContext context) async {
debugPrint('pass: ${FFAppState().pass}');
if(FFAppState().pass) {
if (FFAppState().pass) {
FFAppState().pass = false;
FFAppState().deleteAccessPass();
notifyListeners();
} else {
await showModalBottomSheet(
isScrollControlled: true,
backgroundColor: Colors.transparent,
useSafeArea: true,
context: context,
builder: (context) {
return Padding(
padding:
MediaQuery.viewInsetsOf(context),
child:
PassKeyTemplateWidget(
toggleActionStatus: (key) async {
FFAppState().accessPass = key;
await showModalBottomSheet(
isScrollControlled: true,
backgroundColor: Colors.transparent,
useSafeArea: true,
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: PassKeyTemplateWidget(
toggleActionStatus: (key) async {
FFAppState().accessPass = key;
notifyListeners();
debugPrint('key: $key');
await PhpGroup.changePass.call(
await PhpGroup.changePass
.call(
userUUID: FFAppState().userUUID,
devUUID: FFAppState().devUUID,
cliID: FFAppState().cliUUID,
atividade: 'updVisitado',
newSenha: FFAppState().accessPass,
)
.then((value) {
.then((value) {
FFAppState().pass = true;
// var error = jsonDecode(value.jsonBody['error'].toString());
// log('${jsonDecode(value.jsonBody['error'].toString())}');
if(jsonDecode(value.jsonBody['error'].toString()) == false) {
if (jsonDecode(value.jsonBody['error'].toString()) == false) {
FFAppState().pass = true;
} else {
FFAppState().pass = false;
}
})
.onError((error, StackTrace) {
FFAppState().pass = false;
log(error.toString());
log(StackTrace.toString());
})
.whenComplete(() => notifyListeners());
},
),
);
},
);
}).onError((error, StackTrace) {
FFAppState().pass = false;
log(error.toString());
log(StackTrace.toString());
}).whenComplete(() => notifyListeners());
},
),
);
},
);
}
}
Future<void> togglePanic(BuildContext context) async {
if (FFAppState().panic) {
FFAppState().panic = false;
FFAppState().deletePanicPass();
notifyListeners();
} else {
await showModalBottomSheet(
isScrollControlled: true,
backgroundColor: Colors.transparent,
useSafeArea: true,
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: PassKeyTemplateWidget(
toggleActionStatus: (key) async {
FFAppState().panicPass = key;
notifyListeners();
await PhpGroup.changePass
.call(
userUUID: FFAppState().userUUID,
devUUID: FFAppState().devUUID,
cliID: FFAppState().cliUUID,
atividade: 'updVisitado',
newSenha: FFAppState().panicPass,
)
.then((value) {
FFAppState().panic = true;
if (jsonDecode(value.jsonBody['error'].toString()) == false) {
FFAppState().panic = true;
} else {
FFAppState().panic = false;
}
}).onError((e, s) {
FFAppState().panic = false;
log(e.toString());
log(s.toString());
}).whenComplete(() => notifyListeners());
},
),
);
},
);
}
}
@ -167,4 +274,4 @@ class PreferencesPageModel with ChangeNotifier {
unfocusNode.dispose();
super.dispose();
}
}
}

View File

@ -9,7 +9,6 @@ import 'package:hub/flutter_flow/nav/nav.dart';
import 'package:hub/pages/preferences_settings_page/preferences_settings_model.dart';
import 'package:provider/provider.dart';
class PreferencesPageWidget extends StatelessWidget {
const PreferencesPageWidget({super.key});
@ -46,7 +45,7 @@ class PreferencesPageWidget extends StatelessWidget {
FFLocalizations.of(context).getVariableText(
enText: 'Preferences',
ptText: 'Preferências',
),
),
style: FlutterFlowTheme.of(context).headlineMedium.override(
fontFamily: 'Nunito',
color: FlutterFlowTheme.of(context).primaryText,
@ -74,7 +73,7 @@ class PreferencesPageWidget extends StatelessWidget {
// childAspectRatio: 1.0,
// mainAxisExtent: 100.0,
// ),
itemCount: 6, // Assuming 4 items for simplicity
itemCount: 7, // Assuming 4 items for simplicity
padding: const EdgeInsets.symmetric(horizontal: 20.0),
physics: const AlwaysScrollableScrollPhysics(),
itemBuilder: (BuildContext context, int index) {
@ -90,82 +89,110 @@ class PreferencesPageWidget extends StatelessWidget {
);
}
Widget _buildIconButton(BuildContext context, int index, PreferencesPageModel model) {
Widget _buildIconButton(
BuildContext context, int index, PreferencesPageModel model) {
IconData icon;
Function() onPressed =() => {};
Function() onPressed = () => {};
bool isEnabled;
String content;
switch (index) {
case 0:
icon = Icons.fingerprint;
onPressed = () => model.toggleFingerprint(context); // Disable if fingerprint is false
onPressed = () =>
model.toggleFingerprint(context); // Disable if fingerprint is false
isEnabled = FFAppState().fingerprint;
content = FFLocalizations.of(context).getVariableText(
ptText: 'Ative a autenticação por impressão digital para login seguro.',
content = FFLocalizations.of(context).getVariableText(
ptText:
'Ative a autenticação por impressão digital para login seguro.',
enText: 'Enable fingerprint authentication for secure login.',
);
);
break;
case 1:
icon = Icons.person;
onPressed = () => model.enablePerson(context);
isEnabled = FFAppState().person;
content = FFLocalizations.of(context).getVariableText(
content = FFLocalizations.of(context).getVariableText(
ptText: 'Exibir código de identificação remota',
enText: 'Display remote identification code',
);
);
break;
case 2:
icon = Icons.notifications;
onPressed = model.toggleNotify;
onPressed = () => model.toggleNotify(context);
isEnabled = FFAppState().notify;
content = FFLocalizations.of(context).getVariableText(
content = FFLocalizations.of(context).getVariableText(
ptText: 'Ative para receber sua notificação de acesso',
enText: 'Enable to receive your access notification',
);
);
break;
case 3:
icon = Icons.lock_clock_sharp;
icon = Icons.lock;
// onLongPress = model.togglePass(context, model);
isEnabled = FFAppState().pass;
content = FFLocalizations.of(context).getVariableText(
content = FFLocalizations.of(context).getVariableText(
ptText: 'Ative para inserir uma credencial de acesso para o QRCode',
enText: 'Enable to enter an access credential for the QRCode',
);
);
break;
case 4:
icon = Icons.landscape;
onPressed = model.localLogout;
isEnabled = false;
content = FFLocalizations.of(context).getVariableText(
ptText: 'Ative para se desvincular do local selecionado',
enText: 'Enable to unlink from the selected location',
);
icon = Icons.lock_clock_sharp;
// onLongPress = model.togglePass(context, model);
isEnabled = FFAppState().panic;
content = FFLocalizations.of(context).getVariableText(
ptText: 'Ative para inserir uma credencial de pânico para o QRCode',
enText: 'Enable to enter an panic credential for the QRCode',
);
break;
case 5:
icon = Icons.landscape;
onPressed = () => model.localUnlink(context);
isEnabled = true;
content = FFLocalizations.of(context).getVariableText(
ptText: 'Desative para se desvincular do local selecionado',
enText: 'Enable to unlink from the selected location',
);
break;
case 6:
icon = Icons.delete;
onPressed = () => model.deleteAccount(context);
isEnabled = false;
content = FFLocalizations.of(context).getVariableText(
ptText: 'Delete sua conta e todos os dados associados permanentemente.',
isEnabled = true;
content = FFLocalizations.of(context).getVariableText(
ptText:
'Delete sua conta e todos os dados associados permanentemente.',
enText: 'Delete your account and all associated data permanently.',
);
);
break;
default:
throw Exception('Invalid index: $index');
}
return Container(
return SizedBox(
height: 100,
child: GestureDetector(
onTap: index != 3 ? onPressed : () {model.togglePass(context);},
onTap: () {
switch (index) {
case 3:
model.togglePass(context);
break;
case 4:
model.togglePanic(context);
break;
default:
onPressed();
}
},
child: Row(
children: [
CircleAvatar(
backgroundColor: isEnabled ? FlutterFlowTheme.of(context).primary : FlutterFlowTheme.of(context).alternate,
backgroundColor: isEnabled
? FlutterFlowTheme.of(context).primary
: FlutterFlowTheme.of(context).alternate,
child: Icon(
icon,
color: isEnabled ? FlutterFlowTheme.of(context).primaryBackground : FlutterFlowTheme.of(context).primary,
color: isEnabled
? FlutterFlowTheme.of(context).primaryBackground
: FlutterFlowTheme.of(context).primary,
// icon: Icon(icon, color: isEnabled ? FlutterFlowTheme.of(context).primaryBackground : FlutterFlowTheme.of(context).primary, size: 40.0),
// onPressed: index != 3 ? onPressed : () {model.togglePass(context);},
// borderRadius: 20.0,
@ -181,13 +208,13 @@ class PreferencesPageWidget extends StatelessWidget {
child: Text(
content,
style: FlutterFlowTheme.of(context).bodySmall.override(
fontFamily: 'Nunito',
color: FlutterFlowTheme.of(context).primaryText,
fontSize: 14.0,
letterSpacing: 0.0,
fontWeight: FontWeight.normal,
fontStyle: FontStyle.normal,
),
fontFamily: 'Nunito',
color: FlutterFlowTheme.of(context).primaryText,
fontSize: 14.0,
letterSpacing: 0.0,
fontWeight: FontWeight.normal,
fontStyle: FontStyle.normal,
),
overflow: TextOverflow.clip,
),
),
@ -196,4 +223,4 @@ class PreferencesPageWidget extends StatelessWidget {
),
);
}
}
}

View File

@ -1,3 +1,5 @@
import 'package:hub/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_widget.dart';
import '/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/form_field_controller.dart';
@ -8,108 +10,12 @@ class RegisterVisitorPageModel
extends FlutterFlowModel<RegisterVisitorPageWidget> {
/// State fields for stateful widgets in this page.
final unfocusNode = FocusNode();
bool isDataUploading = false;
FFUploadedFile uploadedLocalFile =
FFUploadedFile(bytes: Uint8List.fromList([]));
// State field(s) for TextField widget.
FocusNode? textFieldFocusNode1;
TextEditingController? textController1;
String? Function(BuildContext, String?)? textController1Validator;
String? _textController1Validator(BuildContext context, String? val) {
if (val == null || val.isEmpty) {
return FFLocalizations.of(context).getVariableText(
enText: 'This field is required',
ptText: 'Este campo é obrigatório',
);
}
return null;
}
// State field(s) for TextField widget.
FocusNode? textFieldFocusNode2;
TextEditingController? textController2;
String? Function(BuildContext, String?)? textController2Validator;
String? _textController2Validator(BuildContext context, String? val) {
if (val == null || val.isEmpty) {
return FFLocalizations.of(context).getVariableText(
enText: 'This field is required',
ptText: 'Este campo é obrigatório',
);
}
return null;
}
// State field(s) for DropDown widget.
String? dropDownValue;
FormFieldController<String>? dropDownValueController;
// State field(s) for TextField widget.
FocusNode? textFieldFocusNode3;
TextEditingController? textController3;
String? Function(BuildContext, String?)? textController3Validator;
String? _textController3Validator(BuildContext context, String? val) {
if (val == null || val.isEmpty) {
return FFLocalizations.of(context).getVariableText(
enText: 'This field is required',
ptText: 'Este campo é obrigatório',
);
}
return null;
}
// State field(s) for TextField widget.
FocusNode? textFieldFocusNode4;
TextEditingController? textController4;
String? Function(BuildContext, String?)? textController4Validator;
String? _textController4Validator(BuildContext context, String? val) {
if (val == null || val.isEmpty) {
return FFLocalizations.of(context).getVariableText(
enText: 'This field is required',
ptText: 'Este campo é obrigatório',
);
}
return null;
}
// Stores action output result for [Custom Action - convertImageFileToBase64] action in Button widget.
String? imgBase64;
// Stores action output result for [Backend Call - API (postScheduleVisitor)] action in Button widget.
ApiCallResponse? scheduleVisitor;
late RegisiterVistorTemplateComponentModel
regisiterVistorTemplateComponentModel;
@override
void initState(BuildContext context) {
textFieldFocusNode1 = FocusNode();
textController1 = TextEditingController();
textController1Validator = _textController1Validator;
textFieldFocusNode2 = FocusNode();
textController2 = TextEditingController();
textController2Validator = _textController2Validator;
dropDownValue = '';
// dropDownValueController = FormFieldController<String>(initialValue: dropDownValue);
textFieldFocusNode3 = FocusNode();
textController3 = TextEditingController();
textController3Validator = _textController3Validator;
textFieldFocusNode4 = FocusNode();
textController4 = TextEditingController();
textController4Validator = _textController4Validator;
}
void initState(BuildContext context) {}
@override
void dispose() {
unfocusNode.dispose();
textFieldFocusNode1?.dispose();
textController1?.dispose();
textFieldFocusNode2?.dispose();
textController2?.dispose();
textFieldFocusNode3?.dispose();
textController3?.dispose();
textFieldFocusNode4?.dispose();
textController4?.dispose();
}
}
void dispose() {}
}

View File

@ -1,17 +1,10 @@
import 'package:hub/flutter_flow/nav/nav.dart';
import '/backend/api_requests/api_calls.dart';
import '/components/molecular_components/throw_exception/throw_exception_widget.dart';
import '/flutter_flow/flutter_flow_drop_down.dart';
import '/flutter_flow/flutter_flow_icon_button.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:hub/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_widget.dart';
import 'package:hub/flutter_flow/flutter_flow_icon_button.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/nav/nav.dart';
import '/flutter_flow/flutter_flow_util.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'register_visitor_page_model.dart';
export 'register_visitor_page_model.dart';
@ -33,18 +26,6 @@ class _RegisterVisitorPageWidgetState extends State<RegisterVisitorPageWidget> {
void initState() {
super.initState();
_model = createModel(context, () => RegisterVisitorPageModel());
_model.textController1 ??= TextEditingController();
_model.textFieldFocusNode1 ??= FocusNode();
_model.textController2 ??= TextEditingController();
_model.textFieldFocusNode2 ??= FocusNode();
_model.textController3 ??= TextEditingController();
_model.textFieldFocusNode3 ??= FocusNode();
_model.textController4 ??= TextEditingController();
_model.textFieldFocusNode4 ??= FocusNode();
}
@override
@ -57,878 +38,46 @@ class _RegisterVisitorPageWidgetState extends State<RegisterVisitorPageWidget> {
@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,
return Scaffold(
appBar: AppBar(
backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
appBar: AppBar(
backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
automaticallyImplyLeading: false,
leading: FlutterFlowIconButton(
borderColor: Colors.transparent,
borderRadius: 30.0,
borderWidth: 1.0,
buttonSize: 60.0,
icon: Icon(
Icons.keyboard_arrow_left,
color: FlutterFlowTheme.of(context).primaryText,
size: 30.0,
),
onPressed: () async {
context.pop();
},
automaticallyImplyLeading: false,
leading: FlutterFlowIconButton(
borderColor: Colors.transparent,
borderRadius: 30.0,
borderWidth: 1.0,
buttonSize: 60.0,
icon: Icon(
Icons.keyboard_arrow_left,
color: FlutterFlowTheme.of(context).primaryText,
size: 30.0,
),
title: Text(
FFLocalizations.of(context).getText(
'megskb6s' /* Cadastro Visitante */,
),
style: FlutterFlowTheme.of(context).headlineMedium.override(
fontFamily: FlutterFlowTheme.of(context).headlineMediumFamily,
color: FlutterFlowTheme.of(context).primaryText,
fontSize: 15.0,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).headlineMediumFamily),
),
),
actions: const [],
centerTitle: true,
elevation: 0.0,
onPressed: () async {
context.pop();
},
),
body: SafeArea(
top: true,
child: Align(
alignment: const AlignmentDirectional(0.0, 1.0),
child: Container(
width: double.infinity,
height: double.infinity,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground,
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(0.0),
bottomRight: Radius.circular(0.0),
topLeft: Radius.circular(25.0),
topRight: Radius.circular(25.0),
),
),
child: SingleChildScrollView(
child: Form(
// key: UniqueKey(),
autovalidateMode: AutovalidateMode.onUserInteraction,
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Builder(
builder: (context) {
if ((_model.uploadedLocalFile.bytes?.isNotEmpty ??
false)) {
return InkWell(
splashColor: Colors.transparent,
focusColor: Colors.transparent,
hoverColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () async {
setState(() {
_model.isDataUploading = false;
_model.uploadedLocalFile = FFUploadedFile(
bytes: Uint8List.fromList([]));
});
},
child: ClipRRect(
borderRadius: BorderRadius.circular(8.0),
child: Image.memory(
_model.uploadedLocalFile.bytes ??
Uint8List.fromList([]),
width: 300.0,
height: 200.0,
fit: BoxFit.cover,
),
),
);
} else {
return Stack(
children: [
Align(
alignment: const AlignmentDirectional(0.01, 0.0),
child: FFButtonWidget(
onPressed: () async {
final selectedMedia =
await selectMediaWithSourceBottomSheet(
context: context,
maxWidth: 300.00,
maxHeight: 300.00,
imageQuality: 0,
allowPhoto: true,
includeDimensions: true,
);
if (selectedMedia != null &&
selectedMedia.every((m) =>
validateFileFormat(
m.storagePath, context))) {
setState(
() => _model.isDataUploading = true);
var selectedUploadedFiles =
<FFUploadedFile>[];
try {
showUploadMessage(
context,
'Uploading file...',
showLoading: true,
);
selectedUploadedFiles = selectedMedia
.map((m) => FFUploadedFile(
name: m.storagePath
.split('/')
.last,
bytes: m.bytes,
height: m.dimensions?.height,
width: m.dimensions?.width,
blurHash: m.blurHash,
))
.toList();
} finally {
ScaffoldMessenger.of(context)
.hideCurrentSnackBar();
_model.isDataUploading = false;
}
if (selectedUploadedFiles.length ==
selectedMedia.length) {
setState(() {
_model.uploadedLocalFile =
selectedUploadedFiles.first;
});
showUploadMessage(context, 'Success!');
} else {
setState(() {});
showUploadMessage(
context, 'Failed to upload data');
return;
}
}
},
text: '',
icon: Icon(
Icons.photo_camera,
color: FlutterFlowTheme.of(context).accent1,
size: 30.0,
),
options: FFButtonOptions(
width: 300.0,
height: 80.0,
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 0.0),
iconPadding: 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),
),
borderSide: BorderSide(
color:
FlutterFlowTheme.of(context).accent1,
width: 0.5,
),
borderRadius: BorderRadius.circular(8.0),
),
),
),
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 50.0, 0.0, 0.0),
child: Text(
FFLocalizations.of(context).getText(
'p4ftwxcy' /* Clique para adicionar a foto p... */,
),
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),
),
),
),
),
],
);
}
},
),
Align(
alignment: const AlignmentDirectional(-1.0, 0.0),
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
20.0, 30.0, 0.0, 15.0),
child: Text(
FFLocalizations.of(context).getText(
'zazj5d8b' /* Preencha o formulário com os d... */,
),
textAlign: TextAlign.start,
style: FlutterFlowTheme.of(context)
.bodyMedium
.override(
fontFamily: FlutterFlowTheme.of(context)
.bodyMediumFamily,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
),
),
),
),
Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(24.0, 0.0, 24.0, 0.0),
child: TextFormField(
controller: _model.textController1,
focusNode: _model.textFieldFocusNode1,
autofocus: false,
textInputAction: TextInputAction.next,
obscureText: false,
decoration: InputDecoration(
isDense: true,
labelText: FFLocalizations.of(context).getText(
'v7g73yik' /* Nome */,
),
labelStyle: FlutterFlowTheme.of(context)
.labelMedium
.override(
fontFamily: FlutterFlowTheme.of(context)
.labelMediumFamily,
color: FlutterFlowTheme.of(context).primaryText,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context)
.labelMediumFamily),
),
hintStyle: FlutterFlowTheme.of(context)
.labelMedium
.override(
fontFamily: FlutterFlowTheme.of(context)
.labelMediumFamily,
color: FlutterFlowTheme.of(context).primaryText,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context)
.labelMediumFamily),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).customColor6,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).primary,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
),
focusedErrorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
),
suffixIcon: Icon(
Icons.person,
color: FlutterFlowTheme.of(context).accent1,
),
),
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),
),
maxLines: null,
keyboardType: TextInputType.name,
validator: _model.textController1Validator
.asValidator(context),
),
),
Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(24.0, 0.0, 24.0, 0.0),
child: TextFormField(
controller: _model.textController2,
focusNode: _model.textFieldFocusNode2,
autofocus: false,
textCapitalization: TextCapitalization.none,
textInputAction: TextInputAction.next,
obscureText: false,
decoration: InputDecoration(
isDense: true,
labelText: FFLocalizations.of(context).getText(
'rl8tvwnr' /* Documento */,
),
labelStyle: FlutterFlowTheme.of(context)
.labelMedium
.override(
fontFamily: FlutterFlowTheme.of(context)
.labelMediumFamily,
color: FlutterFlowTheme.of(context).primaryText,
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: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).customColor6,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).primary,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
),
focusedErrorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
),
suffixIcon: Icon(
Icons.document_scanner,
color: FlutterFlowTheme.of(context).accent1,
),
),
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),
),
validator: _model.textController2Validator
.asValidator(context),
),
),
Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 10.0),
child: Container(
width: MediaQuery.sizeOf(context).width * 0.95,
decoration: const BoxDecoration(),
child: Column(
children: [
Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 7.0),
child: Text(
FFLocalizations.of(context).getText(
'yp23q90m' /* Selecione o tipo: */,
),
style: FlutterFlowTheme.of(context)
.bodyMedium
.override(
fontFamily: FlutterFlowTheme.of(context)
.bodyMediumFamily,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
),
),
),
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 5.0),
child: FlutterFlowDropDown<String>(
controller: _model.dropDownValueController ??=
FormFieldController<String>(null),
options: [
FFLocalizations.of(context).getText(
'n8vddmcq' /* Visitante */,
),
FFLocalizations.of(context).getText(
'9luaa09e' /* Prestador de Serviço */,
)
],
onChanged: (val) =>
setState(() => _model.dropDownValue = val),
width: 200.0,
height: 44.0,
textStyle: 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),
),
hintText: FFLocalizations.of(context).getText(
'pmezihb4' /* Selecione... */,
),
icon: Icon(
Icons.keyboard_arrow_down_rounded,
color:
FlutterFlowTheme.of(context).primaryText,
size: 24.0,
),
elevation: 2.0,
borderColor:
FlutterFlowTheme.of(context).customColor6,
borderWidth: 0.5,
borderRadius: 8.0,
margin: const EdgeInsetsDirectional.fromSTEB(
16.0, 0.0, 16.0, 0.0),
hidesUnderline: true,
isOverButton: true,
isSearchable: false,
isMultiSelect: false,
),
),
]
.divide(const SizedBox(width: 19.0))
.addToStart(const SizedBox(width: 30.0)),
),
if (_model.dropDownValue == null ||
_model.dropDownValue == '')
Align(
alignment: const AlignmentDirectional(0.4, 0),
child: Text(FFLocalizations.of(context).getVariableText(
enText: 'This field is required',
ptText: 'Este campo é obrigatório',
),
style: FlutterFlowTheme.of(context).bodySmall.override(
fontFamily: FlutterFlowTheme.of(context)
.bodySmallFamily,
color: FlutterFlowTheme.of(context).error,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).bodySmallFamily),
)),
),
],
),
),
),
Align(
alignment: const AlignmentDirectional(-1.0, 0.0),
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
20.0, 0.0, 0.0, 15.0),
child: Text(
FFLocalizations.of(context).getText(
'bqpucwh0' /* Contatos */,
),
textAlign: TextAlign.start,
style: FlutterFlowTheme.of(context)
.bodyMedium
.override(
fontFamily: FlutterFlowTheme.of(context)
.bodyMediumFamily,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
),
),
),
),
Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(24.0, 0.0, 24.0, 0.0),
child: TextFormField(
controller: _model.textController3,
focusNode: _model.textFieldFocusNode3,
autofocus: false,
textInputAction: TextInputAction.next,
obscureText: false,
decoration: InputDecoration(
isDense: true,
labelText: FFLocalizations.of(context).getText(
'h84ls2r6' /* Telefone */,
),
labelStyle: FlutterFlowTheme.of(context)
.labelMedium
.override(
fontFamily: FlutterFlowTheme.of(context)
.labelMediumFamily,
color: FlutterFlowTheme.of(context).primaryText,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context)
.labelMediumFamily),
),
hintStyle: FlutterFlowTheme.of(context)
.labelMedium
.override(
fontFamily: FlutterFlowTheme.of(context)
.labelMediumFamily,
color: FlutterFlowTheme.of(context).primaryText,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context)
.labelMediumFamily),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).customColor6,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).primary,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
),
focusedErrorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
),
suffixIcon: Icon(
Icons.phone,
color: FlutterFlowTheme.of(context).accent1,
),
),
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),
),
validator: _model.textController3Validator
.asValidator(context),
),
),
Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(24.0, 0.0, 24.0, 0.0),
child: TextFormField(
controller: _model.textController4,
focusNode: _model.textFieldFocusNode4,
autofocus: false,
textInputAction: TextInputAction.done,
obscureText: false,
decoration: InputDecoration(
isDense: true,
labelText: FFLocalizations.of(context).getText(
'fqp7qmka' /* Email */,
),
labelStyle: FlutterFlowTheme.of(context)
.labelMedium
.override(
fontFamily: FlutterFlowTheme.of(context)
.labelMediumFamily,
color: FlutterFlowTheme.of(context).primaryText,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context)
.labelMediumFamily),
),
hintStyle: FlutterFlowTheme.of(context)
.labelMedium
.override(
fontFamily: FlutterFlowTheme.of(context)
.labelMediumFamily,
color: FlutterFlowTheme.of(context).primaryText,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context)
.labelMediumFamily),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).customColor6,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).primary,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
),
focusedErrorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 0.5,
),
borderRadius: BorderRadius.circular(10.0),
),
suffixIcon: Icon(
Icons.email,
color: FlutterFlowTheme.of(context).accent1,
),
),
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),
),
keyboardType: TextInputType.emailAddress,
validator: _model.textController4Validator
.asValidator(context),
),
),
Align(
alignment: const AlignmentDirectional(0.0, 1.0),
child: Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(0.0, 65.0, 0.0, 0.0),
child: FFButtonWidget(
onPressed: () async {
if (((_model.uploadedLocalFile.bytes
?.isNotEmpty ??
false)) &&
(_model.textController1.text != '') &&
(_model.dropDownValue != null &&
_model.dropDownValue != '') &&
(_model.textController2.text != '')) {
_model.imgBase64 =
await actions.convertImageFileToBase64(
_model.uploadedLocalFile,
);
_model.scheduleVisitor =
await PhpGroup.postScheduleVisitorCall.call(
devUUID: FFAppState().devUUID,
userUUID: FFAppState().userUUID,
cliID: FFAppState().cliUUID,
atividade: 'putVisitante',
documento: '7654553234232342',
nome: 'Test',
tipo: 'V',
foto: 'base64;jpeg,klajsalkjslkajslkajl',
).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(
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.',
),
),
),
),
);
},
);
});
if (PhpGroup.postScheduleVisitorCall.error(
(_model.scheduleVisitor?.jsonBody ?? ''),
) ==
false) {
setState(() {
_model.textController1?.clear();
_model.textController2?.clear();
_model.textController3?.clear();
_model.textController4?.clear();
});
setState(() {
_model.dropDownValueController?.reset();
});
} else {
await showAdaptiveDialog(
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: Dialog(
child: ThrowExceptionWidget(
msg:FFLocalizations.of(context).getVariableText(
ptText: 'Erro ao cadastrar visitante. Tente novamente.',
enText: 'Error registering visitor. Try again.',
),
),
),
),
);
},
).then((value) => safeSetState(() {}));
}
} else {
await showAdaptiveDialog(
context: context,
builder: (context) {
return GestureDetector(
onTap: () => Navigator.pop(context),
child: Padding(
padding: MediaQuery.viewInsetsOf(context),
child: Dialog(
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.',
),
),
),
),
);
},
).then((value) => safeSetState(() {}));
}
setState(() {});
},
text: FFLocalizations.of(context).getText(
'okbw0aiu' /* Cadastrar */,
),
options: FFButtonOptions(
width: 250.0,
height: 36.0,
padding: const EdgeInsetsDirectional.fromSTEB(
80.0, 0.0, 80.0, 0.0),
iconPadding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 0.0),
color: FlutterFlowTheme.of(context).primary,
textStyle: FlutterFlowTheme.of(context)
.titleSmall
.override(
fontFamily: FlutterFlowTheme.of(context)
.titleSmallFamily,
color: FlutterFlowTheme.of(context).info,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(FlutterFlowTheme.of(context)
.titleSmallFamily),
),
borderSide: const BorderSide(
color: Colors.transparent,
width: 30.0,
),
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(15.0),
bottomRight: Radius.circular(15.0),
topLeft: Radius.circular(15.0),
topRight: Radius.circular(15.0),
),
),
),
),
),
]
.divide(const SizedBox(height: 10.0))
.addToStart(const SizedBox(height: 30.0)),
),
),
),
),
title: Text(
FFLocalizations.of(context).getText(
'megskb6s' /* Cadastro Visitante */,
),
style: FlutterFlowTheme.of(context).headlineMedium.override(
fontFamily: FlutterFlowTheme.of(context).headlineMediumFamily,
color: FlutterFlowTheme.of(context).primaryText,
fontSize: 15.0,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).headlineMediumFamily),
),
),
actions: const [],
centerTitle: true,
elevation: 0.0,
),
body: const SafeArea(
top: true,
child: RegisiterVistorTemplateComponentWidget(
source: 'RegisterVisitorPage',
)),
);
}
}
}

View File

@ -4,7 +4,6 @@ import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/flutter_flow/form_field_controller.dart';
import 'package:hub/flutter_flow/request_manager.dart';
import 'package:flutter/material.dart';
import 'package:hub/pages/schedule_complete_visit_page/schedule_complete_visit_page_widget.dart';
@ -51,6 +50,7 @@ class ScheduleCompleteVisitPageModel
FocusNode? textFieldFocusNode1;
TextEditingController? textController1;
String? Function(BuildContext, String?)? textController1Validator;
DateTime? datePicked1;
// State field(s) for TextField widget.
FocusNode? textFieldFocusNode2;
@ -107,4 +107,4 @@ class ScheduleCompleteVisitPageModel
return false;
}
}
}

View File

@ -1,6 +1,5 @@
import 'dart:developer';
import 'package:auto_size_text/auto_size_text.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
@ -24,7 +23,6 @@ import 'package:hub/flutter_flow/nav/nav.dart';
import 'package:hub/pages/schedule_complete_visit_page/schedule_complete_visit_page_model.dart';
import 'package:provider/provider.dart';
class ScheduleCompleteVisitPageWidget extends StatefulWidget {
const ScheduleCompleteVisitPageWidget({
super.key,
@ -111,7 +109,7 @@ class _ScheduleCompleteVisitPageWidgetState
// Simulate fetching data from an API or database
Future<List<String>> fetchVisitHistory(int start, int limit) async {
// Simulate network delay
await Future.delayed(Duration(seconds: 1));
await Future.delayed(const Duration(seconds: 1));
// Generate a list of visit history items
return List.generate(limit, (index) => "Item ${start + index}");
}
@ -163,7 +161,6 @@ class _ScheduleCompleteVisitPageWidgetState
}
}
PreferredSizeWidget appBarScheduleCompleteVisit(BuildContext context) {
return AppBar(
backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
@ -315,8 +312,8 @@ Widget scheduleVisit(
padding: const EdgeInsets.fromLTRB(
0,
0,
0,
20.0,
20,
20,
),
shrinkWrap: true,
scrollDirection: Axis.vertical,
@ -362,14 +359,16 @@ Widget scheduleVisit(
setState(() {});
},
child: Container(
width: 100.0,
width: MediaQuery.of(context).size.width,
height: 70.0,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context)
.secondaryBackground,
.primaryBackground,
),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Container(
width: 50.0,
@ -393,57 +392,35 @@ Widget scheduleVisit(
fit: BoxFit.cover,
),
),
Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Text(
getJsonField(
visitorListViewItem,
r'''$.VTE_NOME''',
).toString(),
style:
FlutterFlowTheme.of(context)
.bodyMedium
.override(
fontFamily:
FlutterFlowTheme.of(
context)
.bodyMediumFamily,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
FlutterFlowTheme.of(
context)
.bodyMediumFamily),
),
),
Text(
getJsonField(
visitorListViewItem,
r'''$.VTE_TIPO''',
).toString(),
style:
FlutterFlowTheme.of(context)
.bodyMedium
.override(
fontFamily:
FlutterFlowTheme.of(
context)
.bodyMediumFamily,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
FlutterFlowTheme.of(
context)
.bodyMediumFamily),
),
),
],
Text(
getJsonField(
visitorListViewItem,
r'''$.VTE_NOME''',
).toString(),
style: FlutterFlowTheme.of(context)
.bodyMedium
.override(
fontFamily:
FlutterFlowTheme.of(
context)
.bodyMediumFamily,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
FlutterFlowTheme.of(
context)
.bodyMediumFamily),
),
),
IconButton(
onPressed: () async {
_model
.removeFromVisitorJsonList(
visitorListViewItem);
setState(() {});
},
icon: const Icon(Icons.close)),
]
.divide(const SizedBox(width: 30.0))
.addToStart(
@ -466,10 +443,11 @@ Widget scheduleVisit(
onPressed: () async {
await showModalBottomSheet(
isScrollControlled: true,
isDismissible: true,
backgroundColor:
FlutterFlowTheme.of(context)
.primaryBackground,
enableDrag: false,
enableDrag: true,
context: context,
builder: (context) {
return GestureDetector(
@ -480,25 +458,34 @@ Widget scheduleVisit(
_model.unfocusNode)
: FocusScope.of(context)
.unfocus(),
child: Padding(
padding: MediaQuery.viewInsetsOf(
context),
child:
VisitorSearchModalTemplateComponentWidget(
getVisitors:
(visitorsParam) async {
_model.visitorJsonList =
visitorsParam!
.toList()
.cast<dynamic>();
setState(() {});
},
getDocs: (docsParam) async {
_model.visitorStrList =
strListToStr(
docsParam!.toList());
setState(() {});
},
child: SizedBox(
height: MediaQuery.of(context)
.size
.height *
0.9,
width: MediaQuery.of(context)
.size
.width,
child: Padding(
padding: MediaQuery.viewInsetsOf(
context),
child:
VisitorSearchModalTemplateComponentWidget(
getVisitors:
(visitorsParam) async {
_model.visitorJsonList =
visitorsParam!
.toList()
.cast<dynamic>();
setState(() {});
},
getDocs: (docsParam) async {
_model.visitorStrList =
strListToStr(
docsParam!.toList());
setState(() {});
},
),
),
),
);
@ -801,7 +788,7 @@ Widget scheduleVisit(
pickerBackgroundColor:
FlutterFlowTheme.of(
context)
.secondaryBackground,
.primaryBackground,
pickerForegroundColor:
FlutterFlowTheme.of(
context)
@ -822,7 +809,7 @@ Widget scheduleVisit(
);
},
);
TimeOfDay? datePicked1Time;
if (datePicked1Date != null) {
datePicked1Time =
@ -868,7 +855,7 @@ Widget scheduleVisit(
pickerBackgroundColor:
FlutterFlowTheme.of(
context)
.secondaryBackground,
.primaryBackground,
pickerForegroundColor:
FlutterFlowTheme.of(
context)
@ -890,7 +877,7 @@ Widget scheduleVisit(
},
);
}
if (datePicked1Date != null &&
datePicked1Time != null) {
safeSetState(() {
@ -1125,7 +1112,7 @@ Widget scheduleVisit(
pickerBackgroundColor:
FlutterFlowTheme.of(
context)
.secondaryBackground,
.primaryBackground,
pickerForegroundColor:
FlutterFlowTheme.of(
context)
@ -1146,7 +1133,7 @@ Widget scheduleVisit(
);
},
);
TimeOfDay? datePicked2Time;
if (datePicked2Date != null) {
datePicked2Time =
@ -1192,7 +1179,7 @@ Widget scheduleVisit(
pickerBackgroundColor:
FlutterFlowTheme.of(
context)
.secondaryBackground,
.primaryBackground,
pickerForegroundColor:
FlutterFlowTheme.of(
context)
@ -1214,7 +1201,7 @@ Widget scheduleVisit(
},
);
}
if (datePicked2Date != null &&
datePicked2Time != null) {
safeSetState(() {
@ -1563,12 +1550,58 @@ Widget scheduleVisit(
onChanged: (newValue) async {
setState(() => _model.switchValue = newValue);
},
applyCupertinoTheme: false,
focusColor:
FlutterFlowTheme.of(context).primary,
trackColor: WidgetStateProperty.resolveWith(
(states) {
if (states.contains(WidgetState.disabled)) {
return FlutterFlowTheme.of(context)
.alternate;
}
return FlutterFlowTheme.of(context)
.alternate;
},
),
hoverColor: FlutterFlowTheme.of(context)
.primaryBackground,
// thumbColor: WidgetStateColor.resolveWith(
// (states) {
// if (states.contains(WidgetState.disabled)) {
// return FlutterFlowTheme.of(context)
// .alternate;
// }
// return FlutterFlowTheme.of(context)
// .alternate;
// },
// ),
overlayColor: WidgetStateProperty.resolveWith(
(states) {
if (states.contains(WidgetState.disabled)) {
return FlutterFlowTheme.of(context)
.accent4;
}
return FlutterFlowTheme.of(context)
.primaryBackground;
},
),
trackOutlineColor:
WidgetStateProperty.resolveWith(
(states) {
if (states.contains(WidgetState.disabled)) {
return FlutterFlowTheme.of(context)
.accent4;
}
return FlutterFlowTheme.of(context)
.primaryBackground;
},
),
activeColor:
FlutterFlowTheme.of(context).success,
activeTrackColor:
FlutterFlowTheme.of(context).customColor4,
inactiveTrackColor:
FlutterFlowTheme.of(context).customColor4,
activeTrackColor: FlutterFlowTheme.of(context)
.primaryBackground,
inactiveTrackColor: FlutterFlowTheme.of(context)
.primaryBackground,
inactiveThumbColor:
FlutterFlowTheme.of(context).error,
),
@ -1792,11 +1825,10 @@ Widget scheduleVisit(
alignment: const AlignmentDirectional(0.0, 1.0),
child: Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Icon(
Icons.save_alt,
color: FlutterFlowTheme.of(context).info,
size: 24.0,
),
child: Text(FFLocalizations.of(context).getVariableText(
enText: 'Schedule',
ptText: 'Agendar',
)),
),
),
),
@ -1937,10 +1969,10 @@ Widget visitHistory(
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(
"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',
).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(
@ -1972,8 +2004,8 @@ Widget visitHistory(
},
child: Card(
clipBehavior: Clip.antiAliasWithSaveLayer,
color: FlutterFlowTheme.of(context)
.secondaryBackground,
color:
FlutterFlowTheme.of(context).primaryBackground,
elevation: 5.0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.0),
@ -1983,7 +2015,7 @@ Widget visitHistory(
height: 115.0,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context)
.secondaryBackground,
.primaryBackground,
),
child: Row(
mainAxisSize: MainAxisSize.max,
@ -2193,8 +2225,8 @@ Widget visitHistory(
return FlutterFlowTheme
.of(context)
.success;
} else if (( jsonToStr(
getJsonField(
} else if ((jsonToStr(
getJsonField(
visitaWrapItem,
r'''$.VAW_STATUS''',
)) ==
@ -2220,9 +2252,8 @@ Widget visitHistory(
return FlutterFlowTheme
.of(context)
.error;
} else if (
jsonToStr(
getJsonField(
} else if (jsonToStr(
getJsonField(
visitaWrapItem,
r'''$.VAW_STATUS''',
)) ==
@ -2261,9 +2292,8 @@ Widget visitHistory(
ptText: 'Ativo',
enText: 'Active',
);
} else if ((
jsonToStr(
getJsonField(
} else if ((jsonToStr(
getJsonField(
visitaWrapItem,
r'''$.VAW_STATUS''',
)) ==
@ -2360,6 +2390,4 @@ Widget visitHistory(
),
),
);
}
}