misc
This commit is contained in:
parent
8eeda2d54b
commit
d95c82d355
|
@ -16,9 +16,6 @@ import 'package:hub/flutter_flow/random_data_util.dart';
|
|||
import 'package:hub/pages/home_page/home_page_model.dart';
|
||||
import 'package:qr_flutter/qr_flutter.dart';
|
||||
|
||||
|
||||
|
||||
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
Future<void> openTermsOfUse(BuildContext context) async {
|
||||
|
@ -165,6 +162,7 @@ Future singInLoginAction(
|
|||
return;
|
||||
} else {
|
||||
await showModalBottomSheet(
|
||||
useRootNavigator: true,
|
||||
isScrollControlled: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
useSafeArea: true,
|
||||
|
@ -333,7 +331,6 @@ Future toggleSignInPage(BuildContext context) async {
|
|||
}
|
||||
|
||||
Future toggleSignUpPage(BuildContext context) async {
|
||||
|
||||
context.pushNamed(
|
||||
'signUpPage',
|
||||
extra: <String, dynamic>{
|
||||
|
@ -468,12 +465,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,14 +520,10 @@ Future changeStatusAction(
|
|||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// QR Code
|
||||
|
||||
|
||||
Uint8List assembleQRPacket(int direction, String identifier, String password) {
|
||||
List<int> packet = [direction];
|
||||
|
||||
|
@ -569,13 +562,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 +581,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,75 +607,78 @@ 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.
|
||||
// // }
|
||||
|
||||
// // 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.
|
||||
// }
|
||||
|
||||
// // 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.
|
||||
// // }
|
||||
// // Remove espaços em branco do início e do fim do conteúdo.
|
||||
// String trim(String content) {
|
||||
// return content.trim();
|
||||
// }
|
||||
|
||||
// // 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.
|
||||
// }
|
||||
// // Escapa caracteres especiais para o formato MECARD.
|
||||
// String escapeMECARD(String content) {
|
||||
// // Implementação para escapar caracteres.
|
||||
// return content.replaceAll(':', '\\:'); // Exemplo simplificado.
|
||||
// }
|
||||
|
||||
// // Remove espaços em branco do início e do fim do conteúdo.
|
||||
// String trim(String content) {
|
||||
// return content.trim();
|
||||
// }
|
||||
/// menu
|
||||
|
||||
// // Escapa caracteres especiais para o formato MECARD.
|
||||
// String escapeMECARD(String content) {
|
||||
// // Implementação para escapar caracteres.
|
||||
// return content.replaceAll(':', '\\:'); // Exemplo simplificado.
|
||||
// }
|
||||
|
||||
/// menu
|
||||
|
||||
Future scheduleVisitOptAction(BuildContext context) async {
|
||||
Future scheduleVisitOptAction(BuildContext context) async {
|
||||
await showAdaptiveDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
|
@ -713,9 +713,9 @@ Widget buildQrCode(
|
|||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future registerVisitorOptAction(BuildContext context) async {
|
||||
Future registerVisitorOptAction(BuildContext context) async {
|
||||
context.pushNamed(
|
||||
'registerVisitorPage',
|
||||
extra: <String, dynamic>{
|
||||
|
@ -726,9 +726,9 @@ Widget buildQrCode(
|
|||
),
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future peopleOnThePropertyAction(BuildContext context) async {
|
||||
Future peopleOnThePropertyAction(BuildContext context) async {
|
||||
context.pushNamed(
|
||||
'peopleOnThePropertyPage',
|
||||
extra: <String, dynamic>{
|
||||
|
@ -738,9 +738,9 @@ Widget buildQrCode(
|
|||
),
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future preferencesSettings(BuildContext context) async {
|
||||
Future preferencesSettings(BuildContext context) async {
|
||||
context.pushNamed(
|
||||
'preferencesSettings',
|
||||
extra: <String, dynamic>{
|
||||
|
@ -751,9 +751,9 @@ Widget buildQrCode(
|
|||
),
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future liberationHistoryOptAction(BuildContext context) async {
|
||||
Future liberationHistoryOptAction(BuildContext context) async {
|
||||
await showAdaptiveDialog(
|
||||
// isScrollControlled: true,
|
||||
// backgroundColor: Colors.transparent,
|
||||
|
@ -797,9 +797,9 @@ Widget buildQrCode(
|
|||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future accessQRCodeOptAction(BuildContext context) async {
|
||||
Future accessQRCodeOptAction(BuildContext context) async {
|
||||
context.pushNamed(
|
||||
'qrCodePage',
|
||||
extra: <String, dynamic>{
|
||||
|
@ -810,4 +810,4 @@ Widget buildQrCode(
|
|||
),
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,8 +36,7 @@ class FFAppState extends ChangeNotifier {
|
|||
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);
|
||||
}
|
||||
|
||||
|
|
|
@ -134,7 +134,7 @@ class _ThrowExceptionWidgetState extends State<ThrowExceptionWidget>
|
|||
),
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 0.0),
|
||||
const EdgeInsetsDirectional.fromSTEB(30, 0, 30, 0),
|
||||
child: Text(
|
||||
valueOrDefault<String>(
|
||||
widget.msg,
|
||||
|
@ -150,6 +150,7 @@ class _ThrowExceptionWidgetState extends State<ThrowExceptionWidget>
|
|||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily),
|
||||
),
|
||||
textAlign: TextAlign.left,
|
||||
),
|
||||
),
|
||||
].addToStart(const SizedBox(height: 50.0)),
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -12,7 +12,6 @@ export 'forgot_password_template_component_model.dart';
|
|||
|
||||
//
|
||||
|
||||
|
||||
class ForgotPasswordTemplateComponentWidget extends StatefulWidget {
|
||||
const ForgotPasswordTemplateComponentWidget({super.key});
|
||||
|
||||
|
@ -49,7 +48,8 @@ class _ForgotPasswordTemplateComponentWidgetState
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Align(
|
||||
return GestureDetector(
|
||||
child: Align(
|
||||
alignment: const AlignmentDirectional(0.0, 1.0),
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
|
@ -78,7 +78,8 @@ class _ForgotPasswordTemplateComponentWidgetState
|
|||
tablet: false,
|
||||
))
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 16.0, 8.0),
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
16.0, 0.0, 16.0, 8.0),
|
||||
child: InkWell(
|
||||
splashColor: Colors.transparent,
|
||||
focusColor: Colors.transparent,
|
||||
|
@ -100,12 +101,13 @@ class _ForgotPasswordTemplateComponentWidgetState
|
|||
),
|
||||
),
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(12.0, 0.0, 0.0, 0.0),
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
12.0, 0.0, 0.0, 0.0),
|
||||
child: Text(
|
||||
'',
|
||||
style:
|
||||
FlutterFlowTheme.of(context).bodyMedium.override(
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
.override(
|
||||
fontFamily: 'Plus Jakarta Sans',
|
||||
color: const Color(0xFF15161E),
|
||||
fontSize: 14.0,
|
||||
|
@ -121,7 +123,8 @@ class _ForgotPasswordTemplateComponentWidgetState
|
|||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0),
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0),
|
||||
child: Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'xxm3ajsy' /* ESQUECEU SUA SENHA? */,
|
||||
|
@ -132,12 +135,14 @@ class _ForgotPasswordTemplateComponentWidgetState
|
|||
fontSize: 24.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.w500,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey('Outfit'),
|
||||
useGoogleFonts:
|
||||
GoogleFonts.asMap().containsKey('Outfit'),
|
||||
),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(16.0, 4.0, 16.0, 4.0),
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(16.0, 4.0, 16.0, 4.0),
|
||||
child: Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'wu2f7yzo' /* Não se preucupe nós vamos te a... */,
|
||||
|
@ -148,13 +153,14 @@ class _ForgotPasswordTemplateComponentWidgetState
|
|||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.w500,
|
||||
useGoogleFonts:
|
||||
GoogleFonts.asMap().containsKey('Plus Jakarta Sans'),
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey('Plus Jakarta Sans'),
|
||||
),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(16.0, 12.0, 16.0, 0.0),
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(16.0, 12.0, 16.0, 0.0),
|
||||
child: SizedBox(
|
||||
width: double.infinity,
|
||||
child: TextFormField(
|
||||
|
@ -220,8 +226,8 @@ class _ForgotPasswordTemplateComponentWidgetState
|
|||
),
|
||||
filled: true,
|
||||
fillColor: FlutterFlowTheme.of(context).primaryBackground,
|
||||
contentPadding:
|
||||
const EdgeInsetsDirectional.fromSTEB(24.0, 24.0, 20.0, 24.0),
|
||||
contentPadding: const EdgeInsetsDirectional.fromSTEB(
|
||||
24.0, 24.0, 20.0, 24.0),
|
||||
suffixIcon: Icon(
|
||||
Icons.email,
|
||||
color: FlutterFlowTheme.of(context).accent1,
|
||||
|
@ -248,7 +254,8 @@ class _ForgotPasswordTemplateComponentWidgetState
|
|||
Align(
|
||||
alignment: const AlignmentDirectional(0.0, 0.0),
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 24.0, 0.0, 0.0),
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(0.0, 24.0, 0.0, 0.0),
|
||||
child: FFButtonWidget(
|
||||
onPressed: () async {
|
||||
_model.req = await PhpGroup.forgotPasswordCall.call(
|
||||
|
@ -287,11 +294,13 @@ class _ForgotPasswordTemplateComponentWidgetState
|
|||
options: FFButtonOptions(
|
||||
width: 270.0,
|
||||
height: 50.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),
|
||||
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(0xFF1AAB5F),
|
||||
textStyle: FlutterFlowTheme.of(context).titleSmall.override(
|
||||
textStyle:
|
||||
FlutterFlowTheme.of(context).titleSmall.override(
|
||||
fontFamily: 'Plus Jakarta Sans',
|
||||
color: Colors.white,
|
||||
fontSize: 16.0,
|
||||
|
@ -313,6 +322,7 @@ class _ForgotPasswordTemplateComponentWidgetState
|
|||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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: 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,7 +185,8 @@ class _RegisiterVistorTemplateComponentWidgetState
|
|||
height: 80.0,
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
0.0, 0.0, 0.0, 0.0),
|
||||
iconPadding: const EdgeInsetsDirectional.fromSTEB(
|
||||
iconPadding:
|
||||
const EdgeInsetsDirectional.fromSTEB(
|
||||
14.0, 0.0, 0.0, 20.0),
|
||||
color: FlutterFlowTheme.of(context)
|
||||
.primaryBackground,
|
||||
|
@ -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),
|
||||
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,15 +727,13 @@ 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(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(0.0, 50.0, 0.0, 0.0),
|
||||
const EdgeInsetsDirectional.fromSTEB(0.0, 65.0, 0.0, 0.0),
|
||||
child: FFButtonWidget(
|
||||
onPressed: () async {
|
||||
if (((_model.uploadedLocalFile.bytes?.isNotEmpty ??
|
||||
|
@ -713,68 +743,133 @@ class _RegisiterVistorTemplateComponentWidgetState
|
|||
_model.dropDownValue != '') &&
|
||||
(_model.textController2.text != '')) {
|
||||
_model.imgBase64 =
|
||||
await convertImageFileToBase64(
|
||||
await actions.convertImageFileToBase64(
|
||||
_model.uploadedLocalFile,
|
||||
);
|
||||
_model.registerVisitor =
|
||||
await PhpGroup.postScheduleVisitorCall.call(
|
||||
_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 == 'Visitante') ||
|
||||
(_model.dropDownValue == 'Visitor')
|
||||
tipo: _model.dropDownValue ==
|
||||
FFLocalizations.of(context).getText(
|
||||
'n8vddmcq' /* Visitante */,
|
||||
)
|
||||
? 'V'
|
||||
: 'P',
|
||||
foto: 'base64;jpeg,klajsalkjslkajslkajl',
|
||||
foto: 'base64;jpeg,${_model.imgBase64}',
|
||||
)
|
||||
.onError((e, s) async {
|
||||
return await showAdaptiveDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return GestureDetector(
|
||||
onTap: () => Navigator.pop(context),
|
||||
child: Padding(
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child: Dialog(
|
||||
backgroundColor: Colors.transparent,
|
||||
child: ThrowExceptionWidget(
|
||||
msg: FFLocalizations.of(context)
|
||||
.getVariableText(
|
||||
ptText:
|
||||
'Você esqueceu de adicionar algum dado obrigatório. Verifique se a imagem, nome, tipo e documento foram preenchidos corretamente.',
|
||||
enText:
|
||||
'You forgot to add some required data. Check if the image, name, type and document were filled in correctly.',
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
if (PhpGroup.postScheduleVisitorCall.error(
|
||||
(_model.registerVisitor?.jsonBody ?? ''),
|
||||
(_model.scheduleVisitor?.jsonBody ?? ''),
|
||||
) ==
|
||||
false) {
|
||||
setState(() {
|
||||
_model.textController1?.clear();
|
||||
_model.textController2?.clear();
|
||||
_model.textController3?.clear();
|
||||
_model.textController4?.clear();
|
||||
});
|
||||
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 showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
enableDrag: false,
|
||||
await showAdaptiveDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
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:
|
||||
'\\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 ?? ''),
|
||||
)}',
|
||||
msg: PhpGroup.postScheduleVisitorCall
|
||||
.errorMsg(_model
|
||||
.scheduleVisitor?.jsonBody)
|
||||
.toString()),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
).then((value) => safeSetState(() {}));
|
||||
}
|
||||
} else {
|
||||
await showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
enableDrag: false,
|
||||
await showAdaptiveDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
Form.of(context)?.validate();
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: Padding(
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child: Dialog(
|
||||
backgroundColor: Colors.transparent,
|
||||
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}',
|
||||
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.',
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
|
@ -784,15 +879,15 @@ class _RegisiterVistorTemplateComponentWidgetState
|
|||
setState(() {});
|
||||
},
|
||||
text: FFLocalizations.of(context).getText(
|
||||
'65puvap9' /* Cadastrar */,
|
||||
'okbw0aiu' /* Cadastrar */,
|
||||
),
|
||||
options: FFButtonOptions(
|
||||
width: double.infinity,
|
||||
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),
|
||||
iconPadding: const EdgeInsetsDirectional.fromSTEB(
|
||||
0.0, 0.0, 0.0, 0.0),
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
textStyle: FlutterFlowTheme.of(context)
|
||||
.titleSmall
|
||||
|
@ -802,24 +897,25 @@ class _RegisiterVistorTemplateComponentWidgetState
|
|||
color: FlutterFlowTheme.of(context).info,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context)
|
||||
.titleSmallFamily),
|
||||
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),
|
||||
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)),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import 'dart:developer';
|
||||
|
||||
import '/components/templates_components/forgot_password_template_component/forgot_password_template_component_widget.dart';
|
||||
import '/flutter_flow/flutter_flow_animations.dart';
|
||||
import '/flutter_flow/flutter_flow_theme.dart';
|
||||
|
@ -113,8 +115,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,
|
||||
|
@ -130,7 +132,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(
|
||||
|
@ -210,7 +213,8 @@ class _SignInTemplateComponentWidgetState
|
|||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
0.0, 0.0, 0.0, 16.0),
|
||||
child: SizedBox(
|
||||
|
@ -223,7 +227,8 @@ class _SignInTemplateComponentWidgetState
|
|||
onChanged: (_) =>
|
||||
EasyDebounce.debounce(
|
||||
'_model.emailAddressTextController',
|
||||
const Duration(milliseconds: 500),
|
||||
const Duration(
|
||||
milliseconds: 500),
|
||||
() => setState(() {}),
|
||||
),
|
||||
autofocus: true,
|
||||
|
@ -351,7 +356,8 @@ class _SignInTemplateComponentWidgetState
|
|||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
0.0, 0.0, 0.0, 16.0),
|
||||
child: SizedBox(
|
||||
|
@ -364,7 +370,8 @@ class _SignInTemplateComponentWidgetState
|
|||
onChanged: (_) =>
|
||||
EasyDebounce.debounce(
|
||||
'_model.passwordTextController',
|
||||
const Duration(milliseconds: 500),
|
||||
const Duration(
|
||||
milliseconds: 500),
|
||||
() => setState(() {}),
|
||||
),
|
||||
autofocus: true,
|
||||
|
@ -417,7 +424,8 @@ class _SignInTemplateComponentWidgetState
|
|||
),
|
||||
focusedBorder:
|
||||
OutlineInputBorder(
|
||||
borderSide: const BorderSide(
|
||||
borderSide:
|
||||
const BorderSide(
|
||||
color:
|
||||
Color(0xFF1AAB5F),
|
||||
width: 0.25,
|
||||
|
@ -428,7 +436,8 @@ class _SignInTemplateComponentWidgetState
|
|||
),
|
||||
errorBorder:
|
||||
OutlineInputBorder(
|
||||
borderSide: const BorderSide(
|
||||
borderSide:
|
||||
const BorderSide(
|
||||
color:
|
||||
Color(0xFFFF5963),
|
||||
width: 0.25,
|
||||
|
@ -439,7 +448,8 @@ class _SignInTemplateComponentWidgetState
|
|||
),
|
||||
focusedErrorBorder:
|
||||
OutlineInputBorder(
|
||||
borderSide: const BorderSide(
|
||||
borderSide:
|
||||
const BorderSide(
|
||||
color:
|
||||
Color(0xFFFF5963),
|
||||
width: 0.25,
|
||||
|
@ -514,11 +524,13 @@ class _SignInTemplateComponentWidgetState
|
|||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
0.0, 0.0, 0.0, 16.0),
|
||||
child: FFButtonWidget(
|
||||
onPressed: ((_model.emailAddressTextController
|
||||
onPressed: ((_model
|
||||
.emailAddressTextController
|
||||
.text ==
|
||||
'') &&
|
||||
(_model.passwordTextController
|
||||
|
@ -548,18 +560,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)
|
||||
|
@ -586,7 +592,8 @@ class _SignInTemplateComponentWidgetState
|
|||
'Plus Jakarta Sans'),
|
||||
),
|
||||
elevation: 3.0,
|
||||
borderSide: const BorderSide(
|
||||
borderSide:
|
||||
const BorderSide(
|
||||
color:
|
||||
Colors.transparent,
|
||||
width: 1.0,
|
||||
|
@ -605,7 +612,8 @@ class _SignInTemplateComponentWidgetState
|
|||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
0.0, 0.0, 0.0, 16.0),
|
||||
child: FFButtonWidget(
|
||||
|
@ -624,18 +632,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)
|
||||
|
@ -662,7 +664,8 @@ class _SignInTemplateComponentWidgetState
|
|||
'Plus Jakarta Sans'),
|
||||
),
|
||||
elevation: 3.0,
|
||||
borderSide: const BorderSide(
|
||||
borderSide:
|
||||
const BorderSide(
|
||||
color:
|
||||
Colors.transparent,
|
||||
width: 1.0,
|
||||
|
@ -699,7 +702,8 @@ class _SignInTemplateComponentWidgetState
|
|||
((_model.emailAddressTextController
|
||||
.text ==
|
||||
'') ||
|
||||
((_model.passwordTextController.text ==
|
||||
((_model.passwordTextController
|
||||
.text ==
|
||||
'') ||
|
||||
((_model.passwordFocusNode?.hasFocus ??
|
||||
false) !=
|
||||
|
@ -728,18 +732,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)
|
||||
|
@ -767,7 +765,8 @@ class _SignInTemplateComponentWidgetState
|
|||
'Plus Jakarta Sans'),
|
||||
),
|
||||
elevation: 3.0,
|
||||
borderSide: const BorderSide(
|
||||
borderSide:
|
||||
const BorderSide(
|
||||
color: Colors
|
||||
.transparent,
|
||||
width: 1.0,
|
||||
|
@ -776,7 +775,8 @@ class _SignInTemplateComponentWidgetState
|
|||
BorderRadius
|
||||
.circular(12.0),
|
||||
disabledColor:
|
||||
const Color(0xE81AAB5F),
|
||||
const Color(
|
||||
0xE81AAB5F),
|
||||
),
|
||||
showLoadingIndicator:
|
||||
false,
|
||||
|
@ -805,18 +805,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)
|
||||
|
@ -844,7 +838,8 @@ class _SignInTemplateComponentWidgetState
|
|||
'Plus Jakarta Sans'),
|
||||
),
|
||||
elevation: 3.0,
|
||||
borderSide: const BorderSide(
|
||||
borderSide:
|
||||
const BorderSide(
|
||||
color: Colors
|
||||
.transparent,
|
||||
width: 1.0,
|
||||
|
@ -858,7 +853,8 @@ class _SignInTemplateComponentWidgetState
|
|||
),
|
||||
),
|
||||
),
|
||||
].divide(const SizedBox(width: 7.0)),
|
||||
].divide(
|
||||
const SizedBox(width: 7.0)),
|
||||
);
|
||||
}
|
||||
},
|
||||
|
@ -866,8 +862,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,
|
||||
|
@ -879,14 +875,35 @@ class _SignInTemplateComponentWidgetState
|
|||
backgroundColor:
|
||||
Colors.transparent,
|
||||
enableDrag: false,
|
||||
useSafeArea: true,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding:
|
||||
MediaQuery.viewInsetsOf(
|
||||
return GestureDetector(
|
||||
onTap: () => _model
|
||||
.unfocusNode
|
||||
.canRequestFocus
|
||||
? FocusScope.of(context)
|
||||
.requestFocus(_model
|
||||
.unfocusNode)
|
||||
: FocusScope.of(context)
|
||||
.unfocus(),
|
||||
child: SizedBox(
|
||||
height:
|
||||
MediaQuery.of(context)
|
||||
.size
|
||||
.height,
|
||||
width:
|
||||
MediaQuery.of(context)
|
||||
.size
|
||||
.width,
|
||||
child: Padding(
|
||||
padding: MediaQuery
|
||||
.viewInsetsOf(
|
||||
context),
|
||||
child:
|
||||
const ForgotPasswordTemplateComponentWidget(),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
).then(
|
||||
|
|
|
@ -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,12 +66,10 @@ 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),
|
||||
return Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 50.0, 0.0, 0.0),
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
width: MediaQuery.of(context).size.width,
|
||||
decoration: BoxDecoration(
|
||||
color: FlutterFlowTheme.of(context).primaryBackground,
|
||||
borderRadius: const BorderRadius.only(
|
||||
|
@ -89,7 +84,8 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(16.0, 10.0, 16.0, 0.0),
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(16.0, 10.0, 16.0, 0.0),
|
||||
child: TextFormField(
|
||||
controller: _model.textController,
|
||||
focusNode: _model.textFieldFocusNode,
|
||||
|
@ -99,8 +95,7 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
_model.textController.text,
|
||||
'69696777',
|
||||
);
|
||||
_model.textController?.selection =
|
||||
TextSelection.collapsed(
|
||||
_model.textController?.selection = TextSelection.collapsed(
|
||||
offset: _model.textController!.text.length);
|
||||
});
|
||||
_model.getVisitorByDoc =
|
||||
|
@ -116,8 +111,7 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
(_model.getVisitorByDoc?.jsonBody ?? ''),
|
||||
) !=
|
||||
'0') {
|
||||
_model
|
||||
.addToVisitors(PhpGroup.getVisitorByDocCall.visitante(
|
||||
_model.addToVisitors(PhpGroup.getVisitorByDocCall.visitante(
|
||||
(_model.getVisitorByDoc?.jsonBody ?? ''),
|
||||
));
|
||||
setState(() {});
|
||||
|
@ -126,6 +120,8 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
} else {
|
||||
await showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
enableDrag: true,
|
||||
isDismissible: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
|
@ -147,9 +143,7 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
labelText: FFLocalizations.of(context).getText(
|
||||
'cjlpru1m' /* Procure pelo documento do visi... */,
|
||||
),
|
||||
labelStyle: FlutterFlowTheme.of(context)
|
||||
.labelMedium
|
||||
.override(
|
||||
labelStyle: FlutterFlowTheme.of(context).labelMedium.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context).labelMediumFamily,
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
|
@ -216,24 +210,23 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
),
|
||||
),
|
||||
style: FlutterFlowTheme.of(context).bodyMedium.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context).bodyMediumFamily,
|
||||
fontFamily: FlutterFlowTheme.of(context).bodyMediumFamily,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context).bodyMediumFamily),
|
||||
),
|
||||
keyboardType: TextInputType.number,
|
||||
validator:
|
||||
_model.textControllerValidator.asValidator(context),
|
||||
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,
|
||||
|
@ -271,8 +262,8 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
builder: (context) {
|
||||
if (_model.visitors.isNotEmpty) {
|
||||
return Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(8.0, 8.0, 8.0, 0.0),
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
8.0, 8.0, 8.0, 0.0),
|
||||
child: Builder(
|
||||
builder: (context) {
|
||||
final visitor =
|
||||
|
@ -299,8 +290,8 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding: MediaQuery.viewInsetsOf(
|
||||
context),
|
||||
padding:
|
||||
MediaQuery.viewInsetsOf(context),
|
||||
child: const SizedBox(
|
||||
height: 610.0,
|
||||
child:
|
||||
|
@ -338,16 +329,15 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
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(
|
||||
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',
|
||||
).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,
|
||||
|
@ -364,8 +354,8 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(12.0, 0.0,
|
||||
0.0, 0.0),
|
||||
.fromSTEB(
|
||||
12.0, 0.0, 0.0, 0.0),
|
||||
child: Text(
|
||||
valueOrDefault<String>(
|
||||
getJsonField(
|
||||
|
@ -374,20 +364,20 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
)?.toString(),
|
||||
'NOT FOUND',
|
||||
),
|
||||
style:
|
||||
FlutterFlowTheme.of(
|
||||
style: FlutterFlowTheme.of(
|
||||
context)
|
||||
.bodyLarge
|
||||
.override(
|
||||
fontFamily: FlutterFlowTheme.of(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
.bodyLargeFamily,
|
||||
letterSpacing:
|
||||
0.0,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts
|
||||
.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(context)
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
.bodyLargeFamily),
|
||||
),
|
||||
),
|
||||
|
@ -395,14 +385,13 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(4.0, 4.0,
|
||||
0.0, 0.0),
|
||||
.fromSTEB(
|
||||
4.0, 4.0, 0.0, 0.0),
|
||||
child: Row(
|
||||
mainAxisSize:
|
||||
MainAxisSize.max,
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment
|
||||
.start,
|
||||
MainAxisAlignment.start,
|
||||
children: [
|
||||
Align(
|
||||
alignment:
|
||||
|
@ -425,8 +414,8 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
.of(context)
|
||||
.bodyMedium
|
||||
.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context)
|
||||
fontFamily: FlutterFlowTheme.of(
|
||||
context)
|
||||
.bodyMediumFamily,
|
||||
color: FlutterFlowTheme.of(
|
||||
context)
|
||||
|
@ -436,7 +425,8 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
useGoogleFonts: GoogleFonts
|
||||
.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(context).bodyMediumFamily),
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
@ -480,8 +470,7 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
width: 100.0,
|
||||
height: 100.0,
|
||||
decoration: BoxDecoration(
|
||||
color:
|
||||
FlutterFlowTheme.of(context).secondaryBackground,
|
||||
color: FlutterFlowTheme.of(context).secondaryBackground,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
@ -504,13 +493,13 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
options: FFButtonOptions(
|
||||
width: double.infinity,
|
||||
height: 30.0,
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(24.0, 0.0, 24.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:
|
||||
FlutterFlowTheme.of(context).titleSmallFamily,
|
||||
fontFamily: FlutterFlowTheme.of(context).titleSmallFamily,
|
||||
color: Colors.white,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
|
@ -532,7 +521,6 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
@ -58,9 +51,6 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
SchedulerBinding.instance.addPostFrameCallback((_) async {
|
||||
await PushNotificationService().initialize(context);
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
@ -105,7 +95,6 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
context.watch<FFAppState>();
|
||||
return GestureDetector(
|
||||
onTap: () => _model.unfocusNode.canRequestFocus
|
||||
|
@ -217,57 +206,43 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Align(
|
||||
alignment:
|
||||
const AlignmentDirectional(0.0, 1.0),
|
||||
alignment: const AlignmentDirectional(0.0, 1.0),
|
||||
child: Container(
|
||||
height: 50.0,
|
||||
decoration: const BoxDecoration(),
|
||||
child: Align(
|
||||
alignment:
|
||||
const AlignmentDirectional(0.0, 0.0),
|
||||
alignment: const AlignmentDirectional(0.0, 0.0),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Align(
|
||||
alignment:
|
||||
const AlignmentDirectional(
|
||||
-1.0, 0.0),
|
||||
alignment: const AlignmentDirectional(-1.0, 0.0),
|
||||
child: Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
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,
|
||||
fillColor: FlutterFlowTheme.of(context).primary,
|
||||
icon: const Icon(
|
||||
Icons.menu_rounded,
|
||||
color: Colors.white,
|
||||
size: 28.0,
|
||||
),
|
||||
onPressed: () async {
|
||||
scaffoldKey.currentState!
|
||||
.openDrawer();
|
||||
scaffoldKey.currentState!.openDrawer();
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment:
|
||||
const AlignmentDirectional(
|
||||
-1.0, 0.0),
|
||||
alignment: const AlignmentDirectional(-1.0, 0.0),
|
||||
child: Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
60.0, 15.0, 0.0, 0.0),
|
||||
child: ClipRRect(
|
||||
borderRadius:
|
||||
BorderRadius.circular(8.0),
|
||||
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,
|
||||
|
@ -278,36 +253,24 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
),
|
||||
),
|
||||
Align(
|
||||
alignment:
|
||||
const AlignmentDirectional(
|
||||
0.0, 0.0),
|
||||
alignment: const AlignmentDirectional(0.0, 0.0),
|
||||
child: Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
0.0, 15.0, 0.0, 0.0),
|
||||
child: Text(
|
||||
FFLocalizations.of(context)
|
||||
.getText(
|
||||
FFLocalizations.of(context).getText(
|
||||
'rg9pzkpz' /* FRE ACCESS */,
|
||||
),
|
||||
style:
|
||||
FlutterFlowTheme.of(context)
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
fontFamily: FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily,
|
||||
color: FlutterFlowTheme
|
||||
.of(context)
|
||||
.info,
|
||||
color: FlutterFlowTheme.of(context).info,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts
|
||||
.asMap()
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily),
|
||||
),
|
||||
),
|
||||
|
@ -319,23 +282,20 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
),
|
||||
),
|
||||
Align(
|
||||
alignment:
|
||||
const AlignmentDirectional(0.0, 1.0),
|
||||
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),
|
||||
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,
|
||||
color: FlutterFlowTheme.of(context).info,
|
||||
size: 24.0,
|
||||
),
|
||||
onPressed: () {
|
||||
|
@ -415,24 +375,20 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
width: 150.0,
|
||||
child: Text(
|
||||
valueOrDefault<String>(
|
||||
convertToUppercase(
|
||||
FFAppState().local),
|
||||
convertToUppercase(FFAppState().local),
|
||||
'NOME DO LOCAL',
|
||||
),
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyLarge
|
||||
.override(
|
||||
fontFamily: 'Nunito Sans',
|
||||
color:
|
||||
FlutterFlowTheme.of(context)
|
||||
color: FlutterFlowTheme.of(context)
|
||||
.primaryText,
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.normal,
|
||||
useGoogleFonts:
|
||||
GoogleFonts.asMap()
|
||||
.containsKey(
|
||||
'Nunito Sans'),
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey('Nunito Sans'),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
@ -461,8 +417,8 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
size: 20.0,
|
||||
),
|
||||
onPressed: () async {
|
||||
if (scaffoldKey.currentState!
|
||||
.isDrawerOpen ||
|
||||
if (scaffoldKey
|
||||
.currentState!.isDrawerOpen ||
|
||||
scaffoldKey.currentState!
|
||||
.isEndDrawerOpen) {
|
||||
Navigator.pop(context);
|
||||
|
@ -505,12 +461,11 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
.override(
|
||||
fontFamily: FlutterFlowTheme.of(context)
|
||||
.labelMediumFamily,
|
||||
color: FlutterFlowTheme.of(context)
|
||||
.primaryText,
|
||||
color:
|
||||
FlutterFlowTheme.of(context).primaryText,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(context)
|
||||
.containsKey(FlutterFlowTheme.of(context)
|
||||
.labelMediumFamily),
|
||||
),
|
||||
alignLabelWithHint: false,
|
||||
|
@ -521,14 +476,13 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
.labelMediumFamily,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(context)
|
||||
.containsKey(FlutterFlowTheme.of(context)
|
||||
.labelMediumFamily),
|
||||
),
|
||||
enabledBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context)
|
||||
.customColor1,
|
||||
color:
|
||||
FlutterFlowTheme.of(context).customColor1,
|
||||
width: 0.5,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(2.0),
|
||||
|
@ -564,8 +518,7 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
fontFamily: FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey(
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily),
|
||||
),
|
||||
|
@ -616,8 +569,7 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
iconPadding:
|
||||
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
|
||||
color: const Color(0x00D70000),
|
||||
textStyle:
|
||||
FlutterFlowTheme.of(context).labelMedium.override(
|
||||
textStyle: FlutterFlowTheme.of(context).labelMedium.override(
|
||||
fontFamily: 'Plus Jakarta Sans',
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
fontSize: 14.0,
|
||||
|
@ -633,7 +585,6 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
borderRadius: BorderRadius.circular(50.0),
|
||||
),
|
||||
),
|
||||
|
||||
].addToEnd(const SizedBox(height: 64.0)),
|
||||
),
|
||||
),
|
||||
|
@ -836,6 +787,5 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
// ),
|
||||
// ),
|
||||
// );
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,23 +1,20 @@
|
|||
|
||||
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) {
|
||||
|
@ -26,7 +23,7 @@ class PreferencesPageModel with ChangeNotifier {
|
|||
// })
|
||||
// .whenComplete(() => notifyListeners()));
|
||||
|
||||
if(FFAppState().fingerprint) {
|
||||
if (FFAppState().fingerprint) {
|
||||
FFAppState().fingerprint = false;
|
||||
FFAppState().deleteFingerprintPass();
|
||||
notifyListeners();
|
||||
|
@ -38,10 +35,8 @@ class PreferencesPageModel with ChangeNotifier {
|
|||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding:
|
||||
MediaQuery.viewInsetsOf(context),
|
||||
child:
|
||||
PassKeyTemplateWidget(
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child: PassKeyTemplateWidget(
|
||||
toggleActionStatus: (key) async {
|
||||
log(key);
|
||||
FFAppState().fingerprintPass = key;
|
||||
|
@ -52,15 +47,38 @@ class PreferencesPageModel with ChangeNotifier {
|
|||
},
|
||||
).whenComplete(() => notifyListeners());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void enablePerson(BuildContext context) {
|
||||
|
||||
notifyListeners();
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(FFAppState().userDevUUID, style: TextStyle(color: FlutterFlowTheme.of(context).info) ),
|
||||
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,
|
||||
|
@ -71,24 +89,71 @@ class PreferencesPageModel with ChangeNotifier {
|
|||
);
|
||||
}
|
||||
|
||||
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,10 +173,9 @@ class PreferencesPageModel with ChangeNotifier {
|
|||
);
|
||||
}
|
||||
|
||||
|
||||
Future<void> togglePass(BuildContext context) async {
|
||||
debugPrint('pass: ${FFAppState().pass}');
|
||||
if(FFAppState().pass) {
|
||||
if (FFAppState().pass) {
|
||||
FFAppState().pass = false;
|
||||
FFAppState().deleteAccessPass();
|
||||
notifyListeners();
|
||||
|
@ -123,15 +187,14 @@ class PreferencesPageModel with ChangeNotifier {
|
|||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding:
|
||||
MediaQuery.viewInsetsOf(context),
|
||||
child:
|
||||
PassKeyTemplateWidget(
|
||||
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,
|
||||
|
@ -142,18 +205,62 @@ class PreferencesPageModel with ChangeNotifier {
|
|||
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) {
|
||||
}).onError((error, StackTrace) {
|
||||
FFAppState().pass = false;
|
||||
log(error.toString());
|
||||
log(StackTrace.toString());
|
||||
})
|
||||
.whenComplete(() => notifyListeners());
|
||||
}).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());
|
||||
},
|
||||
),
|
||||
);
|
||||
|
|
|
@ -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});
|
||||
|
||||
|
@ -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,19 +89,22 @@ 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.',
|
||||
ptText:
|
||||
'Ative a autenticação por impressão digital para login seguro.',
|
||||
enText: 'Enable fingerprint authentication for secure login.',
|
||||
);
|
||||
break;
|
||||
|
@ -117,7 +119,7 @@ class PreferencesPageWidget extends StatelessWidget {
|
|||
break;
|
||||
case 2:
|
||||
icon = Icons.notifications;
|
||||
onPressed = model.toggleNotify;
|
||||
onPressed = () => model.toggleNotify(context);
|
||||
isEnabled = FFAppState().notify;
|
||||
content = FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Ative para receber sua notificação de acesso',
|
||||
|
@ -125,7 +127,7 @@ class PreferencesPageWidget extends StatelessWidget {
|
|||
);
|
||||
break;
|
||||
case 3:
|
||||
icon = Icons.lock_clock_sharp;
|
||||
icon = Icons.lock;
|
||||
// onLongPress = model.togglePass(context, model);
|
||||
isEnabled = FFAppState().pass;
|
||||
content = FFLocalizations.of(context).getVariableText(
|
||||
|
@ -134,20 +136,30 @@ class PreferencesPageWidget extends StatelessWidget {
|
|||
);
|
||||
break;
|
||||
case 4:
|
||||
icon = Icons.landscape;
|
||||
onPressed = model.localLogout;
|
||||
isEnabled = false;
|
||||
icon = Icons.lock_clock_sharp;
|
||||
// onLongPress = model.togglePass(context, model);
|
||||
isEnabled = FFAppState().panic;
|
||||
content = FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Ative para se desvincular do local selecionado',
|
||||
enText: 'Enable to unlink from the selected location',
|
||||
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;
|
||||
isEnabled = true;
|
||||
content = FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Delete sua conta e todos os dados associados permanentemente.',
|
||||
ptText:
|
||||
'Delete sua conta e todos os dados associados permanentemente.',
|
||||
enText: 'Delete your account and all associated data permanently.',
|
||||
);
|
||||
break;
|
||||
|
@ -155,17 +167,32 @@ class PreferencesPageWidget extends StatelessWidget {
|
|||
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,
|
||||
|
|
|
@ -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() {}
|
||||
}
|
|
@ -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,14 +38,7 @@ 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,
|
||||
backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
|
||||
automaticallyImplyLeading: false,
|
||||
|
@ -99,836 +73,11 @@ class _RegisterVisitorPageWidgetState extends State<RegisterVisitorPageWidget> {
|
|||
centerTitle: true,
|
||||
elevation: 0.0,
|
||||
),
|
||||
body: SafeArea(
|
||||
body: const 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),
|
||||
child: RegisiterVistorTemplateComponentWidget(
|
||||
source: 'RegisterVisitorPage',
|
||||
)),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
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)),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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,18 +392,12 @@ Widget scheduleVisit(
|
|||
fit: BoxFit.cover,
|
||||
),
|
||||
),
|
||||
Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
getJsonField(
|
||||
visitorListViewItem,
|
||||
r'''$.VTE_NOME''',
|
||||
).toString(),
|
||||
style:
|
||||
FlutterFlowTheme.of(context)
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
.override(
|
||||
fontFamily:
|
||||
|
@ -420,30 +413,14 @@ Widget scheduleVisit(
|
|||
.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),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
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,6 +458,14 @@ Widget scheduleVisit(
|
|||
_model.unfocusNode)
|
||||
: FocusScope.of(context)
|
||||
.unfocus(),
|
||||
child: SizedBox(
|
||||
height: MediaQuery.of(context)
|
||||
.size
|
||||
.height *
|
||||
0.9,
|
||||
width: MediaQuery.of(context)
|
||||
.size
|
||||
.width,
|
||||
child: Padding(
|
||||
padding: MediaQuery.viewInsetsOf(
|
||||
context),
|
||||
|
@ -501,6 +487,7 @@ Widget scheduleVisit(
|
|||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
).then((value) => safeSetState(() {}));
|
||||
|
@ -801,7 +788,7 @@ Widget scheduleVisit(
|
|||
pickerBackgroundColor:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
.secondaryBackground,
|
||||
.primaryBackground,
|
||||
pickerForegroundColor:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
|
@ -868,7 +855,7 @@ Widget scheduleVisit(
|
|||
pickerBackgroundColor:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
.secondaryBackground,
|
||||
.primaryBackground,
|
||||
pickerForegroundColor:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
|
@ -1125,7 +1112,7 @@ Widget scheduleVisit(
|
|||
pickerBackgroundColor:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
.secondaryBackground,
|
||||
.primaryBackground,
|
||||
pickerForegroundColor:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
|
@ -1192,7 +1179,7 @@ Widget scheduleVisit(
|
|||
pickerBackgroundColor:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
.secondaryBackground,
|
||||
.primaryBackground,
|
||||
pickerForegroundColor:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
|
@ -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,7 +2225,7 @@ Widget visitHistory(
|
|||
return FlutterFlowTheme
|
||||
.of(context)
|
||||
.success;
|
||||
} else if (( jsonToStr(
|
||||
} else if ((jsonToStr(
|
||||
getJsonField(
|
||||
visitaWrapItem,
|
||||
r'''$.VAW_STATUS''',
|
||||
|
@ -2220,8 +2252,7 @@ Widget visitHistory(
|
|||
return FlutterFlowTheme
|
||||
.of(context)
|
||||
.error;
|
||||
} else if (
|
||||
jsonToStr(
|
||||
} else if (jsonToStr(
|
||||
getJsonField(
|
||||
visitaWrapItem,
|
||||
r'''$.VAW_STATUS''',
|
||||
|
@ -2261,8 +2292,7 @@ Widget visitHistory(
|
|||
ptText: 'Ativo',
|
||||
enText: 'Active',
|
||||
);
|
||||
} else if ((
|
||||
jsonToStr(
|
||||
} else if ((jsonToStr(
|
||||
getJsonField(
|
||||
visitaWrapItem,
|
||||
r'''$.VAW_STATUS''',
|
||||
|
@ -2360,6 +2390,4 @@ Widget visitHistory(
|
|||
),
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue