Merge branch 'main' into bugfix/fd-597
This commit is contained in:
commit
0ec7f051ad
|
@ -42,6 +42,9 @@ PODS:
|
|||
- FirebaseAnalytics (~> 10.27.0)
|
||||
- Firebase/CoreOnly (10.27.0):
|
||||
- FirebaseCore (= 10.27.0)
|
||||
- Firebase/Crashlytics (10.27.0):
|
||||
- Firebase/CoreOnly
|
||||
- FirebaseCrashlytics (~> 10.27.0)
|
||||
- Firebase/Messaging (10.27.0):
|
||||
- Firebase/CoreOnly
|
||||
- FirebaseMessaging (~> 10.27.0)
|
||||
|
@ -52,6 +55,10 @@ PODS:
|
|||
- firebase_core (3.1.0):
|
||||
- Firebase/CoreOnly (= 10.27.0)
|
||||
- Flutter
|
||||
- firebase_crashlytics (4.0.1):
|
||||
- Firebase/Crashlytics (= 10.27.0)
|
||||
- firebase_core
|
||||
- Flutter
|
||||
- firebase_messaging (15.0.1):
|
||||
- Firebase/Messaging (= 10.27.0)
|
||||
- firebase_core
|
||||
|
@ -78,8 +85,19 @@ PODS:
|
|||
- FirebaseCoreInternal (~> 10.0)
|
||||
- GoogleUtilities/Environment (~> 7.12)
|
||||
- GoogleUtilities/Logger (~> 7.12)
|
||||
- FirebaseCoreExtension (10.29.0):
|
||||
- FirebaseCore (~> 10.0)
|
||||
- FirebaseCoreInternal (10.28.0):
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.8)"
|
||||
- FirebaseCrashlytics (10.27.0):
|
||||
- FirebaseCore (~> 10.5)
|
||||
- FirebaseInstallations (~> 10.0)
|
||||
- FirebaseRemoteConfigInterop (~> 10.23)
|
||||
- FirebaseSessions (~> 10.5)
|
||||
- GoogleDataTransport (~> 9.2)
|
||||
- GoogleUtilities/Environment (~> 7.8)
|
||||
- nanopb (< 2.30911.0, >= 2.30908.0)
|
||||
- PromisesObjC (~> 2.1)
|
||||
- FirebaseInstallations (10.28.0):
|
||||
- FirebaseCore (~> 10.0)
|
||||
- GoogleUtilities/Environment (~> 7.8)
|
||||
|
@ -94,6 +112,16 @@ PODS:
|
|||
- GoogleUtilities/Reachability (~> 7.8)
|
||||
- GoogleUtilities/UserDefaults (~> 7.8)
|
||||
- nanopb (< 2.30911.0, >= 2.30908.0)
|
||||
- FirebaseRemoteConfigInterop (10.29.0)
|
||||
- FirebaseSessions (10.29.0):
|
||||
- FirebaseCore (~> 10.5)
|
||||
- FirebaseCoreExtension (~> 10.0)
|
||||
- FirebaseInstallations (~> 10.0)
|
||||
- GoogleDataTransport (~> 9.2)
|
||||
- GoogleUtilities/Environment (~> 7.13)
|
||||
- GoogleUtilities/UserDefaults (~> 7.13)
|
||||
- nanopb (< 2.30911.0, >= 2.30908.0)
|
||||
- PromisesSwift (~> 2.1)
|
||||
- Flutter (1.0.0)
|
||||
- flutter_inappwebview_ios (0.0.1):
|
||||
- Flutter
|
||||
|
@ -174,6 +202,8 @@ PODS:
|
|||
- permission_handler_apple (9.3.0):
|
||||
- Flutter
|
||||
- PromisesObjC (2.4.0)
|
||||
- PromisesSwift (2.4.0):
|
||||
- PromisesObjC (= 2.4.0)
|
||||
- SDWebImage (5.19.2):
|
||||
- SDWebImage/Core (= 5.19.2)
|
||||
- SDWebImage/Core (5.19.2)
|
||||
|
@ -199,6 +229,7 @@ DEPENDENCIES:
|
|||
- file_picker (from `.symlinks/plugins/file_picker/ios`)
|
||||
- firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`)
|
||||
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
|
||||
- firebase_crashlytics (from `.symlinks/plugins/firebase_crashlytics/ios`)
|
||||
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
|
||||
- Flutter (from `Flutter`)
|
||||
- flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`)
|
||||
|
@ -222,15 +253,20 @@ SPEC REPOS:
|
|||
- Firebase
|
||||
- FirebaseAnalytics
|
||||
- FirebaseCore
|
||||
- FirebaseCoreExtension
|
||||
- FirebaseCoreInternal
|
||||
- FirebaseCrashlytics
|
||||
- FirebaseInstallations
|
||||
- FirebaseMessaging
|
||||
- FirebaseRemoteConfigInterop
|
||||
- FirebaseSessions
|
||||
- GoogleAppMeasurement
|
||||
- GoogleDataTransport
|
||||
- GoogleUtilities
|
||||
- nanopb
|
||||
- OrderedSet
|
||||
- PromisesObjC
|
||||
- PromisesSwift
|
||||
- SDWebImage
|
||||
- SwiftyGif
|
||||
|
||||
|
@ -243,6 +279,8 @@ EXTERNAL SOURCES:
|
|||
:path: ".symlinks/plugins/firebase_analytics/ios"
|
||||
firebase_core:
|
||||
:path: ".symlinks/plugins/firebase_core/ios"
|
||||
firebase_crashlytics:
|
||||
:path: ".symlinks/plugins/firebase_crashlytics/ios"
|
||||
firebase_messaging:
|
||||
:path: ".symlinks/plugins/firebase_messaging/ios"
|
||||
Flutter:
|
||||
|
@ -282,12 +320,17 @@ SPEC CHECKSUMS:
|
|||
Firebase: 26b040b20866a55f55eb3611b9fcf3ae64816b86
|
||||
firebase_analytics: 0627e95b73eb9e04f59167687ed5bc3f6fb50f23
|
||||
firebase_core: 483cfad66d24d8f3c233f31db4263830c625c909
|
||||
firebase_crashlytics: 8f04c663c8734f97c4ccbe81b8511ce7060e3b28
|
||||
firebase_messaging: e60c0694699d8a2e56a319e043709583f6544123
|
||||
FirebaseAnalytics: f9211b719db260cc91aebee8bb539cb367d0dfd1
|
||||
FirebaseCore: a2b95ae4ce7c83ceecfbbbe3b6f1cddc7415a808
|
||||
FirebaseCoreExtension: 705ca5b14bf71d2564a0ddc677df1fc86ffa600f
|
||||
FirebaseCoreInternal: 58d07f1362fddeb0feb6a857d1d1d1c5e558e698
|
||||
FirebaseCrashlytics: 81ea6ec96519388687f6061beb838a8eec482293
|
||||
FirebaseInstallations: 60c1d3bc1beef809fd1ad1189a8057a040c59f2e
|
||||
FirebaseMessaging: 585984d0a1df120617eb10b44cad8968b859815e
|
||||
FirebaseRemoteConfigInterop: 6efda51fb5e2f15b16585197e26eaa09574e8a4d
|
||||
FirebaseSessions: dbd14adac65ce996228652c1fc3a3f576bdf3ecc
|
||||
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
|
||||
flutter_inappwebview_ios: 97215cf7d4677db55df76782dbd2930c5e1c1ea0
|
||||
flutter_local_notifications: 4cde75091f6327eb8517fa068a0a5950212d2086
|
||||
|
@ -302,6 +345,7 @@ SPEC CHECKSUMS:
|
|||
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
|
||||
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
|
||||
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
|
||||
PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851
|
||||
SDWebImage: dfe95b2466a9823cf9f0c6d01217c06550d7b29a
|
||||
share_plus: 8875f4f2500512ea181eef553c3e27dba5135aad
|
||||
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
|
||||
|
|
|
@ -51,8 +51,8 @@
|
|||
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||
6436409D27A31CDC00820AF7 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
6436409227A31CDD00820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
6436409227A31CD800820AF7 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
6436409127A31CDB00820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
C1B4A503715BC7B0F8826983 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
@ -301,8 +301,8 @@
|
|||
6436409C27A31CD800820AF7 /* InfoPlist.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
6436409D27A31CDC00820AF7 /* pt */,
|
||||
6436409227A31CDD00820AF7 /* en */,
|
||||
6436409227A31CD800820AF7 /* pt */,
|
||||
6436409127A31CDB00820AF7 /* en */,
|
||||
);
|
||||
name = InfoPlist.strings;
|
||||
sourceTree = "<group>";
|
||||
|
|
|
@ -14,13 +14,13 @@ import 'package:hub/flutter_flow/nav/nav.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:hub/flutter_flow/random_data_util.dart';
|
||||
import 'package:hub/pages/home_page/home_page_model.dart';
|
||||
import 'package:hub/shared/utils/dialog_util.dart';
|
||||
import 'package:qr_flutter/qr_flutter.dart';
|
||||
|
||||
|
||||
|
||||
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
import '../shared/utils/log_util.dart';
|
||||
|
||||
Future<void> openTermsOfUse(BuildContext context) async {
|
||||
log('openTermsOfUse');
|
||||
final Uri url = Uri.parse('https://freaccess.com.br/pp/');
|
||||
|
@ -108,91 +108,88 @@ Future singInLoginAction(
|
|||
String? emailAdress,
|
||||
String? password,
|
||||
}) async {
|
||||
String? devUUID;
|
||||
ApiCallResponse? loginCall;
|
||||
try {
|
||||
String? devUUID;
|
||||
ApiCallResponse? loginCall;
|
||||
|
||||
await Future.wait([
|
||||
Future(() async {
|
||||
FFAppState().email = emailAdress!;
|
||||
}),
|
||||
Future(() async {
|
||||
FFAppState().passwd = password!;
|
||||
}),
|
||||
]);
|
||||
if ((FFAppState().email != '') && (FFAppState().passwd != '')) {
|
||||
devUUID = await getDevUUID();
|
||||
FFAppState().devUUID = devUUID!;
|
||||
loginCall = await PhpGroup.loginCall.call(
|
||||
email: FFAppState().email,
|
||||
password: FFAppState().passwd,
|
||||
uuid: FFAppState().devUUID,
|
||||
type: FFAppState().device,
|
||||
description: randomString(
|
||||
10,
|
||||
10,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
),
|
||||
);
|
||||
await Future.wait([
|
||||
Future(() async {
|
||||
FFAppState().email = emailAdress!;
|
||||
}),
|
||||
Future(() async {
|
||||
FFAppState().passwd = password!;
|
||||
}),
|
||||
]);
|
||||
|
||||
if (PhpGroup.loginCall.error(
|
||||
if ((FFAppState().email != '') && (FFAppState().passwd != '')) {
|
||||
devUUID = await getDevUUID();
|
||||
|
||||
FFAppState().devUUID = devUUID!;
|
||||
|
||||
loginCall = await PhpGroup.loginCall.call(
|
||||
email: FFAppState().email,
|
||||
password: FFAppState().passwd,
|
||||
uuid: FFAppState().devUUID,
|
||||
type: FFAppState().device,
|
||||
description: randomString(
|
||||
10,
|
||||
10,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
),
|
||||
);
|
||||
|
||||
if (PhpGroup.loginCall.error((loginCall.jsonBody ?? '')) == false) {
|
||||
FFAppState().userUUID = PhpGroup.loginCall.userUUID(
|
||||
(loginCall.jsonBody ?? ''),
|
||||
) ==
|
||||
false) {
|
||||
FFAppState().userUUID = PhpGroup.loginCall.userUUID(
|
||||
(loginCall.jsonBody ?? ''),
|
||||
)!;
|
||||
// FFAppState().token = await FirebaseMessaging.instance.getToken();
|
||||
FFAppState().createdAt = dateTimeFormat(
|
||||
'd/M/y H:mm:ss',
|
||||
getCurrentTimestamp,
|
||||
locale: FFLocalizations.of(context).languageCode,
|
||||
);
|
||||
FFAppState().updatedAt = '00/00/0000 00:00:00';
|
||||
FFAppState().status = PhpGroup.loginCall.userStatus(
|
||||
(loginCall.jsonBody ?? ''),
|
||||
)!;
|
||||
FFAppState().userDevUUID = PhpGroup.loginCall.userDeviceId(
|
||||
(loginCall.jsonBody ?? ''),
|
||||
)!;
|
||||
FFAppState().name = PhpGroup.loginCall.userName(
|
||||
(loginCall.jsonBody ?? ''),
|
||||
)!;
|
||||
FFAppState().serialNumber = await getSerialNumber() ?? '';
|
||||
FFAppState().isLogged = true;
|
||||
await toggleHomePage(context);
|
||||
return;
|
||||
} else {
|
||||
await showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
useSafeArea: true,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child: ThrowExceptionWidget(
|
||||
msg: PhpGroup.loginCall.msg(
|
||||
(loginCall?.jsonBody ?? ''),
|
||||
)!,
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
)!;
|
||||
|
||||
FFAppState().deleteEmail();
|
||||
FFAppState().email = '';
|
||||
FFAppState().createdAt = dateTimeFormat(
|
||||
'd/M/y H:mm:ss',
|
||||
getCurrentTimestamp,
|
||||
locale: FFLocalizations.of(context).languageCode,
|
||||
);
|
||||
|
||||
FFAppState().deletePasswd();
|
||||
FFAppState().passwd = '';
|
||||
FFAppState().updatedAt = '00/00/0000 00:00:00';
|
||||
|
||||
FFAppState().update(() {});
|
||||
FFAppState().status =
|
||||
PhpGroup.loginCall.userStatus((loginCall.jsonBody ?? ''))!;
|
||||
|
||||
FFAppState().userDevUUID =
|
||||
PhpGroup.loginCall.userDeviceId((loginCall.jsonBody ?? ''))!;
|
||||
|
||||
FFAppState().name =
|
||||
PhpGroup.loginCall.userName((loginCall.jsonBody ?? ''))!;
|
||||
|
||||
FFAppState().serialNumber = await getSerialNumber() ?? '';
|
||||
|
||||
FFAppState().isLogged = true;
|
||||
|
||||
await toggleHomePage(context);
|
||||
} else {
|
||||
if (PhpGroup.loginCall.msg((loginCall?.jsonBody ?? '')) == null) {
|
||||
DialogUtil.errorDefault(context);
|
||||
} else {
|
||||
DialogUtil.error(context,
|
||||
PhpGroup.loginCall.msg((loginCall?.jsonBody ?? '')).toString());
|
||||
}
|
||||
|
||||
FFAppState().deleteEmail();
|
||||
FFAppState().email = '';
|
||||
|
||||
FFAppState().deletePasswd();
|
||||
FFAppState().passwd = '';
|
||||
|
||||
FFAppState().update(() {});
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
} else {
|
||||
return;
|
||||
} catch (e, s) {
|
||||
DialogUtil.errorDefault(context);
|
||||
LogUtil.requestAPIFailed(
|
||||
'login.php', emailAdress.toString(), "Login", e, s);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -333,7 +330,6 @@ Future toggleSignInPage(BuildContext context) async {
|
|||
}
|
||||
|
||||
Future toggleSignUpPage(BuildContext context) async {
|
||||
|
||||
context.pushNamed(
|
||||
'signUpPage',
|
||||
extra: <String, dynamic>{
|
||||
|
@ -468,12 +464,12 @@ Future<bool> checkLocals({
|
|||
),
|
||||
),
|
||||
);
|
||||
safeSetState(() {}); // Chamada otimizada fora do then para evitar encadeamentos desnecessários.
|
||||
safeSetState(
|
||||
() {}); // Chamada otimizada fora do then para evitar encadeamentos desnecessários.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Future changeStatusAction(
|
||||
BuildContext context,
|
||||
String status,
|
||||
|
@ -523,13 +519,9 @@ Future changeStatusAction(
|
|||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// QR Code
|
||||
|
||||
/// QR Code
|
||||
|
||||
Uint8List assembleQRPacket(int direction, String identifier, String password) {
|
||||
List<int> packet = [direction];
|
||||
|
@ -569,13 +561,15 @@ Uint8List assembleQRPacket(int direction, String identifier, String password) {
|
|||
check ^= b;
|
||||
}
|
||||
|
||||
if (check == int.parse('0D', radix: 16) || check == int.parse('0A', radix: 16)) {
|
||||
if (check == int.parse('0D', radix: 16) ||
|
||||
check == int.parse('0A', radix: 16)) {
|
||||
packet.add(int.parse('FF', radix: 16));
|
||||
} else {
|
||||
packet.add(check);
|
||||
}
|
||||
|
||||
var bytes = packet.map((byte) => byte.toRadixString(16).padLeft(2, '0')).join((' '));
|
||||
var bytes =
|
||||
packet.map((byte) => byte.toRadixString(16).padLeft(2, '0')).join((' '));
|
||||
|
||||
log("Pacote: $packet");
|
||||
log("Bytes: $bytes");
|
||||
|
@ -586,22 +580,24 @@ Uint8List hexStringToByteArray(String s) {
|
|||
int len = s.length;
|
||||
Uint8List data = Uint8List(len ~/ 2);
|
||||
for (int i = 0; i < len; i += 2) {
|
||||
data[i ~/ 2] = ((int.parse(s[i], radix: 16) << 4) + int.parse(s[i + 1], radix: 16));
|
||||
data[i ~/ 2] =
|
||||
((int.parse(s[i], radix: 16) << 4) + int.parse(s[i + 1], radix: 16));
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
String byteToHexa(Uint8List pDados) {
|
||||
return pDados.map((byte) => byte.toRadixString(16).padLeft(2, '0').toUpperCase()).join();
|
||||
return pDados
|
||||
.map((byte) => byte.toRadixString(16).padLeft(2, '0').toUpperCase())
|
||||
.join();
|
||||
}
|
||||
|
||||
Future<String> byteToString(Uint8List bytes) async {
|
||||
return String.fromCharCodes(bytes);
|
||||
}
|
||||
|
||||
|
||||
Widget buildQrCode(
|
||||
{
|
||||
{
|
||||
// required String data,
|
||||
// required String type,
|
||||
// required int version,
|
||||
|
@ -610,204 +606,207 @@ Widget buildQrCode(
|
|||
required double dimension,
|
||||
required String identifier,
|
||||
required String pass,
|
||||
required int direction
|
||||
}
|
||||
) {
|
||||
required int direction}) {
|
||||
try {
|
||||
log("pass: $pass");
|
||||
const Color backgroundColor = Colors.white;
|
||||
const Color foregroundColor = Colors.black;
|
||||
return QrImageView.withQr(qr: QrCode.fromUint8List(data: assembleQRPacket(direction, identifier, pass), errorCorrectLevel: errorCorrectLevel), size: dimension, padding: const EdgeInsets.all(10), backgroundColor: backgroundColor, foregroundColor: foregroundColor);
|
||||
return QrImageView.withQr(
|
||||
qr: QrCode.fromUint8List(
|
||||
data: assembleQRPacket(direction, identifier, pass),
|
||||
errorCorrectLevel: errorCorrectLevel),
|
||||
size: dimension,
|
||||
padding: const EdgeInsets.all(10),
|
||||
backgroundColor: backgroundColor,
|
||||
foregroundColor: foregroundColor);
|
||||
} catch (e) {
|
||||
return Text("Erro ao gerar QR Code: ${e.toString()}");
|
||||
}
|
||||
}
|
||||
|
||||
// // Retorna o conteúdo a ser codificado no QR Code.
|
||||
// String getContents() {
|
||||
// return data;
|
||||
// }
|
||||
|
||||
// // Retorna o conteúdo a ser codificado no QR Code.
|
||||
// String getContents() {
|
||||
// return data;
|
||||
// }
|
||||
// // Retorna uma versão do conteúdo otimizada para exibição.
|
||||
// String getDisplayContents() {
|
||||
// return data.trim();
|
||||
// }
|
||||
|
||||
// // Retorna uma versão do conteúdo otimizada para exibição.
|
||||
// String getDisplayContents() {
|
||||
// return data.trim();
|
||||
// }
|
||||
// // Retorna o título baseado no tipo de conteúdo.
|
||||
// String getTitle() {
|
||||
// return type;
|
||||
// }
|
||||
|
||||
// // Retorna o título baseado no tipo de conteúdo.
|
||||
// String getTitle() {
|
||||
// return type;
|
||||
// }
|
||||
// // Codifica o conteúdo em uma string adequada para o QR Code.
|
||||
// Future<String> encodeContents() async {
|
||||
// // Implementação específica para codificar o conteúdo.
|
||||
// return data; // Exemplo simplificado.
|
||||
// }
|
||||
|
||||
// // Codifica o conteúdo em uma string adequada para o QR Code.
|
||||
// Future<String> encodeContents() async {
|
||||
// // Implementação específica para codificar o conteúdo.
|
||||
// return data; // Exemplo simplificado.
|
||||
// }
|
||||
// // Codifica o conteúdo específico do QR Code.
|
||||
// Future<Widget> encodeQRCodeContents() async {
|
||||
// return getQrCode();
|
||||
// }
|
||||
|
||||
// // Codifica o conteúdo específico do QR Code.
|
||||
// Future<Widget> encodeQRCodeContents() async {
|
||||
// return getQrCode();
|
||||
// }
|
||||
// // Gera o QR Code como um widget.
|
||||
|
||||
// // Gera o QR Code como um widget.
|
||||
|
||||
// // Codifica o conteúdo como um bitmap (pode ser útil para operações de baixo nível).
|
||||
// // Future<Image> encodeAsBitmap() async {
|
||||
// // // Implementação para codificar como bitmap.
|
||||
// // return Image(image); // Exemplo simplificado.
|
||||
// // }
|
||||
|
||||
// // Codifica o conteúdo como um bitmap (pode ser útil para operações de baixo nível).
|
||||
// // Future<Image> encodeAsBitmap() async {
|
||||
// // // Implementação para codificar como bitmap.
|
||||
// // return Image(image); // Exemplo simplificado.
|
||||
// // }
|
||||
// // Adivinha a codificação apropriada para o conteúdo.
|
||||
// String guessAppropriateEncoding(String content) {
|
||||
// // Implementação para adivinhar a codificação.
|
||||
// return "UTF-8"; // Exemplo simplificado.
|
||||
// }
|
||||
|
||||
// // Adivinha a codificação apropriada para o conteúdo.
|
||||
// String guessAppropriateEncoding(String content) {
|
||||
// // Implementação para adivinhar a codificação.
|
||||
// return "UTF-8"; // Exemplo simplificado.
|
||||
// }
|
||||
// // Remove espaços em branco do início e do fim do conteúdo.
|
||||
// String trim(String content) {
|
||||
// return content.trim();
|
||||
// }
|
||||
|
||||
// // Remove espaços em branco do início e do fim do conteúdo.
|
||||
// String trim(String content) {
|
||||
// return content.trim();
|
||||
// }
|
||||
// // Escapa caracteres especiais para o formato MECARD.
|
||||
// String escapeMECARD(String content) {
|
||||
// // Implementação para escapar caracteres.
|
||||
// return content.replaceAll(':', '\\:'); // Exemplo simplificado.
|
||||
// }
|
||||
|
||||
// // Escapa caracteres especiais para o formato MECARD.
|
||||
// String escapeMECARD(String content) {
|
||||
// // Implementação para escapar caracteres.
|
||||
// return content.replaceAll(':', '\\:'); // Exemplo simplificado.
|
||||
// }
|
||||
/// menu
|
||||
|
||||
/// menu
|
||||
|
||||
Future scheduleVisitOptAction(BuildContext context) async {
|
||||
await showAdaptiveDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child: OptionSelectionModalWidget(
|
||||
routesListStr: <String>[
|
||||
'scheduleCompleteVisitPage',
|
||||
'scheduleProvisionalVisitPage',
|
||||
'fastPassPage',
|
||||
],
|
||||
iconsListIcon: <IconData>[
|
||||
Icons.date_range_rounded,
|
||||
Icons.date_range_rounded,
|
||||
Icons.date_range_rounded,
|
||||
],
|
||||
nameListStr: <String>[
|
||||
FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Visita\nCompleta',
|
||||
enText: 'Complete\nSchedule',
|
||||
),
|
||||
FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Visita\nProvisória',
|
||||
enText: 'Provisional\nSchedule',
|
||||
),
|
||||
FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Visita\nRápida',
|
||||
enText: 'Fast\nSchedule',
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future registerVisitorOptAction(BuildContext context) async {
|
||||
context.pushNamed(
|
||||
'registerVisitorPage',
|
||||
extra: <String, dynamic>{
|
||||
kTransitionInfoKey: const TransitionInfo(
|
||||
hasTransition: true,
|
||||
transitionType: PageTransitionType.scale,
|
||||
alignment: Alignment.bottomCenter,
|
||||
Future scheduleVisitOptAction(BuildContext context) async {
|
||||
await showAdaptiveDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child: OptionSelectionModalWidget(
|
||||
routesListStr: <String>[
|
||||
'scheduleCompleteVisitPage',
|
||||
'scheduleProvisionalVisitPage',
|
||||
'fastPassPage',
|
||||
],
|
||||
iconsListIcon: <IconData>[
|
||||
Icons.date_range_rounded,
|
||||
Icons.date_range_rounded,
|
||||
Icons.date_range_rounded,
|
||||
],
|
||||
nameListStr: <String>[
|
||||
FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Visita\nCompleta',
|
||||
enText: 'Complete\nSchedule',
|
||||
),
|
||||
FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Visita\nProvisória',
|
||||
enText: 'Provisional\nSchedule',
|
||||
),
|
||||
FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Visita\nRápida',
|
||||
enText: 'Fast\nSchedule',
|
||||
),
|
||||
],
|
||||
),
|
||||
},
|
||||
);
|
||||
}
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future peopleOnThePropertyAction(BuildContext context) async {
|
||||
context.pushNamed(
|
||||
'peopleOnThePropertyPage',
|
||||
extra: <String, dynamic>{
|
||||
kTransitionInfoKey: const TransitionInfo(
|
||||
hasTransition: true,
|
||||
transitionType: PageTransitionType.fade,
|
||||
Future registerVisitorOptAction(BuildContext context) async {
|
||||
context.pushNamed(
|
||||
'registerVisitorPage',
|
||||
extra: <String, dynamic>{
|
||||
kTransitionInfoKey: const TransitionInfo(
|
||||
hasTransition: true,
|
||||
transitionType: PageTransitionType.scale,
|
||||
alignment: Alignment.bottomCenter,
|
||||
),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future peopleOnThePropertyAction(BuildContext context) async {
|
||||
context.pushNamed(
|
||||
'peopleOnThePropertyPage',
|
||||
extra: <String, dynamic>{
|
||||
kTransitionInfoKey: const TransitionInfo(
|
||||
hasTransition: true,
|
||||
transitionType: PageTransitionType.fade,
|
||||
),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future preferencesSettings(BuildContext context) async {
|
||||
context.pushNamed(
|
||||
'preferencesSettings',
|
||||
extra: <String, dynamic>{
|
||||
kTransitionInfoKey: const TransitionInfo(
|
||||
hasTransition: true,
|
||||
transitionType: PageTransitionType.scale,
|
||||
alignment: Alignment.bottomCenter,
|
||||
),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future liberationHistoryOptAction(BuildContext context) async {
|
||||
await showAdaptiveDialog(
|
||||
// isScrollControlled: true,
|
||||
// backgroundColor: Colors.transparent,
|
||||
// enableDrag: false,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child: OptionSelectionModalWidget(
|
||||
routesListStr: <String>[
|
||||
'liberationHistory',
|
||||
'acessHistoryPage',
|
||||
'scheduleCompleteVisitPage',
|
||||
// 'messageHistoryPage',
|
||||
],
|
||||
iconsListIcon: <IconData>[
|
||||
Icons.history_rounded,
|
||||
Icons.history_rounded,
|
||||
Icons.history_rounded,
|
||||
// Icons.history_rounded,
|
||||
],
|
||||
nameListStr: <String>[
|
||||
FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Histórico\nde Liberação',
|
||||
enText: 'Liberation\nHistory',
|
||||
),
|
||||
FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Histórico\nde Acesso',
|
||||
enText: 'Access\nHistory',
|
||||
),
|
||||
FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Histórico\nde Visita',
|
||||
enText: 'Visit\nHistory',
|
||||
),
|
||||
// FFLocalizations.of(context).getVariableText(
|
||||
// ptText: 'Histórico\nde Mensagens',
|
||||
// enText: 'Message\nHistory',
|
||||
// ),
|
||||
],
|
||||
),
|
||||
},
|
||||
);
|
||||
}
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future preferencesSettings(BuildContext context) async {
|
||||
context.pushNamed(
|
||||
'preferencesSettings',
|
||||
extra: <String, dynamic>{
|
||||
kTransitionInfoKey: const TransitionInfo(
|
||||
hasTransition: true,
|
||||
transitionType: PageTransitionType.scale,
|
||||
alignment: Alignment.bottomCenter,
|
||||
),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future liberationHistoryOptAction(BuildContext context) async {
|
||||
await showAdaptiveDialog(
|
||||
// isScrollControlled: true,
|
||||
// backgroundColor: Colors.transparent,
|
||||
// enableDrag: false,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child: OptionSelectionModalWidget(
|
||||
routesListStr: <String>[
|
||||
'liberationHistory',
|
||||
'acessHistoryPage',
|
||||
'scheduleCompleteVisitPage',
|
||||
// 'messageHistoryPage',
|
||||
],
|
||||
iconsListIcon: <IconData>[
|
||||
Icons.history_rounded,
|
||||
Icons.history_rounded,
|
||||
Icons.history_rounded,
|
||||
// Icons.history_rounded,
|
||||
],
|
||||
nameListStr: <String>[
|
||||
FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Histórico\nde Liberação',
|
||||
enText: 'Liberation\nHistory',
|
||||
),
|
||||
FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Histórico\nde Acesso',
|
||||
enText: 'Access\nHistory',
|
||||
),
|
||||
FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Histórico\nde Visita',
|
||||
enText: 'Visit\nHistory',
|
||||
),
|
||||
// FFLocalizations.of(context).getVariableText(
|
||||
// ptText: 'Histórico\nde Mensagens',
|
||||
// enText: 'Message\nHistory',
|
||||
// ),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future accessQRCodeOptAction(BuildContext context) async {
|
||||
context.pushNamed(
|
||||
'qrCodePage',
|
||||
extra: <String, dynamic>{
|
||||
kTransitionInfoKey: const TransitionInfo(
|
||||
hasTransition: true,
|
||||
transitionType: PageTransitionType.scale,
|
||||
alignment: Alignment.bottomCenter,
|
||||
),
|
||||
},
|
||||
);
|
||||
}
|
||||
Future accessQRCodeOptAction(BuildContext context) async {
|
||||
context.pushNamed(
|
||||
'qrCodePage',
|
||||
extra: <String, dynamic>{
|
||||
kTransitionInfoKey: const TransitionInfo(
|
||||
hasTransition: true,
|
||||
transitionType: PageTransitionType.scale,
|
||||
alignment: Alignment.bottomCenter,
|
||||
),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@ class FFAppState extends ChangeNotifier {
|
|||
// Verifica suporte biométrico
|
||||
Future<bool> checkBiometrics() async {
|
||||
try {
|
||||
return await auth.canCheckBiometrics;
|
||||
return await auth.canCheckBiometrics;
|
||||
} catch (e) {
|
||||
clearBiometricAuthentication();
|
||||
debugPrint('Error checking biometrics: $e');
|
||||
|
@ -30,14 +30,13 @@ class FFAppState extends ChangeNotifier {
|
|||
bool authenticated = false;
|
||||
try {
|
||||
authenticated = await auth.authenticate(
|
||||
localizedReason: 'Scan your fingerprint to authenticate',
|
||||
options: const AuthenticationOptions(
|
||||
biometricOnly: true,
|
||||
stickyAuth: true,
|
||||
useErrorDialogs: true,
|
||||
sensitiveTransaction: true,
|
||||
)
|
||||
);
|
||||
localizedReason: 'Scan your fingerprint to authenticate',
|
||||
options: const AuthenticationOptions(
|
||||
biometricOnly: true,
|
||||
stickyAuth: true,
|
||||
useErrorDialogs: true,
|
||||
sensitiveTransaction: true,
|
||||
));
|
||||
if (authenticated) {
|
||||
_isBiometricAuthenticated = true;
|
||||
notifyListeners();
|
||||
|
@ -50,7 +49,8 @@ class FFAppState extends ChangeNotifier {
|
|||
clearBiometricAuthentication();
|
||||
return Future.error(e);
|
||||
}
|
||||
return Future.error(''); // Add this line to ensure a value is always returned
|
||||
return Future.error(
|
||||
''); // Add this line to ensure a value is always returned
|
||||
}
|
||||
|
||||
// Função para limpar o estado de autenticação biométrica
|
||||
|
@ -60,9 +60,6 @@ class FFAppState extends ChangeNotifier {
|
|||
// Limpar a informação salva, se necessário
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static FFAppState _instance = FFAppState._internal();
|
||||
|
||||
factory FFAppState() {
|
||||
|
@ -123,13 +120,16 @@ class FFAppState extends ChangeNotifier {
|
|||
_tokenAPNS = await secureStorage.getString('ff_tokenAPNS') ?? _tokenAPNS;
|
||||
});
|
||||
await _safeInitAsync(() async {
|
||||
_userDevUUID = await secureStorage.getString('ff_user_dev_id') ?? _userDevUUID;
|
||||
_userDevUUID =
|
||||
await secureStorage.getString('ff_user_dev_id') ?? _userDevUUID;
|
||||
});
|
||||
await _safeInitAsync(() async {
|
||||
_serialNumber = await secureStorage.getString('ff_serialNumber') ?? _serialNumber;
|
||||
_serialNumber =
|
||||
await secureStorage.getString('ff_serialNumber') ?? _serialNumber;
|
||||
});
|
||||
await _safeInitAsync(() async {
|
||||
_fingerprintOPT = await secureStorage.getBool('fingerprint') ?? _fingerprintOPT;
|
||||
_fingerprintOPT =
|
||||
await secureStorage.getBool('fingerprint') ?? _fingerprintOPT;
|
||||
});
|
||||
await _safeInitAsync(() async {
|
||||
_personOPT = await secureStorage.getBool('person') ?? _personOPT;
|
||||
|
@ -137,6 +137,9 @@ class FFAppState extends ChangeNotifier {
|
|||
await _safeInitAsync(() async {
|
||||
_passOPT = await secureStorage.getBool('pass') ?? _passOPT;
|
||||
});
|
||||
await _safeInitAsync(() async {
|
||||
_panicOPT = await secureStorage.getBool('panic') ?? _panicOPT;
|
||||
});
|
||||
await _safeInitAsync(() async {
|
||||
_notifyOPT = await secureStorage.getBool('notify') ?? _notifyOPT;
|
||||
});
|
||||
|
@ -147,9 +150,9 @@ class FFAppState extends ChangeNotifier {
|
|||
_panicPass = await secureStorage.getString('panicPass') ?? _panicPass;
|
||||
});
|
||||
await _safeInitAsync(() async {
|
||||
_fingerprintPass = await secureStorage.getString('fingerprintPass') ?? _fingerprintPass;
|
||||
_fingerprintPass =
|
||||
await secureStorage.getString('fingerprintPass') ?? _fingerprintPass;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
void update(VoidCallback callback) {
|
||||
|
@ -159,6 +162,17 @@ class FFAppState extends ChangeNotifier {
|
|||
|
||||
late FlutterSecureStorage secureStorage;
|
||||
|
||||
bool _panicOPT = false;
|
||||
bool get panic => _panicOPT;
|
||||
set panic(bool value) {
|
||||
_panicOPT = value;
|
||||
secureStorage.setBool('panic', value);
|
||||
}
|
||||
|
||||
void deletePanic() {
|
||||
secureStorage.delete(key: 'panic');
|
||||
}
|
||||
|
||||
String _fingerprintPass = '';
|
||||
String get fingerprintPass => _fingerprintPass;
|
||||
set fingerprintPass(String value) {
|
||||
|
@ -185,8 +199,7 @@ class FFAppState extends ChangeNotifier {
|
|||
String get panicPass => _panicPass;
|
||||
set panicPass(String value) {
|
||||
_panicPass = value;
|
||||
secureStorage.setString
|
||||
('panicPass', value);
|
||||
secureStorage.setString('panicPass', value);
|
||||
}
|
||||
|
||||
void deletePanicPass() {
|
||||
|
@ -203,8 +216,7 @@ class FFAppState extends ChangeNotifier {
|
|||
bool _passOPT = false;
|
||||
bool get pass => _passOPT;
|
||||
set pass(bool value) {
|
||||
_passOPT =
|
||||
value;
|
||||
_passOPT = value;
|
||||
secureStorage.setBool('pass', value);
|
||||
}
|
||||
|
||||
|
@ -486,4 +498,4 @@ extension FlutterSecureStorageExtensions on FlutterSecureStorage {
|
|||
Future<void> setStringList(String key, List<String> value) async =>
|
||||
await writeSync(
|
||||
key: key, value: const ListToCsvConverter().convert([value]));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import 'package:hub/shared/enums/enum_throw_exception.dart';
|
||||
|
||||
import '/flutter_flow/flutter_flow_animations.dart';
|
||||
import '/flutter_flow/flutter_flow_theme.dart';
|
||||
import '/flutter_flow/flutter_flow_util.dart';
|
||||
|
@ -7,15 +9,12 @@ import 'package:google_fonts/google_fonts.dart';
|
|||
import 'throw_exception_model.dart';
|
||||
export 'throw_exception_model.dart';
|
||||
|
||||
///
|
||||
|
||||
class ThrowExceptionWidget extends StatefulWidget {
|
||||
const ThrowExceptionWidget({
|
||||
super.key,
|
||||
required this.msg,
|
||||
});
|
||||
ThrowExceptionWidget(
|
||||
{super.key, required this.msg, this.type = EnumThrowException.error});
|
||||
|
||||
final String? msg;
|
||||
EnumThrowException type;
|
||||
|
||||
@override
|
||||
State<ThrowExceptionWidget> createState() => _ThrowExceptionWidgetState();
|
||||
|
@ -61,6 +60,43 @@ class _ThrowExceptionWidgetState extends State<ThrowExceptionWidget>
|
|||
super.dispose();
|
||||
}
|
||||
|
||||
Color _getColorByType(BuildContext context) {
|
||||
switch (widget.type) {
|
||||
case EnumThrowException.error:
|
||||
return FlutterFlowTheme.of(context).error;
|
||||
case EnumThrowException.warning:
|
||||
return FlutterFlowTheme.of(context).warning;
|
||||
case EnumThrowException.success:
|
||||
return FlutterFlowTheme.of(context).success;
|
||||
}
|
||||
}
|
||||
|
||||
IconData _getIconByType(BuildContext context) {
|
||||
switch (widget.type) {
|
||||
case EnumThrowException.error:
|
||||
return Icons.cancel_outlined;
|
||||
case EnumThrowException.warning:
|
||||
return Icons.warning_amber_outlined;
|
||||
case EnumThrowException.success:
|
||||
return Icons.check_circle_outline;
|
||||
}
|
||||
}
|
||||
|
||||
String _getTitleByType(BuildContext context) {
|
||||
switch (widget.type) {
|
||||
case EnumThrowException.error:
|
||||
return FFLocalizations.of(context)
|
||||
.getVariableText(ptText: "Falha :(", enText: "Fail :(");
|
||||
case EnumThrowException.warning:
|
||||
return FFLocalizations.of(context)
|
||||
.getVariableText(ptText: "Aviso :O", enText: "Warning :O");
|
||||
case EnumThrowException.success:
|
||||
return FFLocalizations.of(context)
|
||||
.getVariableText(ptText: "Sucesso ;)", enText: "Success ;)");
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
|
@ -77,89 +113,63 @@ class _ThrowExceptionWidgetState extends State<ThrowExceptionWidget>
|
|||
onTap: () async {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: Container(
|
||||
height: 400.0,
|
||||
decoration: BoxDecoration(
|
||||
color: FlutterFlowTheme.of(context).primaryBackground,
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(10.0),
|
||||
bottomRight: Radius.circular(10.0),
|
||||
topLeft: Radius.circular(10.0),
|
||||
topRight: Radius.circular(10.0),
|
||||
),
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Stack(
|
||||
children: [
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(0.0, 0.0),
|
||||
child: Icon(
|
||||
Icons.circle_outlined,
|
||||
color: FlutterFlowTheme.of(context).error,
|
||||
size: 200.0,
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Stack(
|
||||
children: [
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(0.0, 0.0),
|
||||
child: Icon(
|
||||
_getIconByType(context),
|
||||
color: _getColorByType(context),
|
||||
size: 150.0,
|
||||
),
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(0.0, 0.0),
|
||||
child: Icon(
|
||||
Icons.close_outlined,
|
||||
color: FlutterFlowTheme.of(context).error,
|
||||
size: 200.0,
|
||||
),
|
||||
),
|
||||
],
|
||||
).animateOnPageLoad(
|
||||
animationsMap['stackOnPageLoadAnimation']!),
|
||||
Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'e58xxxiq' /* ERRO */,
|
||||
),
|
||||
],
|
||||
).animateOnPageLoad(animationsMap['stackOnPageLoadAnimation']!),
|
||||
Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
_getTitleByType(context),
|
||||
style: FlutterFlowTheme.of(context).bodyMedium.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context).bodyMediumFamily,
|
||||
fontSize: 20.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.bold,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context).bodyMediumFamily),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
0.0, 10.0, 0.0, 0.0),
|
||||
child: Text(
|
||||
valueOrDefault<String>(
|
||||
widget.msg,
|
||||
'Message Not Found',
|
||||
),
|
||||
style: FlutterFlowTheme.of(context).bodyMedium.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context).bodyMediumFamily,
|
||||
fontSize: 20.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.bold,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 0.0),
|
||||
child: Text(
|
||||
valueOrDefault<String>(
|
||||
widget.msg,
|
||||
'Message Not Found',
|
||||
),
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
.override(
|
||||
fontFamily: FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily),
|
||||
),
|
||||
),
|
||||
),
|
||||
].addToStart(const SizedBox(height: 50.0)),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
].addToStart(const SizedBox(height: 20.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});
|
||||
|
||||
|
@ -44,137 +41,139 @@ class _VisitorNotFoundComponentWidgetState
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Align(
|
||||
alignment: const AlignmentDirectional(0.0, 0.0),
|
||||
child: Container(
|
||||
width: 350.0,
|
||||
height: 350.0,
|
||||
decoration: BoxDecoration(
|
||||
color: FlutterFlowTheme.of(context).primaryBackground,
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(25.0),
|
||||
bottomRight: Radius.circular(25.0),
|
||||
topLeft: Radius.circular(25.0),
|
||||
topRight: Radius.circular(25.0),
|
||||
return Container(
|
||||
width: MediaQuery.of(context).size.height * 0.5,
|
||||
height: MediaQuery.of(context).size.height * 0.4,
|
||||
decoration: BoxDecoration(
|
||||
color: FlutterFlowTheme.of(context).primaryBackground,
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(25.0),
|
||||
bottomRight: Radius.circular(25.0),
|
||||
topLeft: Radius.circular(25.0),
|
||||
topRight: Radius.circular(25.0),
|
||||
),
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(1.0, -1.0),
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 5.0, 5.0, 0.0),
|
||||
child: FlutterFlowIconButton(
|
||||
borderRadius: 20.0,
|
||||
borderWidth: 1.0,
|
||||
buttonSize: 40.0,
|
||||
icon: Icon(
|
||||
Icons.close,
|
||||
color: FlutterFlowTheme.of(context).accent1,
|
||||
size: 24.0,
|
||||
),
|
||||
onPressed: () async {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(1.0, -1.0),
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 5.0, 5.0, 0.0),
|
||||
child: FlutterFlowIconButton(
|
||||
borderRadius: 20.0,
|
||||
borderWidth: 1.0,
|
||||
buttonSize: 40.0,
|
||||
icon: Icon(
|
||||
Icons.close,
|
||||
color: FlutterFlowTheme.of(context).accent1,
|
||||
size: 24.0,
|
||||
Icon(
|
||||
Icons.notifications_none,
|
||||
color: FlutterFlowTheme.of(context).accent1,
|
||||
size: 72.0,
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 16.0, 0.0, 0.0),
|
||||
child: Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'1p9mykbj' /* Usuário não encontrado */,
|
||||
),
|
||||
style: FlutterFlowTheme.of(context).headlineMedium.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context).headlineMediumFamily,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context).headlineMediumFamily),
|
||||
),
|
||||
onPressed: () async {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(20.0, 4.0, 20.0, 0.0),
|
||||
child: Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'kt937sp6' /* O documento inserido não corre... */,
|
||||
),
|
||||
),
|
||||
Icon(
|
||||
Icons.notifications_none,
|
||||
color: FlutterFlowTheme.of(context).accent1,
|
||||
size: 72.0,
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 16.0, 0.0, 0.0),
|
||||
child: Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'1p9mykbj' /* Usuário não encontrado */,
|
||||
),
|
||||
style: FlutterFlowTheme.of(context).headlineMedium.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context).headlineMediumFamily,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context).headlineMediumFamily),
|
||||
),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
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... */,
|
||||
),
|
||||
style: FlutterFlowTheme.of(context).labelMedium.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context).labelMediumFamily,
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontStyle: FontStyle.italic,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context).labelMediumFamily),
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Align(
|
||||
alignment: const AlignmentDirectional(0.0, 1.0),
|
||||
child: FFButtonWidget(
|
||||
onPressed: () async {
|
||||
Navigator.pop(context);
|
||||
await showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
enableDrag: false,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child: const RegisiterVistorTemplateComponentWidget(),
|
||||
);
|
||||
},
|
||||
).then((value) => safeSetState(() {}));
|
||||
},
|
||||
text: FFLocalizations.of(context).getText(
|
||||
'y2x4nfcn' /* Adicionar */,
|
||||
style: FlutterFlowTheme.of(context).labelMedium.override(
|
||||
fontFamily: FlutterFlowTheme.of(context).labelMediumFamily,
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontStyle: FontStyle.italic,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context).labelMediumFamily),
|
||||
),
|
||||
options: FFButtonOptions(
|
||||
width: double.infinity,
|
||||
height: 30.0,
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(24.0, 0.0, 24.0, 0.0),
|
||||
iconPadding:
|
||||
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
textStyle: FlutterFlowTheme.of(context).titleSmall.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context).titleSmallFamily,
|
||||
color: Colors.white,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context).titleSmallFamily),
|
||||
),
|
||||
elevation: 3.0,
|
||||
borderSide: const BorderSide(
|
||||
color: Colors.transparent,
|
||||
width: 1.0,
|
||||
),
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(25.0),
|
||||
bottomRight: Radius.circular(25.0),
|
||||
topLeft: Radius.circular(15.0),
|
||||
topRight: Radius.circular(15.0),
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Align(
|
||||
alignment: const AlignmentDirectional(0.0, 1.0),
|
||||
child: FFButtonWidget(
|
||||
onPressed: () async {
|
||||
Navigator.pop(context);
|
||||
await showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
enableDrag: true,
|
||||
useSafeArea: true,
|
||||
isDismissible: true,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child: SizedBox(
|
||||
width: double.infinity,
|
||||
height: MediaQuery.of(context).size.height * 0.9,
|
||||
child: const RegisiterVistorTemplateComponentWidget(
|
||||
source: 'VisitorNotFoundComponent',
|
||||
)),
|
||||
);
|
||||
},
|
||||
).then((value) => safeSetState(() {}));
|
||||
},
|
||||
text: FFLocalizations.of(context)
|
||||
.getVariableText(enText: 'Add', ptText: 'Adicionar'),
|
||||
options: FFButtonOptions(
|
||||
width: double.infinity,
|
||||
height: 30.0,
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
24.0, 0.0, 24.0, 0.0),
|
||||
iconPadding:
|
||||
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
textStyle: FlutterFlowTheme.of(context).titleSmall.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context).titleSmallFamily,
|
||||
color: Colors.white,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context).titleSmallFamily),
|
||||
),
|
||||
elevation: 3.0,
|
||||
borderSide: const BorderSide(
|
||||
color: Colors.transparent,
|
||||
width: 1.0,
|
||||
),
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(25.0),
|
||||
bottomRight: Radius.circular(25.0),
|
||||
topLeft: Radius.circular(15.0),
|
||||
topRight: Radius.circular(15.0),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
import 'package:hub/backend/api_requests/api_manager.dart';
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:hub/backend/api_requests/api_manager.dart';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hub/components/organism_components/schedule_visit_detail/schedule_visit_detail_widget.dart';
|
||||
import 'package:hub/flutter_flow/flutter_flow_model.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
class ScheduleVisitDetailModel
|
||||
extends FlutterFlowModel<ScheduleVisitDetailWidget> {
|
||||
|
@ -36,6 +38,36 @@ class ScheduleVisitDetailModel
|
|||
// Stores action output result for [Backend Call - API (postScheduleVisit)] action in Icon widget.
|
||||
ApiCallResponse? postScheduleVisit;
|
||||
|
||||
String convertDateFormat(String dateStr) {
|
||||
try {
|
||||
log('Received date string: $dateStr');
|
||||
|
||||
// Formato original
|
||||
DateFormat originalFormat = DateFormat('d/M/y H:mm:ss');
|
||||
// Novo formato
|
||||
DateFormat newFormat = DateFormat('y-M-d H:mm:ss');
|
||||
|
||||
// Validate the input string format
|
||||
if (!RegExp(r'^\d{1,2}/\d{1,2}/\d{4} \d{1,2}:\d{2}:\d{2}$')
|
||||
.hasMatch(dateStr)) {
|
||||
log('Invalid date format: $dateStr');
|
||||
return 'Invalid date format';
|
||||
}
|
||||
|
||||
// Converte a string para DateTime
|
||||
DateTime dateTime = originalFormat.parse(dateStr);
|
||||
|
||||
// Converte DateTime para a nova string formatada
|
||||
String formattedDate = newFormat.format(dateTime);
|
||||
log('Formatted date: $formattedDate');
|
||||
return formattedDate;
|
||||
} catch (e) {
|
||||
// Handle the exception by returning an error message or a default value
|
||||
log('Error parsing date: $e');
|
||||
return 'Invalid date format';
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void initState(BuildContext context) {}
|
||||
|
||||
|
@ -59,4 +91,4 @@ class ScheduleVisitDetailModel
|
|||
textFieldFocusNode6?.dispose();
|
||||
textController6?.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,24 +1,43 @@
|
|||
import 'package:hub/shared/utils/validator_util.dart';
|
||||
|
||||
import '/backend/api_requests/api_calls.dart';
|
||||
import '/flutter_flow/flutter_flow_util.dart';
|
||||
import 'forgot_password_template_component_widget.dart'
|
||||
show ForgotPasswordTemplateComponentWidget;
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
||||
|
||||
class ForgotPasswordTemplateComponentModel
|
||||
extends FlutterFlowModel<ForgotPasswordTemplateComponentWidget> {
|
||||
/// State fields for stateful widgets in this component.
|
||||
|
||||
final formKey = GlobalKey<FormState>();
|
||||
// State field(s) for emailAddress widget.
|
||||
FocusNode? emailAddressFocusNode;
|
||||
TextEditingController? emailAddressTextController;
|
||||
String? Function(BuildContext, String?)? emailAddressTextControllerValidator;
|
||||
String? _emailAddressTextControllerValidator(
|
||||
BuildContext context, String? val) {
|
||||
if (val == null || val.isEmpty) {
|
||||
return FFLocalizations.of(context).getText(
|
||||
'3hqg8buh' /* E-mail é Obrigatório */,
|
||||
);
|
||||
}
|
||||
|
||||
if (!ValidatorUtil.isValidEmail(val)) {
|
||||
return FFLocalizations.of(context).getText(
|
||||
'jh5r2b1w' /* E-mail Inválido */,
|
||||
);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Stores action output result for [Backend Call - API (forgotPassword)] action in Button-Login widget.
|
||||
ApiCallResponse? req;
|
||||
|
||||
@override
|
||||
void initState(BuildContext context) {}
|
||||
void initState(BuildContext context) {
|
||||
emailAddressTextControllerValidator = _emailAddressTextControllerValidator;
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
|
|
|
@ -1,18 +1,21 @@
|
|||
import 'dart:developer';
|
||||
|
||||
import 'package:hub/flutter_flow/nav/nav.dart';
|
||||
import 'package:hub/shared/utils/dialog_util.dart';
|
||||
import 'package:hub/shared/utils/log_util.dart';
|
||||
import 'package:hub/shared/utils/validator_util.dart';
|
||||
|
||||
import '/backend/api_requests/api_calls.dart';
|
||||
import '/components/molecular_components/throw_exception/throw_exception_widget.dart';
|
||||
import '/flutter_flow/flutter_flow_theme.dart';
|
||||
import '/flutter_flow/flutter_flow_util.dart';
|
||||
import '/flutter_flow/flutter_flow_widgets.dart';
|
||||
import 'package:easy_debounce/easy_debounce.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
import 'forgot_password_template_component_model.dart';
|
||||
export 'forgot_password_template_component_model.dart';
|
||||
|
||||
//
|
||||
|
||||
|
||||
class ForgotPasswordTemplateComponentWidget extends StatefulWidget {
|
||||
const ForgotPasswordTemplateComponentWidget({super.key});
|
||||
|
||||
|
@ -101,19 +104,19 @@ class _ForgotPasswordTemplateComponentWidgetState
|
|||
),
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(12.0, 0.0, 0.0, 0.0),
|
||||
const EdgeInsetsDirectional.fromSTEB(12.0, 0.0, 0.0, 0.0),
|
||||
child: Text(
|
||||
'',
|
||||
style:
|
||||
FlutterFlowTheme.of(context).bodyMedium.override(
|
||||
fontFamily: 'Plus Jakarta Sans',
|
||||
color: const Color(0xFF15161E),
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.w500,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey('Plus Jakarta Sans'),
|
||||
),
|
||||
FlutterFlowTheme.of(context).bodyMedium.override(
|
||||
fontFamily: 'Plus Jakarta Sans',
|
||||
color: const Color(0xFF15161E),
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.w500,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey('Plus Jakarta Sans'),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
|
@ -127,13 +130,13 @@ class _ForgotPasswordTemplateComponentWidgetState
|
|||
'xxm3ajsy' /* ESQUECEU SUA SENHA? */,
|
||||
),
|
||||
style: FlutterFlowTheme.of(context).headlineMedium.override(
|
||||
fontFamily: 'Outfit',
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
fontSize: 24.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.w500,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey('Outfit'),
|
||||
),
|
||||
fontFamily: 'Outfit',
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
fontSize: 24.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.w500,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey('Outfit'),
|
||||
),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
|
@ -143,105 +146,100 @@ class _ForgotPasswordTemplateComponentWidgetState
|
|||
'wu2f7yzo' /* Não se preucupe nós vamos te a... */,
|
||||
),
|
||||
style: FlutterFlowTheme.of(context).labelMedium.override(
|
||||
fontFamily: 'Plus Jakarta Sans',
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.w500,
|
||||
useGoogleFonts:
|
||||
GoogleFonts.asMap().containsKey('Plus Jakarta Sans'),
|
||||
),
|
||||
),
|
||||
),
|
||||
Form(
|
||||
key: _model.formKey,
|
||||
autovalidateMode: AutovalidateMode.onUserInteraction,
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(16.0, 12.0, 16.0, 0.0),
|
||||
child: SizedBox(
|
||||
width: double.infinity,
|
||||
child: TextFormField(
|
||||
controller: _model.emailAddressTextController,
|
||||
focusNode: _model.emailAddressFocusNode,
|
||||
onChanged: (_) => EasyDebounce.debounce(
|
||||
'_model.emailAddressTextController',
|
||||
const Duration(milliseconds: 500),
|
||||
() => setState(() {}),
|
||||
),
|
||||
autofocus: true,
|
||||
autofillHints: const [AutofillHints.email],
|
||||
obscureText: false,
|
||||
decoration: InputDecoration(
|
||||
isDense: true,
|
||||
labelText: FFLocalizations.of(context).getText(
|
||||
'mtz8l7ft' /* E-mail */,
|
||||
),
|
||||
labelStyle:
|
||||
FlutterFlowTheme.of(context).labelMedium.override(
|
||||
fontFamily: 'Plus Jakarta Sans',
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.w500,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey('Plus Jakarta Sans'),
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(
|
||||
color: Colors.black,
|
||||
width: 2.00,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(12.0),
|
||||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
width: 2.00,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(12.0),
|
||||
),
|
||||
errorBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).error,
|
||||
width: 2.00,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(12.0),
|
||||
),
|
||||
focusedErrorBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).error,
|
||||
width: 2.00,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(12.0),
|
||||
),
|
||||
contentPadding: const EdgeInsetsDirectional.fromSTEB(
|
||||
24.0, 24.0, 20.0, 24.0),
|
||||
suffixIcon: Icon(
|
||||
Icons.email,
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
size: 22.0,
|
||||
),
|
||||
),
|
||||
style: FlutterFlowTheme.of(context).bodyMedium.override(
|
||||
fontFamily: 'Plus Jakarta Sans',
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.w500,
|
||||
useGoogleFonts:
|
||||
GoogleFonts.asMap().containsKey('Plus Jakarta Sans'),
|
||||
),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(16.0, 12.0, 16.0, 0.0),
|
||||
child: SizedBox(
|
||||
width: double.infinity,
|
||||
child: TextFormField(
|
||||
controller: _model.emailAddressTextController,
|
||||
focusNode: _model.emailAddressFocusNode,
|
||||
autofillHints: const [AutofillHints.email],
|
||||
obscureText: false,
|
||||
decoration: InputDecoration(
|
||||
isDense: true,
|
||||
labelText: FFLocalizations.of(context).getText(
|
||||
'mtz8l7ft' /* Email */,
|
||||
),
|
||||
labelStyle:
|
||||
FlutterFlowTheme.of(context).labelMedium.override(
|
||||
fontFamily: 'Plus Jakarta Sans',
|
||||
color: FlutterFlowTheme.of(context).accent1,
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.w500,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey('Plus Jakarta Sans'),
|
||||
),
|
||||
hintText: FFLocalizations.of(context).getText(
|
||||
'w7y5wlnv' /* digite o seu email..... */,
|
||||
),
|
||||
hintStyle:
|
||||
FlutterFlowTheme.of(context).labelMedium.override(
|
||||
fontFamily: 'Plus Jakarta Sans',
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.w500,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey('Plus Jakarta Sans'),
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).accent1,
|
||||
width: 2.0,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(12.0),
|
||||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).accent3,
|
||||
width: 2.0,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(12.0),
|
||||
),
|
||||
errorBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).error,
|
||||
width: 2.0,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(12.0),
|
||||
),
|
||||
focusedErrorBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).error,
|
||||
width: 2.0,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(12.0),
|
||||
),
|
||||
filled: true,
|
||||
fillColor: FlutterFlowTheme.of(context).primaryBackground,
|
||||
contentPadding:
|
||||
const EdgeInsetsDirectional.fromSTEB(24.0, 24.0, 20.0, 24.0),
|
||||
suffixIcon: Icon(
|
||||
Icons.email,
|
||||
color: FlutterFlowTheme.of(context).accent1,
|
||||
size: 22.0,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey('Plus Jakarta Sans'),
|
||||
),
|
||||
maxLines: null,
|
||||
keyboardType: TextInputType.emailAddress,
|
||||
cursorColor: FlutterFlowTheme.of(context).primary,
|
||||
validator: _model.emailAddressTextControllerValidator
|
||||
.asValidator(context),
|
||||
),
|
||||
style: FlutterFlowTheme.of(context).bodyMedium.override(
|
||||
fontFamily: 'Plus Jakarta Sans',
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.w500,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey('Plus Jakarta Sans'),
|
||||
),
|
||||
maxLines: null,
|
||||
keyboardType: TextInputType.emailAddress,
|
||||
cursorColor: const Color(0xFF6F61EF),
|
||||
validator: _model.emailAddressTextControllerValidator
|
||||
.asValidator(context),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
@ -250,36 +248,31 @@ class _ForgotPasswordTemplateComponentWidgetState
|
|||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 24.0, 0.0, 0.0),
|
||||
child: FFButtonWidget(
|
||||
onPressed: () async {
|
||||
_model.req = await PhpGroup.forgotPasswordCall.call(
|
||||
email: _model.emailAddressTextController.text,
|
||||
);
|
||||
onPressed: (_model.emailAddressTextController.text == '' || !ValidatorUtil.isValidEmail(_model.emailAddressTextController.text))
|
||||
? null
|
||||
: () async {
|
||||
|
||||
if (PhpGroup.forgotPasswordCall.error(
|
||||
(_model.req?.jsonBody ?? ''),
|
||||
) ==
|
||||
false) {
|
||||
Navigator.pop(context);
|
||||
} else {
|
||||
await showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
enableDrag: false,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child: ThrowExceptionWidget(
|
||||
msg: PhpGroup.forgotPasswordCall.msg(
|
||||
(_model.req?.jsonBody ?? ''),
|
||||
)!,
|
||||
),
|
||||
);
|
||||
},
|
||||
).then((value) => safeSetState(() {}));
|
||||
try {
|
||||
_model.req = await PhpGroup.forgotPasswordCall.call(
|
||||
email: _model.emailAddressTextController.text,
|
||||
);
|
||||
|
||||
if (PhpGroup.forgotPasswordCall.error((_model.req?.jsonBody ?? '')) == false) {
|
||||
await DialogUtil.success(context, FFLocalizations.of(context).getVariableText(
|
||||
enText: "Send E-mail Successful!",
|
||||
ptText: "E-mail Enviado com Sucesso!"
|
||||
));
|
||||
Navigator.pop(context);
|
||||
} else {
|
||||
await DialogUtil.error(context, PhpGroup.forgotPasswordCall.msg((_model.req?.jsonBody ?? ''))!);
|
||||
}
|
||||
|
||||
setState(() {});
|
||||
|
||||
} catch (error, stack) {
|
||||
LogUtil.requestAPIFailed("iforgot.php", _model.emailAddressTextController.text, "Recuperar Senha", error, stack);
|
||||
await DialogUtil.errorDefault(context);
|
||||
}
|
||||
|
||||
setState(() {});
|
||||
},
|
||||
text: FFLocalizations.of(context).getText(
|
||||
'74rnd5bu' /* Enviar */,
|
||||
|
@ -289,24 +282,30 @@ class _ForgotPasswordTemplateComponentWidgetState
|
|||
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),
|
||||
color: const Color(0xFF1AAB5F),
|
||||
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
textStyle: FlutterFlowTheme.of(context).titleSmall.override(
|
||||
fontFamily: 'Plus Jakarta Sans',
|
||||
color: Colors.white,
|
||||
fontSize: 16.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.w500,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey('Plus Jakarta Sans'),
|
||||
),
|
||||
fontFamily: 'Plus Jakarta Sans',
|
||||
color: Colors.white,
|
||||
fontSize: 16.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.w500,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey('Plus Jakarta Sans'),
|
||||
),
|
||||
elevation: 3.0,
|
||||
borderSide: const BorderSide(
|
||||
color: Colors.transparent,
|
||||
width: 1.0,
|
||||
),
|
||||
disabledColor:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
.customColor5,
|
||||
disabledTextColor:
|
||||
Colors.white,
|
||||
),
|
||||
showLoadingIndicator: false,
|
||||
showLoadingIndicator: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
|
@ -315,4 +314,4 @@ class _ForgotPasswordTemplateComponentWidgetState
|
|||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,17 +1,21 @@
|
|||
import 'dart:developer';
|
||||
|
||||
import 'dart:typed_data';
|
||||
import 'package:hub/components/molecular_components/throw_exception/throw_exception_widget.dart';
|
||||
import 'package:hub/custom_code/actions/convert_image_file_to_base64.dart';
|
||||
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
|
||||
|
||||
import '/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 +24,116 @@ 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;
|
||||
}
|
||||
|
||||
Future<bool?> getVisitanteByDocument(
|
||||
String document, BuildContext context) async {
|
||||
final response = await PhpGroup.getVisitorByDocCall.call(
|
||||
devUUID: FFAppState().devUUID,
|
||||
userUUID: FFAppState().userUUID,
|
||||
cliID: FFAppState().cliUUID,
|
||||
atividade: 'getVisitante',
|
||||
documento: document,
|
||||
);
|
||||
log('${response.jsonBody}');
|
||||
if (response.jsonBody['visitante']['VTE_ID'] != '0' &&
|
||||
response.jsonBody['error'] != 'false') {
|
||||
return true;
|
||||
}
|
||||
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 +147,3 @@ class RegisiterVistorTemplateComponentModel
|
|||
textController4?.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -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,9 @@
|
|||
import 'package:hub/components/atomic_components/shared_components_atoms/atom_image_svg_theme.dart';
|
||||
import 'package:hub/shared/components/atoms/atom_terms_of_use.dart';
|
||||
import 'package:hub/shared/utils/dialog_util.dart';
|
||||
import 'package:hub/shared/utils/log_util.dart';
|
||||
import 'package:hub/shared/utils/validator_util.dart';
|
||||
|
||||
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';
|
||||
|
@ -93,6 +99,18 @@ class _SignInTemplateComponentWidgetState
|
|||
super.dispose();
|
||||
}
|
||||
|
||||
bool _isFormInvalid() {
|
||||
if (_model.emailAddressTextController.text == '' || _model.passwordTextController.text == '') {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!ValidatorUtil.isValidEmail(_model.emailAddressTextController.text)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Row(
|
||||
|
@ -113,8 +131,8 @@ class _SignInTemplateComponentWidgetState
|
|||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(0.0, 35.0, 0.0, 35.0),
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
0.0, 35.0, 0.0, 35.0),
|
||||
child: Container(
|
||||
width: 548.0,
|
||||
height: 112.0,
|
||||
|
@ -130,7 +148,8 @@ class _SignInTemplateComponentWidgetState
|
|||
children: [
|
||||
Expanded(
|
||||
child: Align(
|
||||
alignment: const AlignmentDirectional(0.0, 1.0),
|
||||
alignment:
|
||||
const AlignmentDirectional(0.0, 1.0),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(3.0),
|
||||
child: Text(
|
||||
|
@ -166,12 +185,7 @@ class _SignInTemplateComponentWidgetState
|
|||
decoration: const BoxDecoration(),
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(8.0),
|
||||
child: Image.network(
|
||||
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/sr43ucngg4a4/Vector.png',
|
||||
width: 603.0,
|
||||
height: 155.0,
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
child: const AtomImageSvgTheme(filename: 'login', width: 600, height: 155),
|
||||
),
|
||||
),
|
||||
Column(
|
||||
|
@ -205,13 +219,14 @@ class _SignInTemplateComponentWidgetState
|
|||
Form(
|
||||
key: _model.formKey,
|
||||
autovalidateMode:
|
||||
AutovalidateMode.always,
|
||||
AutovalidateMode.onUserInteraction,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
0.0, 0.0, 0.0, 16.0),
|
||||
child: SizedBox(
|
||||
width: double.infinity,
|
||||
|
@ -223,7 +238,8 @@ class _SignInTemplateComponentWidgetState
|
|||
onChanged: (_) =>
|
||||
EasyDebounce.debounce(
|
||||
'_model.emailAddressTextController',
|
||||
const Duration(milliseconds: 500),
|
||||
const Duration(
|
||||
milliseconds: 500),
|
||||
() => setState(() {}),
|
||||
),
|
||||
autofocus: true,
|
||||
|
@ -351,8 +367,9 @@ class _SignInTemplateComponentWidgetState
|
|||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
0.0, 0.0, 0.0, 16.0),
|
||||
child: SizedBox(
|
||||
width: double.infinity,
|
||||
|
@ -364,7 +381,8 @@ class _SignInTemplateComponentWidgetState
|
|||
onChanged: (_) =>
|
||||
EasyDebounce.debounce(
|
||||
'_model.passwordTextController',
|
||||
const Duration(milliseconds: 500),
|
||||
const Duration(
|
||||
milliseconds: 500),
|
||||
() => setState(() {}),
|
||||
),
|
||||
autofocus: true,
|
||||
|
@ -417,7 +435,8 @@ class _SignInTemplateComponentWidgetState
|
|||
),
|
||||
focusedBorder:
|
||||
OutlineInputBorder(
|
||||
borderSide: const BorderSide(
|
||||
borderSide:
|
||||
const BorderSide(
|
||||
color:
|
||||
Color(0xFF1AAB5F),
|
||||
width: 0.25,
|
||||
|
@ -428,7 +447,8 @@ class _SignInTemplateComponentWidgetState
|
|||
),
|
||||
errorBorder:
|
||||
OutlineInputBorder(
|
||||
borderSide: const BorderSide(
|
||||
borderSide:
|
||||
const BorderSide(
|
||||
color:
|
||||
Color(0xFFFF5963),
|
||||
width: 0.25,
|
||||
|
@ -439,7 +459,8 @@ class _SignInTemplateComponentWidgetState
|
|||
),
|
||||
focusedErrorBorder:
|
||||
OutlineInputBorder(
|
||||
borderSide: const BorderSide(
|
||||
borderSide:
|
||||
const BorderSide(
|
||||
color:
|
||||
Color(0xFFFF5963),
|
||||
width: 0.25,
|
||||
|
@ -514,16 +535,12 @@ class _SignInTemplateComponentWidgetState
|
|||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
0.0, 0.0, 0.0, 16.0),
|
||||
child: FFButtonWidget(
|
||||
onPressed: ((_model.emailAddressTextController
|
||||
.text ==
|
||||
'') &&
|
||||
(_model.passwordTextController
|
||||
.text ==
|
||||
''))
|
||||
onPressed: _isFormInvalid()
|
||||
? null
|
||||
: () async {
|
||||
await action_blocks
|
||||
|
@ -548,18 +565,12 @@ class _SignInTemplateComponentWidgetState
|
|||
height: 44.0,
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0),
|
||||
.fromSTEB(0.0,
|
||||
0.0, 0.0, 0.0),
|
||||
iconPadding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0),
|
||||
.fromSTEB(0.0,
|
||||
0.0, 0.0, 0.0),
|
||||
color:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
|
@ -586,7 +597,8 @@ class _SignInTemplateComponentWidgetState
|
|||
'Plus Jakarta Sans'),
|
||||
),
|
||||
elevation: 3.0,
|
||||
borderSide: const BorderSide(
|
||||
borderSide:
|
||||
const BorderSide(
|
||||
color:
|
||||
Colors.transparent,
|
||||
width: 1.0,
|
||||
|
@ -605,8 +617,9 @@ class _SignInTemplateComponentWidgetState
|
|||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
0.0, 0.0, 0.0, 16.0),
|
||||
child: FFButtonWidget(
|
||||
onPressed: () async {
|
||||
|
@ -624,18 +637,12 @@ class _SignInTemplateComponentWidgetState
|
|||
height: 44.0,
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0),
|
||||
.fromSTEB(0.0,
|
||||
0.0, 0.0, 0.0),
|
||||
iconPadding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0),
|
||||
.fromSTEB(0.0,
|
||||
0.0, 0.0, 0.0),
|
||||
color:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
|
@ -662,7 +669,8 @@ class _SignInTemplateComponentWidgetState
|
|||
'Plus Jakarta Sans'),
|
||||
),
|
||||
elevation: 3.0,
|
||||
borderSide: const BorderSide(
|
||||
borderSide:
|
||||
const BorderSide(
|
||||
color:
|
||||
Colors.transparent,
|
||||
width: 1.0,
|
||||
|
@ -687,36 +695,27 @@ class _SignInTemplateComponentWidgetState
|
|||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(0.0, 0.0,
|
||||
0.0, 16.0),
|
||||
0.0, 16.0),
|
||||
child: FFButtonWidget(
|
||||
onPressed: (((_model.emailAddressTextController
|
||||
.text ==
|
||||
'') ||
|
||||
((_model.emailAddressFocusNode
|
||||
?.hasFocus ??
|
||||
false) !=
|
||||
null)) &&
|
||||
((_model.emailAddressTextController
|
||||
.text ==
|
||||
'') ||
|
||||
((_model.passwordTextController.text ==
|
||||
'') ||
|
||||
((_model.passwordFocusNode?.hasFocus ??
|
||||
false) !=
|
||||
null))))
|
||||
onPressed: _isFormInvalid()
|
||||
? null
|
||||
: () async {
|
||||
await action_blocks
|
||||
.singInLoginAction(
|
||||
context,
|
||||
emailAdress: _model
|
||||
.emailAddressTextController
|
||||
.text,
|
||||
password: _model
|
||||
.passwordTextController
|
||||
.text,
|
||||
);
|
||||
setState(() {});
|
||||
try {
|
||||
await action_blocks
|
||||
.singInLoginAction(
|
||||
context,
|
||||
emailAdress: _model
|
||||
.emailAddressTextController
|
||||
.text,
|
||||
password: _model
|
||||
.passwordTextController
|
||||
.text,
|
||||
);
|
||||
setState(() {});
|
||||
} catch (e, s) {
|
||||
await DialogUtil.errorDefault(context);
|
||||
LogUtil.requestAPIFailed('login.php', _model.emailAddressTextController.text, "Login", e, s);
|
||||
}
|
||||
},
|
||||
text: FFLocalizations.of(
|
||||
context)
|
||||
|
@ -728,18 +727,12 @@ class _SignInTemplateComponentWidgetState
|
|||
height: 44.0,
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0),
|
||||
.fromSTEB(0.0,
|
||||
0.0, 0.0, 0.0),
|
||||
iconPadding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0),
|
||||
.fromSTEB(0.0,
|
||||
0.0, 0.0, 0.0),
|
||||
color:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
|
@ -767,7 +760,8 @@ class _SignInTemplateComponentWidgetState
|
|||
'Plus Jakarta Sans'),
|
||||
),
|
||||
elevation: 3.0,
|
||||
borderSide: const BorderSide(
|
||||
borderSide:
|
||||
const BorderSide(
|
||||
color: Colors
|
||||
.transparent,
|
||||
width: 1.0,
|
||||
|
@ -776,10 +770,10 @@ class _SignInTemplateComponentWidgetState
|
|||
BorderRadius
|
||||
.circular(12.0),
|
||||
disabledColor:
|
||||
const Color(0xE81AAB5F),
|
||||
const Color(
|
||||
0xE81AAB5F),
|
||||
),
|
||||
showLoadingIndicator:
|
||||
false,
|
||||
showLoadingIndicator: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
|
@ -788,7 +782,7 @@ class _SignInTemplateComponentWidgetState
|
|||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(0.0, 0.0,
|
||||
0.0, 16.0),
|
||||
0.0, 16.0),
|
||||
child: FFButtonWidget(
|
||||
onPressed: () async {
|
||||
await widget
|
||||
|
@ -805,18 +799,12 @@ class _SignInTemplateComponentWidgetState
|
|||
height: 44.0,
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0),
|
||||
.fromSTEB(0.0,
|
||||
0.0, 0.0, 0.0),
|
||||
iconPadding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0),
|
||||
.fromSTEB(0.0,
|
||||
0.0, 0.0, 0.0),
|
||||
color:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
|
@ -844,7 +832,8 @@ class _SignInTemplateComponentWidgetState
|
|||
'Plus Jakarta Sans'),
|
||||
),
|
||||
elevation: 3.0,
|
||||
borderSide: const BorderSide(
|
||||
borderSide:
|
||||
const BorderSide(
|
||||
color: Colors
|
||||
.transparent,
|
||||
width: 1.0,
|
||||
|
@ -858,7 +847,8 @@ class _SignInTemplateComponentWidgetState
|
|||
),
|
||||
),
|
||||
),
|
||||
].divide(const SizedBox(width: 7.0)),
|
||||
].divide(
|
||||
const SizedBox(width: 7.0)),
|
||||
);
|
||||
}
|
||||
},
|
||||
|
@ -866,8 +856,8 @@ class _SignInTemplateComponentWidgetState
|
|||
|
||||
// You will have to add an action on this rich text to go to your login page.
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
0.0, 12.0, 0.0, 12.0),
|
||||
padding: const EdgeInsetsDirectional
|
||||
.fromSTEB(0.0, 12.0, 0.0, 12.0),
|
||||
child: InkWell(
|
||||
splashColor: Colors.transparent,
|
||||
focusColor: Colors.transparent,
|
||||
|
@ -876,21 +866,15 @@ class _SignInTemplateComponentWidgetState
|
|||
onTap: () async {
|
||||
await showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
backgroundColor:
|
||||
Colors.transparent,
|
||||
enableDrag: false,
|
||||
backgroundColor: Colors.transparent,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding:
|
||||
MediaQuery.viewInsetsOf(
|
||||
context),
|
||||
child:
|
||||
const ForgotPasswordTemplateComponentWidget(),
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child: const ForgotPasswordTemplateComponentWidget(),
|
||||
);
|
||||
},
|
||||
).then(
|
||||
(value) => safeSetState(() {}));
|
||||
).then((value) => safeSetState(() {}));
|
||||
},
|
||||
child: RichText(
|
||||
textScaler: MediaQuery.of(context)
|
||||
|
@ -936,29 +920,23 @@ class _SignInTemplateComponentWidgetState
|
|||
),
|
||||
mouseCursor:
|
||||
SystemMouseCursors.click,
|
||||
recognizer:
|
||||
TapGestureRecognizer()
|
||||
..onTap = () async {
|
||||
await showModalBottomSheet(
|
||||
isScrollControlled:
|
||||
true,
|
||||
backgroundColor:
|
||||
Colors
|
||||
.transparent,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding: MediaQuery
|
||||
.viewInsetsOf(
|
||||
context),
|
||||
child:
|
||||
const ForgotPasswordTemplateComponentWidget(),
|
||||
);
|
||||
},
|
||||
).then((value) =>
|
||||
safeSetState(
|
||||
() {}));
|
||||
},
|
||||
// recognizer: TapGestureRecognizer()
|
||||
// ..onTap = () async {
|
||||
// await showModalBottomSheet(
|
||||
// isScrollControlled: true,
|
||||
// backgroundColor: Colors.transparent,
|
||||
// context: context,
|
||||
// useRootNavigator: true,
|
||||
// builder: (context) {
|
||||
// return Padding(
|
||||
// padding: MediaQuery.viewInsetsOf(context),
|
||||
// child: const ForgotPasswordTemplateComponentWidget(),
|
||||
// );
|
||||
// },
|
||||
// ).then((value) =>
|
||||
// safeSetState(
|
||||
// () {}));
|
||||
// },
|
||||
)
|
||||
],
|
||||
style:
|
||||
|
@ -981,29 +959,7 @@ class _SignInTemplateComponentWidgetState
|
|||
),
|
||||
),
|
||||
),
|
||||
Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'olf967cj' /* Termo de Uso */,
|
||||
),
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily,
|
||||
color:
|
||||
FlutterFlowTheme.of(context)
|
||||
.primaryText,
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts
|
||||
.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
.bodyMediumFamily),
|
||||
),
|
||||
),
|
||||
const AtomTermsOfUse(),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
|
@ -101,8 +101,7 @@ class _ViewVisitDetailWidgetState extends State<ViewVisitDetailWidget> {
|
|||
TextEditingController(text: widget.visitStartDate);
|
||||
_model.textFieldFocusNode2 ??= FocusNode();
|
||||
|
||||
_model.textController3 ??=
|
||||
TextEditingController(text: widget.visitEndDate);
|
||||
_model.textController3 ??= TextEditingController(text: widget.visitEndDate);
|
||||
_model.textFieldFocusNode3 ??= FocusNode();
|
||||
|
||||
_model.textController4 ??=
|
||||
|
@ -212,20 +211,26 @@ class _ViewVisitDetailWidgetState extends State<ViewVisitDetailWidget> {
|
|||
hoverColor: Colors.transparent,
|
||||
highlightColor: Colors.transparent,
|
||||
onTap: () async {
|
||||
Navigator.pop(context);
|
||||
await showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
useSafeArea: true,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child:
|
||||
const VisitorDetailsModalTemplateComponentWidget(),
|
||||
);
|
||||
},
|
||||
).then((value) => safeSetState(() {}));
|
||||
// Navigator.pop(context);
|
||||
// await showModalBottomSheet(
|
||||
// isScrollControlled: true,
|
||||
// backgroundColor: Colors.transparent,
|
||||
// useSafeArea: true,
|
||||
// context: context,
|
||||
// builder: (context) {
|
||||
// return Padding(
|
||||
// padding: MediaQuery.viewInsetsOf(context),
|
||||
// child:
|
||||
// const VisitorDetailsModalTemplateComponentWidget(
|
||||
// visitorImageURL: '',
|
||||
// visitorEmail: '',
|
||||
// visitorName: '',
|
||||
// visitorPhone: '',
|
||||
// visitorType: '',
|
||||
// ),
|
||||
// );
|
||||
// },
|
||||
// ).then((value) => safeSetState(() {}));
|
||||
},
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(100.0),
|
||||
|
@ -870,7 +875,6 @@ class _ViewVisitDetailWidgetState extends State<ViewVisitDetailWidget> {
|
|||
Share.share(
|
||||
'Visita agendada para ${widget.visitStartDate} com término previsto para ${widget.visitEndDate}. Motivo: ${widget.visitReasonStr}. Nível de acesso: ${widget.visitLevelStr}. Observações: ${widget.visitObsStr}.',
|
||||
);
|
||||
|
||||
},
|
||||
),
|
||||
],
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
|
||||
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hub/components/organism_components/schedule_visit_detail/schedule_visit_detail_widget.dart';
|
||||
import 'package:hub/components/templates_components/view_visit_detail/view_visit_detail_widget.dart';
|
||||
|
@ -74,50 +71,47 @@ class _VisitDetailsModalTemplateComponentWidgetState
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Align(
|
||||
alignment: const AlignmentDirectional(0.0, 1.0),
|
||||
child: Builder(
|
||||
builder: (context) {
|
||||
if (widget.visitStatusStr != null && widget.visitStatusStr != '') {
|
||||
return wrapWithModel(
|
||||
model: _model.viewVisitDetailModel,
|
||||
updateCallback: () => setState(() {}),
|
||||
updateOnChange: true,
|
||||
child: ViewVisitDetailWidget(
|
||||
visitorImgPath: widget.visitorImgPath,
|
||||
visitStartDate: widget.visitStartDateStr!,
|
||||
visitEndDate: widget.visitEndDateStr!,
|
||||
visitReasonStr: widget.visitReasonStr!,
|
||||
visitLevelStr: widget.visitLevelStr!,
|
||||
visitTempStr: widget.visitTempStr!,
|
||||
visitObsStr: widget.visitObsStr!,
|
||||
visitStatusStr: widget.visitStatusStr!,
|
||||
visitorStrList: widget.visitorStrList!,
|
||||
visitorJsonList: widget.visitorJsonList,
|
||||
visitIdStr: widget.visitIdStr!,
|
||||
visitStatusColor: widget.visitStatusColor!,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return wrapWithModel(
|
||||
model: _model.scheduleVisitDetailModel,
|
||||
updateCallback: () => setState(() {}),
|
||||
updateOnChange: true,
|
||||
child: ScheduleVisitDetailWidget(
|
||||
visitorStrList: widget.visitorStrList!,
|
||||
visitorImgPath: widget.visitorImgPath,
|
||||
visitStartDate: widget.visitStartDateStr!,
|
||||
visitEndDate: widget.visitEndDateStr!,
|
||||
visitResonStr: widget.visitReasonStr!,
|
||||
visitLevelStr: widget.visitLevelStr!,
|
||||
visitTempStr: widget.visitTempStr!,
|
||||
visitObsStr: widget.visitObsStr!,
|
||||
visitorJsonList: widget.visitorJsonList!,
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
return Builder(
|
||||
builder: (context) {
|
||||
if (widget.visitStatusStr != null && widget.visitStatusStr != '') {
|
||||
return wrapWithModel(
|
||||
model: _model.viewVisitDetailModel,
|
||||
updateCallback: () => setState(() {}),
|
||||
updateOnChange: true,
|
||||
child: ViewVisitDetailWidget(
|
||||
visitorImgPath: widget.visitorImgPath,
|
||||
visitStartDate: widget.visitStartDateStr!,
|
||||
visitEndDate: widget.visitEndDateStr!,
|
||||
visitReasonStr: widget.visitReasonStr!,
|
||||
visitLevelStr: widget.visitLevelStr!,
|
||||
visitTempStr: widget.visitTempStr!,
|
||||
visitObsStr: widget.visitObsStr!,
|
||||
visitStatusStr: widget.visitStatusStr!,
|
||||
visitorStrList: widget.visitorStrList!,
|
||||
visitorJsonList: widget.visitorJsonList,
|
||||
visitIdStr: widget.visitIdStr!,
|
||||
visitStatusColor: widget.visitStatusColor!,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return wrapWithModel(
|
||||
model: _model.scheduleVisitDetailModel,
|
||||
updateCallback: () => setState(() {}),
|
||||
updateOnChange: true,
|
||||
child: ScheduleVisitDetailWidget(
|
||||
visitorStrList: widget.visitorStrList!,
|
||||
visitorImgPath: widget.visitorImgPath,
|
||||
visitStartDate: widget.visitStartDateStr!,
|
||||
visitEndDate: widget.visitEndDateStr!,
|
||||
visitResonStr: widget.visitReasonStr!,
|
||||
visitLevelStr: widget.visitLevelStr!,
|
||||
visitTempStr: widget.visitTempStr!,
|
||||
visitObsStr: widget.visitObsStr!,
|
||||
visitorJsonList: widget.visitorJsonList!,
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,19 @@ import 'visitor_details_modal_template_component_model.dart';
|
|||
export 'visitor_details_modal_template_component_model.dart';
|
||||
|
||||
class VisitorDetailsModalTemplateComponentWidget extends StatefulWidget {
|
||||
const VisitorDetailsModalTemplateComponentWidget({super.key});
|
||||
const VisitorDetailsModalTemplateComponentWidget(
|
||||
{super.key,
|
||||
required this.visitorImageURL,
|
||||
required this.visitorName,
|
||||
required this.visitorType,
|
||||
required this.visitorPhone,
|
||||
required this.visitorEmail});
|
||||
|
||||
final String? visitorImageURL;
|
||||
final String? visitorName;
|
||||
final String? visitorType;
|
||||
final String? visitorPhone;
|
||||
final String? visitorEmail;
|
||||
|
||||
@override
|
||||
State<VisitorDetailsModalTemplateComponentWidget> createState() =>
|
||||
|
@ -50,20 +62,40 @@ class _VisitorDetailsModalTemplateComponentWidgetState
|
|||
color: FlutterFlowTheme.of(context).primaryBackground,
|
||||
borderRadius: BorderRadius.circular(25.0),
|
||||
),
|
||||
child: Stack(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(0.0, 1.0),
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
height: 34.0,
|
||||
decoration: BoxDecoration(
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(0.0),
|
||||
bottomRight: Radius.circular(0.0),
|
||||
topLeft: Radius.circular(0.0),
|
||||
topRight: Radius.circular(0.0),
|
||||
Container(
|
||||
width: double.infinity,
|
||||
height: 34.0,
|
||||
decoration: BoxDecoration(
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(0.0),
|
||||
bottomRight: Radius.circular(0.0),
|
||||
topLeft: Radius.circular(25.0),
|
||||
topRight: Radius.circular(25.0),
|
||||
),
|
||||
shape: BoxShape.rectangle,
|
||||
),
|
||||
child: Align(
|
||||
alignment: const AlignmentDirectional(1.0, -1.0),
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
10.0, 5.0, 15.0, 0.0),
|
||||
child: InkWell(
|
||||
splashColor: Colors.transparent,
|
||||
focusColor: Colors.transparent,
|
||||
hoverColor: Colors.transparent,
|
||||
highlightColor: Colors.transparent,
|
||||
onTap: () async {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: Icon(
|
||||
Icons.close,
|
||||
color: FlutterFlowTheme.of(context).primaryBackground,
|
||||
size: 24.0,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
@ -71,68 +103,99 @@ class _VisitorDetailsModalTemplateComponentWidgetState
|
|||
Align(
|
||||
alignment: const AlignmentDirectional(0.0, -1.0),
|
||||
child: Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(20.0, 40.0, 20.0, 0.0),
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
20.0, 40.0, 20.0, 0.0),
|
||||
child: Container(
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.rectangle,
|
||||
),
|
||||
child: Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
0.0, 10.0, 0.0, 0.0),
|
||||
child: Column(
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
0.0, 10.0, 0.0, 0.0),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
if (widget.visitorImageURL != '' &&
|
||||
widget.visitorImageURL != null)
|
||||
Container(
|
||||
width: 100.0,
|
||||
height: 100.0,
|
||||
clipBehavior: Clip.antiAlias,
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
),
|
||||
child: Image.network(
|
||||
widget.visitorImageURL!,
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(0.0, 0.0),
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
20.0, 0.0, 20.0, 0.0),
|
||||
child: Text(
|
||||
widget.visitorName ?? '',
|
||||
textAlign: TextAlign.start,
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
.override(
|
||||
fontFamily: FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily,
|
||||
fontSize: 24.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.bold,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(0.0, 0.0),
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
20.0, 0.0, 20.0, 30.0),
|
||||
child: Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'hz7ivuqn' /* Tipo de Visitante */,
|
||||
),
|
||||
textAlign: TextAlign.start,
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
.override(
|
||||
fontFamily: FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.bold,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: 100.0,
|
||||
height: 100.0,
|
||||
clipBehavior: Clip.antiAlias,
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
),
|
||||
child: Image.network(
|
||||
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/7ftdetkzc3s0/360_F_64676383_LdbmhiNM6Ypzb3FM4PPuFP9rHe7ri8Ju.jpg',
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
Icon(
|
||||
Icons.phone,
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
size: 24.0,
|
||||
),
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(0.0, 0.0),
|
||||
alignment:
|
||||
const AlignmentDirectional(-1.0, 0.0),
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
20.0, 0.0, 20.0, 0.0),
|
||||
child: Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'kqzf7nx2' /* Nome do Visitante */,
|
||||
),
|
||||
textAlign: TextAlign.start,
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily,
|
||||
fontSize: 24.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.bold,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(0.0, 0.0),
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
20.0, 0.0, 20.0, 30.0),
|
||||
child: Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'hz7ivuqn' /* Tipo de Visitante */,
|
||||
'rwqn0det' /* (00) 0 0000-0000 */,
|
||||
),
|
||||
textAlign: TextAlign.start,
|
||||
style: FlutterFlowTheme.of(context)
|
||||
|
@ -151,128 +214,67 @@ class _VisitorDetailsModalTemplateComponentWidgetState
|
|||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Icon(
|
||||
Icons.phone,
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
size: 24.0,
|
||||
),
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(-1.0, 0.0),
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
20.0, 0.0, 20.0, 0.0),
|
||||
child: Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'rwqn0det' /* (00) 0 0000-0000 */,
|
||||
),
|
||||
textAlign: TextAlign.start,
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.bold,
|
||||
useGoogleFonts: GoogleFonts
|
||||
.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
.bodyMediumFamily),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Icon(
|
||||
Icons.email,
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
size: 24.0,
|
||||
),
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(-1.0, 0.0),
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
20.0, 0.0, 20.0, 0.0),
|
||||
child: Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'0wqbiekp' /* email@provider.etc */,
|
||||
),
|
||||
textAlign: TextAlign.start,
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.bold,
|
||||
useGoogleFonts: GoogleFonts
|
||||
.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
.bodyMediumFamily),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(-1.0, -1.0),
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
height: 34.0,
|
||||
decoration: BoxDecoration(
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(0.0),
|
||||
bottomRight: Radius.circular(0.0),
|
||||
topLeft: Radius.circular(25.0),
|
||||
topRight: Radius.circular(25.0),
|
||||
),
|
||||
shape: BoxShape.rectangle,
|
||||
),
|
||||
child: Align(
|
||||
alignment: const AlignmentDirectional(1.0, -1.0),
|
||||
child: Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(10.0, 5.0, 15.0, 0.0),
|
||||
child: InkWell(
|
||||
splashColor: Colors.transparent,
|
||||
focusColor: Colors.transparent,
|
||||
hoverColor: Colors.transparent,
|
||||
highlightColor: Colors.transparent,
|
||||
onTap: () async {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: Icon(
|
||||
Icons.close,
|
||||
color: FlutterFlowTheme.of(context).primaryBackground,
|
||||
size: 24.0,
|
||||
),
|
||||
Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Icon(
|
||||
Icons.email,
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
size: 24.0,
|
||||
),
|
||||
Align(
|
||||
alignment:
|
||||
const AlignmentDirectional(-1.0, 0.0),
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
20.0, 0.0, 20.0, 0.0),
|
||||
child: Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'0wqbiekp' /* email@provider.etc */,
|
||||
),
|
||||
textAlign: TextAlign.start,
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.bold,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
// Align(
|
||||
// alignment: const AlignmentDirectional(0.0, 1.0),
|
||||
// child: Container(
|
||||
// width: double.infinity,
|
||||
// height: 34.0,
|
||||
// decoration: BoxDecoration(
|
||||
// color: FlutterFlowTheme.of(context).primaryText,
|
||||
// borderRadius: const BorderRadius.only(
|
||||
// bottomLeft: Radius.circular(0.0),
|
||||
// bottomRight: Radius.circular(0.0),
|
||||
// topLeft: Radius.circular(0.0),
|
||||
// topRight: Radius.circular(0.0),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
|
@ -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';
|
||||
|
@ -50,12 +47,6 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
|
||||
_model.textController ??= TextEditingController();
|
||||
_model.textFieldFocusNode ??= FocusNode();
|
||||
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {
|
||||
_model.textController?.text = FFLocalizations.of(context).getText(
|
||||
'oj12tamm' /* test */,
|
||||
);
|
||||
}));
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -69,171 +60,168 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
Widget build(BuildContext context) {
|
||||
context.watch<FFAppState>();
|
||||
|
||||
return Align(
|
||||
alignment: const AlignmentDirectional(0.0, 0.0),
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 300.0, 0.0, 0.0),
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
color: FlutterFlowTheme.of(context).primaryBackground,
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(0.0),
|
||||
bottomRight: Radius.circular(0.0),
|
||||
topLeft: Radius.circular(15.0),
|
||||
topRight: Radius.circular(15.0),
|
||||
),
|
||||
return Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 50.0, 0.0, 0.0),
|
||||
child: Container(
|
||||
width: MediaQuery.of(context).size.width,
|
||||
decoration: BoxDecoration(
|
||||
color: FlutterFlowTheme.of(context).primaryBackground,
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(0.0),
|
||||
bottomRight: Radius.circular(0.0),
|
||||
topLeft: Radius.circular(15.0),
|
||||
topRight: Radius.circular(15.0),
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(16.0, 10.0, 16.0, 0.0),
|
||||
child: TextFormField(
|
||||
controller: _model.textController,
|
||||
focusNode: _model.textFieldFocusNode,
|
||||
onFieldSubmitted: (_) async {
|
||||
setState(() {
|
||||
_model.textController?.text = valueOrDefault<String>(
|
||||
_model.textController.text,
|
||||
'69696777',
|
||||
);
|
||||
_model.textController?.selection =
|
||||
TextSelection.collapsed(
|
||||
offset: _model.textController!.text.length);
|
||||
});
|
||||
_model.getVisitorByDoc =
|
||||
await PhpGroup.getVisitorByDocCall.call(
|
||||
devUUID: FFAppState().devUUID,
|
||||
userUUID: FFAppState().userUUID,
|
||||
cliID: FFAppState().cliUUID,
|
||||
atividade: 'getVisitante',
|
||||
documento: _model.textController.text,
|
||||
);
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(16.0, 10.0, 16.0, 0.0),
|
||||
child: TextFormField(
|
||||
controller: _model.textController,
|
||||
focusNode: _model.textFieldFocusNode,
|
||||
onFieldSubmitted: (_) async {
|
||||
setState(() {
|
||||
_model.textController?.text = _model.textController.text;
|
||||
_model.textController?.selection = TextSelection.collapsed(
|
||||
offset: _model.textController!.text.length);
|
||||
});
|
||||
_model.getVisitorByDoc =
|
||||
await PhpGroup.getVisitorByDocCall.call(
|
||||
devUUID: FFAppState().devUUID,
|
||||
userUUID: FFAppState().userUUID,
|
||||
cliID: FFAppState().cliUUID,
|
||||
atividade: 'getVisitante',
|
||||
documento: _model.textController.text,
|
||||
);
|
||||
|
||||
if (PhpGroup.getVisitorByDocCall.vistanteId(
|
||||
(_model.getVisitorByDoc?.jsonBody ?? ''),
|
||||
) !=
|
||||
'0') {
|
||||
_model
|
||||
.addToVisitors(PhpGroup.getVisitorByDocCall.visitante(
|
||||
if (PhpGroup.getVisitorByDocCall.vistanteId(
|
||||
(_model.getVisitorByDoc?.jsonBody ?? ''),
|
||||
));
|
||||
setState(() {});
|
||||
_model.addToDocs(_model.textController.text);
|
||||
setState(() {});
|
||||
} else {
|
||||
await showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child: const VisitorNotFoundComponentWidget(),
|
||||
);
|
||||
},
|
||||
).then((value) => safeSetState(() {}));
|
||||
}
|
||||
|
||||
) !=
|
||||
'0') {
|
||||
_model.addToVisitors(PhpGroup.getVisitorByDocCall.visitante(
|
||||
(_model.getVisitorByDoc?.jsonBody ?? ''),
|
||||
));
|
||||
setState(() {});
|
||||
},
|
||||
autofocus: false,
|
||||
textInputAction: TextInputAction.done,
|
||||
obscureText: false,
|
||||
decoration: InputDecoration(
|
||||
isDense: false,
|
||||
labelText: FFLocalizations.of(context).getText(
|
||||
'cjlpru1m' /* Procure pelo documento do visi... */,
|
||||
),
|
||||
labelStyle: FlutterFlowTheme.of(context)
|
||||
.labelMedium
|
||||
.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context).labelMediumFamily,
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context).labelMediumFamily),
|
||||
),
|
||||
hintText: FFLocalizations.of(context).getText(
|
||||
'8i1qszba' /* test */,
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).accent1,
|
||||
width: 0.5,
|
||||
),
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(15.0),
|
||||
bottomRight: Radius.circular(15.0),
|
||||
topLeft: Radius.circular(15.0),
|
||||
topRight: Radius.circular(15.0),
|
||||
),
|
||||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
width: 0.5,
|
||||
),
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(15.0),
|
||||
bottomRight: Radius.circular(15.0),
|
||||
topLeft: Radius.circular(15.0),
|
||||
topRight: Radius.circular(15.0),
|
||||
),
|
||||
),
|
||||
errorBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).error,
|
||||
width: 0.5,
|
||||
),
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(15.0),
|
||||
bottomRight: Radius.circular(15.0),
|
||||
topLeft: Radius.circular(15.0),
|
||||
topRight: Radius.circular(15.0),
|
||||
),
|
||||
),
|
||||
focusedErrorBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).error,
|
||||
width: 0.5,
|
||||
),
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(15.0),
|
||||
bottomRight: Radius.circular(15.0),
|
||||
topLeft: Radius.circular(15.0),
|
||||
topRight: Radius.circular(15.0),
|
||||
),
|
||||
),
|
||||
filled: true,
|
||||
fillColor: FlutterFlowTheme.of(context).primaryBackground,
|
||||
prefixIcon: Icon(
|
||||
Icons.search_outlined,
|
||||
color: FlutterFlowTheme.of(context).accent1,
|
||||
),
|
||||
_model.addToDocs(_model.textController.text);
|
||||
setState(() {});
|
||||
} else {
|
||||
await showAdaptiveDialog(
|
||||
useSafeArea: true,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Dialog(
|
||||
child: Padding(
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child: Container(
|
||||
color: Colors.transparent,
|
||||
// width: MediaQuery.of(context).size.height * 0.1,
|
||||
// height:
|
||||
// MediaQuery.of(context).size.height * 0.4,
|
||||
child: const VisitorNotFoundComponentWidget()),
|
||||
),
|
||||
);
|
||||
},
|
||||
).then((value) => safeSetState(() {}));
|
||||
}
|
||||
|
||||
setState(() {});
|
||||
},
|
||||
autofocus: false,
|
||||
textInputAction: TextInputAction.done,
|
||||
obscureText: false,
|
||||
decoration: InputDecoration(
|
||||
isDense: false,
|
||||
labelText: FFLocalizations.of(context).getText(
|
||||
'cjlpru1m' /* Procure pelo documento do visi... */,
|
||||
),
|
||||
style: FlutterFlowTheme.of(context).bodyMedium.override(
|
||||
labelStyle: FlutterFlowTheme.of(context).labelMedium.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context).bodyMediumFamily,
|
||||
FlutterFlowTheme.of(context).labelMediumFamily,
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context).bodyMediumFamily),
|
||||
FlutterFlowTheme.of(context).labelMediumFamily),
|
||||
),
|
||||
keyboardType: TextInputType.number,
|
||||
validator:
|
||||
_model.textControllerValidator.asValidator(context),
|
||||
hintText: FFLocalizations.of(context).getText(
|
||||
'8i1qszba' /* test */,
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).accent1,
|
||||
width: 0.5,
|
||||
),
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(15.0),
|
||||
bottomRight: Radius.circular(15.0),
|
||||
topLeft: Radius.circular(15.0),
|
||||
topRight: Radius.circular(15.0),
|
||||
),
|
||||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
width: 0.5,
|
||||
),
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(15.0),
|
||||
bottomRight: Radius.circular(15.0),
|
||||
topLeft: Radius.circular(15.0),
|
||||
topRight: Radius.circular(15.0),
|
||||
),
|
||||
),
|
||||
errorBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).error,
|
||||
width: 0.5,
|
||||
),
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(15.0),
|
||||
bottomRight: Radius.circular(15.0),
|
||||
topLeft: Radius.circular(15.0),
|
||||
topRight: Radius.circular(15.0),
|
||||
),
|
||||
),
|
||||
focusedErrorBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).error,
|
||||
width: 0.5,
|
||||
),
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(15.0),
|
||||
bottomRight: Radius.circular(15.0),
|
||||
topLeft: Radius.circular(15.0),
|
||||
topRight: Radius.circular(15.0),
|
||||
),
|
||||
),
|
||||
filled: true,
|
||||
fillColor: FlutterFlowTheme.of(context).primaryBackground,
|
||||
prefixIcon: Icon(
|
||||
Icons.search_outlined,
|
||||
color: FlutterFlowTheme.of(context).accent1,
|
||||
),
|
||||
),
|
||||
style: FlutterFlowTheme.of(context).bodyMedium.override(
|
||||
fontFamily: FlutterFlowTheme.of(context).bodyMediumFamily,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context).bodyMediumFamily),
|
||||
),
|
||||
keyboardType: TextInputType.number,
|
||||
validator: _model.textControllerValidator.asValidator(context),
|
||||
),
|
||||
),
|
||||
if (_model.visitors.isNotEmpty && _model.visitors.length > 0)
|
||||
Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(16.0, 12.0, 0.0, 0.0),
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
16.0, 12.0, 0.0, 0.0),
|
||||
child: Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'9coywebh' /* Visitantes encontrados */,
|
||||
|
@ -249,12 +237,10 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
),
|
||||
),
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(4.0, 12.0, 16.0, 0.0),
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
4.0, 12.0, 16.0, 0.0),
|
||||
child: Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'6f5p0fv6' /* 24 */,
|
||||
),
|
||||
_model.visitors.length.toString(),
|
||||
style: FlutterFlowTheme.of(context).bodyMedium.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context).bodyMediumFamily,
|
||||
|
@ -266,273 +252,231 @@ class _VisitorSearchModalTemplateComponentWidgetState
|
|||
),
|
||||
],
|
||||
),
|
||||
Expanded(
|
||||
child: Builder(
|
||||
builder: (context) {
|
||||
if (_model.visitors.isNotEmpty) {
|
||||
return Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(8.0, 8.0, 8.0, 0.0),
|
||||
child: Builder(
|
||||
builder: (context) {
|
||||
final visitor =
|
||||
_model.visitors.map((e) => e).toList();
|
||||
|
||||
return ListView.builder(
|
||||
padding: EdgeInsets.zero,
|
||||
scrollDirection: Axis.vertical,
|
||||
itemCount: visitor.length,
|
||||
itemBuilder: (context, visitorIndex) {
|
||||
final visitorItem = visitor[visitorIndex];
|
||||
return Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
0.0, 0.0, 0.0, 1.0),
|
||||
child: InkWell(
|
||||
splashColor: Colors.transparent,
|
||||
focusColor: Colors.transparent,
|
||||
hoverColor: Colors.transparent,
|
||||
highlightColor: Colors.transparent,
|
||||
onTap: () async {
|
||||
await showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
enableDrag: false,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding: MediaQuery.viewInsetsOf(
|
||||
context),
|
||||
child: const SizedBox(
|
||||
height: 610.0,
|
||||
child:
|
||||
VisitorDetailsModalTemplateComponentWidget(),
|
||||
Expanded(
|
||||
child: Builder(
|
||||
builder: (context) {
|
||||
if (_model.visitors.isNotEmpty) {
|
||||
return Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
8.0, 8.0, 8.0, 0.0),
|
||||
child: Builder(
|
||||
builder: (context) {
|
||||
final visitor =
|
||||
_model.visitors.map((e) => e).toList();
|
||||
return ListView.builder(
|
||||
padding: EdgeInsets.zero,
|
||||
scrollDirection: Axis.vertical,
|
||||
itemCount: visitor.length,
|
||||
itemBuilder: (context, visitorIndex) {
|
||||
final visitorItem = visitor[visitorIndex];
|
||||
return Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
0.0, 0.0, 0.0, 1.0),
|
||||
child: InkWell(
|
||||
splashColor: Colors.transparent,
|
||||
focusColor: Colors.transparent,
|
||||
hoverColor: Colors.transparent,
|
||||
highlightColor: Colors.transparent,
|
||||
onTap: () async {
|
||||
// await showModalBottomSheet(
|
||||
// isScrollControlled: true,
|
||||
// enableDrag: true,
|
||||
// isDismissible: true,
|
||||
// context: context,
|
||||
// builder: (context) {
|
||||
// return Padding(
|
||||
// padding:
|
||||
// MediaQuery.viewInsetsOf(context),
|
||||
// child: SizedBox(
|
||||
// height: 610.0,
|
||||
// child:
|
||||
// VisitorDetailsModalTemplateComponentWidget(
|
||||
// visitorImageURL:
|
||||
// "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",
|
||||
// visitorEmail: '',
|
||||
// visitorName: getJsonField(
|
||||
// visitorItem,
|
||||
// r'''$.VTE_NOME''',
|
||||
// )?.toString(),
|
||||
// visitorPhone: '',
|
||||
// visitorType: '',
|
||||
// ),
|
||||
// ),
|
||||
// );
|
||||
// },
|
||||
// ).then((value) => safeSetState(() {}));
|
||||
},
|
||||
child: Container(
|
||||
width: 100.0,
|
||||
decoration: BoxDecoration(
|
||||
color: FlutterFlowTheme.of(context)
|
||||
.primaryBackground,
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment.center,
|
||||
children: [
|
||||
ClipRRect(
|
||||
borderRadius:
|
||||
BorderRadius.circular(40.0),
|
||||
child: CachedNetworkImage(
|
||||
fadeInDuration: const Duration(
|
||||
milliseconds: 500),
|
||||
fadeOutDuration: const Duration(
|
||||
milliseconds: 500),
|
||||
imageUrl:
|
||||
"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",
|
||||
width: 60.0,
|
||||
height: 60.0,
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
);
|
||||
},
|
||||
).then((value) => safeSetState(() {}));
|
||||
},
|
||||
child: Container(
|
||||
width: 100.0,
|
||||
decoration: BoxDecoration(
|
||||
color: FlutterFlowTheme.of(context)
|
||||
.secondaryBackground,
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
blurRadius: 0.0,
|
||||
color: FlutterFlowTheme.of(context)
|
||||
.alternate,
|
||||
offset: const Offset(
|
||||
0.0,
|
||||
1.0,
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment.center,
|
||||
children: [
|
||||
ClipRRect(
|
||||
borderRadius:
|
||||
BorderRadius.circular(40.0),
|
||||
child: CachedNetworkImage(
|
||||
fadeInDuration:
|
||||
const Duration(milliseconds: 500),
|
||||
fadeOutDuration:
|
||||
const Duration(milliseconds: 500),
|
||||
imageUrl:
|
||||
),
|
||||
Expanded(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.center,
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
12.0, 0.0, 0.0, 0.0),
|
||||
child: Text(
|
||||
valueOrDefault<String>(
|
||||
'https://freaccess.com.br/freaccess/getImage.php?devUUID=${FFAppState().devUUID}&userUUID=${FFAppState().userUUID}&cliID=${FFAppState().cliUUID}&atividade=getFoto&Documento=${getJsonField(
|
||||
visitorItem,
|
||||
r'''$.VTE_DOCUMENTO''',
|
||||
).toString()}&tipo=E',
|
||||
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/7ftdetkzc3s0/360_F_64676383_LdbmhiNM6Ypzb3FM4PPuFP9rHe7ri8Ju.jpg',
|
||||
),
|
||||
width: 60.0,
|
||||
height: 60.0,
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(12.0, 0.0,
|
||||
0.0, 0.0),
|
||||
child: Text(
|
||||
valueOrDefault<String>(
|
||||
getJsonField(
|
||||
visitorItem,
|
||||
r'''$.VTE_NOME''',
|
||||
)?.toString(),
|
||||
'NOT FOUND',
|
||||
),
|
||||
style:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
.bodyLarge
|
||||
.override(
|
||||
fontFamily: FlutterFlowTheme.of(
|
||||
context)
|
||||
.bodyLargeFamily,
|
||||
letterSpacing:
|
||||
0.0,
|
||||
useGoogleFonts: GoogleFonts
|
||||
.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyLargeFamily),
|
||||
),
|
||||
getJsonField(
|
||||
visitorItem,
|
||||
r'''$.VTE_NOME''',
|
||||
)?.toString(),
|
||||
'NOT FOUND',
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(4.0, 4.0,
|
||||
0.0, 0.0),
|
||||
child: Row(
|
||||
mainAxisSize:
|
||||
MainAxisSize.max,
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment
|
||||
.start,
|
||||
children: [
|
||||
Align(
|
||||
alignment:
|
||||
const AlignmentDirectional(
|
||||
0.0, -1.0),
|
||||
child: Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
10.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0),
|
||||
child: Text(
|
||||
getJsonField(
|
||||
visitorItem,
|
||||
r'''$.VTE_TELEFONE''',
|
||||
).toString(),
|
||||
style: FlutterFlowTheme
|
||||
.of(context)
|
||||
.bodyMedium
|
||||
.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily,
|
||||
color: FlutterFlowTheme.of(
|
||||
context)
|
||||
.primary,
|
||||
letterSpacing:
|
||||
0.0,
|
||||
useGoogleFonts: GoogleFonts
|
||||
.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(context).bodyMediumFamily),
|
||||
),
|
||||
),
|
||||
),
|
||||
style: FlutterFlowTheme.of(
|
||||
context)
|
||||
.bodyLarge
|
||||
.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
.bodyLargeFamily,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts
|
||||
.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
.bodyLargeFamily),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
FlutterFlowIconButton(
|
||||
borderRadius: 20.0,
|
||||
borderWidth: 1.0,
|
||||
buttonSize: 40.0,
|
||||
icon: Icon(
|
||||
Icons.restore_from_trash,
|
||||
color:
|
||||
FlutterFlowTheme.of(context)
|
||||
.primary,
|
||||
size: 20.0,
|
||||
),
|
||||
onPressed: () async {
|
||||
_model.removeFromVisitors(
|
||||
visitorItem);
|
||||
setState(() {});
|
||||
},
|
||||
),
|
||||
FlutterFlowIconButton(
|
||||
borderRadius: 20.0,
|
||||
borderWidth: 1.0,
|
||||
buttonSize: 40.0,
|
||||
icon: Icon(
|
||||
Icons.close,
|
||||
color:
|
||||
FlutterFlowTheme.of(context)
|
||||
.customColor6,
|
||||
size: 20.0,
|
||||
),
|
||||
],
|
||||
),
|
||||
onPressed: () async {
|
||||
_model.removeFromVisitors(
|
||||
visitorItem);
|
||||
setState(() {});
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return Container(
|
||||
width: 100.0,
|
||||
height: 100.0,
|
||||
decoration: BoxDecoration(
|
||||
color:
|
||||
FlutterFlowTheme.of(context).secondaryBackground,
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
FFButtonWidget(
|
||||
onPressed: () async {
|
||||
await widget.getVisitors?.call(
|
||||
_model.visitors,
|
||||
);
|
||||
await widget.getDocs?.call(
|
||||
_model.docs,
|
||||
);
|
||||
Navigator.pop(context);
|
||||
},
|
||||
text: FFLocalizations.of(context).getText(
|
||||
'ug6qzyla' /* Adicionar */,
|
||||
),
|
||||
options: FFButtonOptions(
|
||||
width: double.infinity,
|
||||
height: 30.0,
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(24.0, 0.0, 24.0, 0.0),
|
||||
iconPadding:
|
||||
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
textStyle: FlutterFlowTheme.of(context).titleSmall.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context).titleSmallFamily,
|
||||
color: Colors.white,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context).titleSmallFamily),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
elevation: 3.0,
|
||||
borderSide: const BorderSide(
|
||||
color: Colors.transparent,
|
||||
width: 1.0,
|
||||
);
|
||||
} else {
|
||||
return Container(
|
||||
width: 100.0,
|
||||
height: 100.0,
|
||||
decoration: BoxDecoration(
|
||||
color: FlutterFlowTheme.of(context).primaryBackground,
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
FFButtonWidget(
|
||||
onPressed: () async {
|
||||
await widget.getVisitors?.call(
|
||||
_model.visitors,
|
||||
);
|
||||
await widget.getDocs?.call(
|
||||
_model.docs,
|
||||
);
|
||||
Navigator.pop(context);
|
||||
},
|
||||
text: FFLocalizations.of(context).getVariableText(
|
||||
enText: 'Add',
|
||||
ptText: 'Adicionar',
|
||||
),
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(0.0),
|
||||
bottomRight: Radius.circular(0.0),
|
||||
topLeft: Radius.circular(0.0),
|
||||
topRight: Radius.circular(0.0),
|
||||
options: FFButtonOptions(
|
||||
width: MediaQuery.of(context).size.width * 0.3,
|
||||
height: MediaQuery.of(context).size.width * 0.1,
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
24.0, 0.0, 24.0, 0.0),
|
||||
iconPadding: const EdgeInsetsDirectional.fromSTEB(
|
||||
0.0, 0.0, 0.0, 0.0),
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
textStyle: FlutterFlowTheme.of(context).titleSmall.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context).titleSmallFamily,
|
||||
color: Colors.white,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context).titleSmallFamily),
|
||||
),
|
||||
elevation: 3.0,
|
||||
borderSide: const BorderSide(
|
||||
color: Colors.transparent,
|
||||
width: 1.0,
|
||||
),
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(15),
|
||||
bottomRight: Radius.circular(15),
|
||||
topLeft: Radius.circular(15),
|
||||
topRight: Radius.circular(15),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(
|
||||
height: 10.0,
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,6 @@ import 'package:url_launcher/url_launcher.dart';
|
|||
|
||||
import '../main.dart';
|
||||
|
||||
|
||||
export 'keep_alive_wrapper.dart';
|
||||
export 'lat_lng.dart';
|
||||
export 'place.dart';
|
||||
|
@ -87,6 +86,46 @@ Theme wrapInMaterialDatePickerTheme(
|
|||
|
||||
return Theme(
|
||||
data: baseTheme.copyWith(
|
||||
textSelectionTheme: baseTheme.textSelectionTheme.copyWith(
|
||||
cursorColor: headerBackgroundColor,
|
||||
selectionColor: headerBackgroundColor.withOpacity(0.4),
|
||||
selectionHandleColor: headerBackgroundColor,
|
||||
),
|
||||
inputDecorationTheme: baseTheme.inputDecorationTheme.copyWith(
|
||||
isDense: true,
|
||||
hoverColor: headerBackgroundColor.withOpacity(0.04),
|
||||
floatingLabelStyle: baseTheme.textTheme.labelMedium!.copyWith(
|
||||
color: headerBackgroundColor,
|
||||
),
|
||||
labelStyle: baseTheme.textTheme.labelMedium!.copyWith(
|
||||
color: headerBackgroundColor,
|
||||
),
|
||||
border: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: headerBackgroundColor,
|
||||
),
|
||||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: headerBackgroundColor,
|
||||
),
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: headerBackgroundColor.withOpacity(0.6),
|
||||
),
|
||||
),
|
||||
errorBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: headerBackgroundColor,
|
||||
),
|
||||
),
|
||||
focusedErrorBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: headerBackgroundColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
colorScheme: baseTheme.colorScheme.copyWith(
|
||||
onSurface: pickerForegroundColor,
|
||||
),
|
||||
|
@ -149,9 +188,54 @@ Theme wrapInMaterialTimePickerTheme(
|
|||
final baseTheme = Theme.of(context);
|
||||
return Theme(
|
||||
data: baseTheme.copyWith(
|
||||
focusColor: headerBackgroundColor,
|
||||
iconTheme: baseTheme.iconTheme.copyWith(
|
||||
size: iconSize,
|
||||
),
|
||||
textSelectionTheme: baseTheme.textSelectionTheme.copyWith(
|
||||
cursorColor: headerBackgroundColor,
|
||||
selectionColor: headerBackgroundColor.withOpacity(0.4),
|
||||
selectionHandleColor: headerBackgroundColor,
|
||||
),
|
||||
inputDecorationTheme: baseTheme.inputDecorationTheme.copyWith(
|
||||
isDense: true,
|
||||
focusColor: headerBackgroundColor,
|
||||
hoverColor: headerBackgroundColor.withOpacity(0.04),
|
||||
floatingLabelStyle: baseTheme.textTheme.labelMedium!.copyWith(
|
||||
color: headerBackgroundColor,
|
||||
),
|
||||
labelStyle: baseTheme.textTheme.labelMedium!.copyWith(
|
||||
color: headerBackgroundColor,
|
||||
),
|
||||
outlineBorder: BorderSide(
|
||||
color: headerBackgroundColor,
|
||||
),
|
||||
border: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: headerBackgroundColor,
|
||||
),
|
||||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: headerBackgroundColor,
|
||||
),
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: headerBackgroundColor.withOpacity(0.6),
|
||||
),
|
||||
),
|
||||
errorBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: headerBackgroundColor,
|
||||
),
|
||||
),
|
||||
focusedErrorBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: headerBackgroundColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
textButtonTheme: TextButtonThemeData(
|
||||
style: ButtonStyle(
|
||||
foregroundColor: WidgetStatePropertyAll(
|
||||
|
@ -169,6 +253,7 @@ Theme wrapInMaterialTimePickerTheme(
|
|||
})),
|
||||
),
|
||||
timePickerTheme: baseTheme.timePickerTheme.copyWith(
|
||||
hourMinuteColor: selectedDateTimeBackgroundColor,
|
||||
backgroundColor: pickerBackgroundColor,
|
||||
hourMinuteTextColor: pickerForegroundColor,
|
||||
dialHandColor: selectedDateTimeBackgroundColor,
|
||||
|
@ -574,4 +659,4 @@ double computeGradientAlignmentY(double evaluatedAngle) {
|
|||
y = sin(2 * rads);
|
||||
}
|
||||
return double.parse(roundTo(y, 2));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -569,8 +569,8 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
|
|||
// throwException
|
||||
{
|
||||
'e58xxxiq': {
|
||||
'pt': 'ERRO',
|
||||
'en': 'ERROR',
|
||||
'pt': 'Falha :(',
|
||||
'en': 'Fail :(',
|
||||
},
|
||||
},
|
||||
// regisiterVistorTemplateComponent
|
||||
|
@ -873,28 +873,28 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
|
|||
'en': 'LET\'S GO! SIGN IN WITH YOUR ACCOUNT',
|
||||
},
|
||||
'1ltg0ylb': {
|
||||
'pt': 'Email',
|
||||
'en': 'Email',
|
||||
'pt': 'E-mail',
|
||||
'en': 'E-mail',
|
||||
},
|
||||
'2x19ce8k': {
|
||||
'pt': 'Senha',
|
||||
'en': 'Password',
|
||||
},
|
||||
'xhnawzcb': {
|
||||
'pt': 'Campo é necessário',
|
||||
'en': 'Field is required',
|
||||
'pt': 'E-mail é Obrigatório',
|
||||
'en': 'E-mail is required',
|
||||
},
|
||||
's3j1hjqx': {
|
||||
'pt': 'E-mail Inv',
|
||||
'en': '',
|
||||
'pt': 'E-mail Inválido',
|
||||
'en': 'Invalid E-mail',
|
||||
},
|
||||
'2ib9bf67': {
|
||||
'pt': 'Please choose an option from the dropdown',
|
||||
'en': '',
|
||||
},
|
||||
'9cs5wlmc': {
|
||||
'pt': 'Campo é necessário',
|
||||
'en': 'Field is required',
|
||||
'pt': 'Senha é Obrigatório',
|
||||
'en': 'Password is required',
|
||||
},
|
||||
'rkxwb0sg': {
|
||||
'pt': 'Please choose an option from the dropdown',
|
||||
|
@ -922,7 +922,7 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
|
|||
},
|
||||
'p5c6d54y': {
|
||||
'pt': ' Recupere aqui',
|
||||
'en': ' recover here',
|
||||
'en': ' Recover here',
|
||||
},
|
||||
'olf967cj': {
|
||||
'pt': 'Termo de Uso',
|
||||
|
@ -1032,12 +1032,24 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
|
|||
'Don\'t worry, we will help you, enter the email registered in the application and click send.',
|
||||
},
|
||||
'mtz8l7ft': {
|
||||
'pt': 'Email',
|
||||
'en': 'Email',
|
||||
'pt': 'E-mail',
|
||||
'en': 'E-mail',
|
||||
},
|
||||
'w7y5wlnv': {
|
||||
'pt': 'digite o seu email.....',
|
||||
'en': 'enter your email.....',
|
||||
'pt': '',
|
||||
'en': '',
|
||||
},
|
||||
'3hqg8buh': {
|
||||
'pt': 'E-mail é Obrigatório',
|
||||
'en': 'E-mail is Required',
|
||||
},
|
||||
'jh5r2b1w': {
|
||||
'pt': 'E-mail Inválido',
|
||||
'en': 'Invalid E-mail',
|
||||
},
|
||||
'1p76vmkn': {
|
||||
'pt': 'Please choose an option from the dropdown',
|
||||
'en': '',
|
||||
},
|
||||
'74rnd5bu': {
|
||||
'pt': 'Enviar',
|
||||
|
|
|
@ -52,32 +52,32 @@ Future<List<SelectedFile>?> selectMediaWithSourceBottomSheet({
|
|||
required bool allowPhoto,
|
||||
bool allowVideo = false,
|
||||
String pickerFontFamily = 'Roboto',
|
||||
Color textColor = const Color(0xFF111417),
|
||||
Color backgroundColor = const Color(0xFFF5F5F5),
|
||||
// Color textColor = const Color(0xFF111417),
|
||||
// Color backgroundColor = const Color(0xFFF5F5F5),
|
||||
bool includeDimensions = false,
|
||||
bool includeBlurHash = false,
|
||||
}) async {
|
||||
createUploadMediaListTile(String label, MediaSource mediaSource) => ListTile(
|
||||
title: Text(
|
||||
label,
|
||||
textAlign: TextAlign.center,
|
||||
style: GoogleFonts.getFont(
|
||||
pickerFontFamily,
|
||||
color: textColor,
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 20,
|
||||
),
|
||||
),
|
||||
tileColor: backgroundColor,
|
||||
dense: false,
|
||||
onTap: () => Navigator.pop(
|
||||
context,
|
||||
mediaSource,
|
||||
),
|
||||
);
|
||||
title: Text(
|
||||
label,
|
||||
textAlign: TextAlign.center,
|
||||
style: GoogleFonts.getFont(
|
||||
pickerFontFamily,
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 20,
|
||||
),
|
||||
),
|
||||
tileColor: FlutterFlowTheme.of(context).primaryBackground,
|
||||
dense: false,
|
||||
onTap: () => Navigator.pop(
|
||||
context,
|
||||
mediaSource,
|
||||
),
|
||||
);
|
||||
final mediaSource = await showModalBottomSheet<MediaSource>(
|
||||
context: context,
|
||||
backgroundColor: backgroundColor,
|
||||
backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
|
||||
builder: (context) {
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
|
@ -91,13 +91,15 @@ Future<List<SelectedFile>?> selectMediaWithSourceBottomSheet({
|
|||
textAlign: TextAlign.center,
|
||||
style: GoogleFonts.getFont(
|
||||
pickerFontFamily,
|
||||
color: textColor.withOpacity(0.65),
|
||||
color: FlutterFlowTheme.of(context)
|
||||
.primaryText
|
||||
.withOpacity(0.65),
|
||||
fontWeight: FontWeight.w500,
|
||||
fontSize: 20,
|
||||
),
|
||||
),
|
||||
tileColor: backgroundColor,
|
||||
dense: false,
|
||||
tileColor: FlutterFlowTheme.of(context).primaryBackground,
|
||||
dense: true,
|
||||
),
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -360,18 +362,26 @@ void showUploadMessage(
|
|||
child: CircularProgressIndicator(
|
||||
valueColor: Theme.of(context).brightness == Brightness.dark
|
||||
? AlwaysStoppedAnimation<Color>(
|
||||
FlutterFlowTheme.of(context).accent4)
|
||||
FlutterFlowTheme.of(context).info)
|
||||
: null,
|
||||
),
|
||||
),
|
||||
Text(message),
|
||||
Text(message, style: FlutterFlowTheme.of(context).bodyMedium),
|
||||
],
|
||||
),
|
||||
duration: showLoading ? const Duration(days: 1) : const Duration(seconds: 4),
|
||||
backgroundColor: FlutterFlowTheme.of(context).primary,
|
||||
shape: const RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.only(
|
||||
topLeft: Radius.circular(15),
|
||||
topRight: Radius.circular(15),
|
||||
),
|
||||
),
|
||||
duration:
|
||||
showLoading ? const Duration(days: 1) : const Duration(seconds: 4),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
String? _removeTrailingSlash(String? path) => path != null && path.endsWith('/')
|
||||
? path.substring(0, path.length - 1)
|
||||
: path;
|
||||
: path;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
import 'package:firebase_core/firebase_core.dart';
|
||||
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
|
||||
import 'package:hub/app_state.dart';
|
||||
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
|
||||
import 'package:hub/flutter_flow/internationalization.dart';
|
||||
|
@ -29,6 +30,8 @@ void main() async {
|
|||
|
||||
Future<void> initializeApp() async {
|
||||
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
|
||||
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
|
||||
|
||||
await FlutterFlowTheme.initialize();
|
||||
await FFLocalizations.initialize();
|
||||
final appState = FFAppState();
|
||||
|
@ -57,6 +60,9 @@ class _MyAppState extends State<MyApp> {
|
|||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
|
||||
|
||||
_appStateNotifier = AppStateNotifier.instance;
|
||||
_router = createRouter(_appStateNotifier);
|
||||
Future.delayed(const Duration(milliseconds: 1000),
|
||||
|
|
|
@ -22,17 +22,11 @@ import 'package:hub/flutter_flow/internationalization.dart';
|
|||
import 'package:hub/flutter_flow/nav/nav.dart';
|
||||
import 'package:hub/pages/home_page/home_page_model.dart';
|
||||
|
||||
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
|
||||
|
||||
class HomePageWidget extends StatefulWidget {
|
||||
const HomePageWidget({super.key});
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
State<HomePageWidget> createState() => _HomePageWidgetState();
|
||||
}
|
||||
|
@ -42,7 +36,6 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
bool localStatus = false;
|
||||
final scaffoldKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
|
||||
Future<void> checkLocalStatus() async {
|
||||
localStatus = await checkLocals(
|
||||
context: context,
|
||||
|
@ -57,9 +50,6 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
_model = createModel(context, () => HomePageModel());
|
||||
SchedulerBinding.instance.addPostFrameCallback((_) async {
|
||||
await PushNotificationService().initialize(context);
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
|
@ -105,7 +95,6 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
context.watch<FFAppState>();
|
||||
return GestureDetector(
|
||||
onTap: () => _model.unfocusNode.canRequestFocus
|
||||
|
@ -122,523 +111,485 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
|
||||
Container buildPage(BuildContext context, bool localStatus) {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
color: FlutterFlowTheme.of(context).primaryBackground,
|
||||
decoration: BoxDecoration(
|
||||
color: FlutterFlowTheme.of(context).primaryBackground,
|
||||
),
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Wrap(
|
||||
spacing: 0.0,
|
||||
runSpacing: 0.0,
|
||||
alignment: WrapAlignment.start,
|
||||
crossAxisAlignment: WrapCrossAlignment.start,
|
||||
direction: Axis.horizontal,
|
||||
runAlignment: WrapAlignment.start,
|
||||
verticalDirection: VerticalDirection.down,
|
||||
clipBehavior: Clip.none,
|
||||
children: [
|
||||
createHeader(context),
|
||||
createLocal(localStatus),
|
||||
createBody(),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Wrap(
|
||||
spacing: 0.0,
|
||||
runSpacing: 0.0,
|
||||
alignment: WrapAlignment.start,
|
||||
crossAxisAlignment: WrapCrossAlignment.start,
|
||||
direction: Axis.horizontal,
|
||||
runAlignment: WrapAlignment.start,
|
||||
verticalDirection: VerticalDirection.down,
|
||||
clipBehavior: Clip.none,
|
||||
children: [
|
||||
createHeader(context),
|
||||
createLocal(localStatus),
|
||||
createBody(),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Wrap createBody() {
|
||||
return Wrap(
|
||||
spacing: 0.0,
|
||||
runSpacing: 0.0,
|
||||
alignment: WrapAlignment.start,
|
||||
crossAxisAlignment: WrapCrossAlignment.start,
|
||||
direction: Axis.horizontal,
|
||||
runAlignment: WrapAlignment.start,
|
||||
verticalDirection: VerticalDirection.down,
|
||||
clipBehavior: Clip.none,
|
||||
children: [
|
||||
wrapWithModel(
|
||||
model: _model.menuComponentModel,
|
||||
updateCallback: () => setState(() {}),
|
||||
child: const MenuComponentWidget(
|
||||
expandable: true,
|
||||
style: MenuView.list_grid,
|
||||
item: MenuItem.button,
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(0.0, 0.0),
|
||||
child: Provider<MessageWellNotifier>(
|
||||
create: (_) => MessageWellNotifier(),
|
||||
child: wrapWithModel(
|
||||
model: _model.messageWellComponentModel,
|
||||
updateCallback: () => setState(() {}),
|
||||
child: const MessageWellComponentWidget(),
|
||||
),
|
||||
),
|
||||
),
|
||||
//footer
|
||||
const SizedBox(
|
||||
height: 100,
|
||||
width: double.infinity,
|
||||
)
|
||||
],
|
||||
);
|
||||
spacing: 0.0,
|
||||
runSpacing: 0.0,
|
||||
alignment: WrapAlignment.start,
|
||||
crossAxisAlignment: WrapCrossAlignment.start,
|
||||
direction: Axis.horizontal,
|
||||
runAlignment: WrapAlignment.start,
|
||||
verticalDirection: VerticalDirection.down,
|
||||
clipBehavior: Clip.none,
|
||||
children: [
|
||||
wrapWithModel(
|
||||
model: _model.menuComponentModel,
|
||||
updateCallback: () => setState(() {}),
|
||||
child: const MenuComponentWidget(
|
||||
expandable: true,
|
||||
style: MenuView.list_grid,
|
||||
item: MenuItem.button,
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(0.0, 0.0),
|
||||
child: Provider<MessageWellNotifier>(
|
||||
create: (_) => MessageWellNotifier(),
|
||||
child: wrapWithModel(
|
||||
model: _model.messageWellComponentModel,
|
||||
updateCallback: () => setState(() {}),
|
||||
child: const MessageWellComponentWidget(),
|
||||
),
|
||||
),
|
||||
),
|
||||
//footer
|
||||
const SizedBox(
|
||||
height: 100,
|
||||
width: double.infinity,
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Widget createLocal(bool localStatus) {
|
||||
return wrapWithModel(
|
||||
model: _model.localComponentModel,
|
||||
updateCallback: () => setState(() {}),
|
||||
child: LocalProfileComponentWidget(
|
||||
localStatus: localStatus,
|
||||
),
|
||||
);
|
||||
model: _model.localComponentModel,
|
||||
updateCallback: () => setState(() {}),
|
||||
child: LocalProfileComponentWidget(
|
||||
localStatus: localStatus,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Row createHeader(BuildContext context) {
|
||||
return Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Expanded(
|
||||
child: Container(
|
||||
width: 100.0,
|
||||
height: 100.0,
|
||||
decoration: const BoxDecoration(
|
||||
color: Color(0xFF1AAB5F),
|
||||
),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Align(
|
||||
alignment:
|
||||
const AlignmentDirectional(0.0, 1.0),
|
||||
child: Container(
|
||||
height: 50.0,
|
||||
decoration: const BoxDecoration(),
|
||||
child: Align(
|
||||
alignment:
|
||||
const AlignmentDirectional(0.0, 0.0),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Align(
|
||||
alignment:
|
||||
const AlignmentDirectional(
|
||||
-1.0, 0.0),
|
||||
child: Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
10.0, 0.0, 0.0, 0.0),
|
||||
child: FlutterFlowIconButton(
|
||||
borderRadius: 20.0,
|
||||
borderWidth: 1.0,
|
||||
buttonSize: 40.0,
|
||||
fillColor:
|
||||
FlutterFlowTheme.of(context)
|
||||
.primary,
|
||||
icon: const Icon(
|
||||
Icons.menu_rounded,
|
||||
color: Colors.white,
|
||||
size: 28.0,
|
||||
),
|
||||
onPressed: () async {
|
||||
scaffoldKey.currentState!
|
||||
.openDrawer();
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment:
|
||||
const AlignmentDirectional(
|
||||
-1.0, 0.0),
|
||||
child: Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
60.0, 15.0, 0.0, 0.0),
|
||||
child: ClipRRect(
|
||||
borderRadius:
|
||||
BorderRadius.circular(8.0),
|
||||
child: Image.network(
|
||||
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/8r2vsbd9i03k/logo.png',
|
||||
width: 50.0,
|
||||
height: 200.0,
|
||||
fit: BoxFit.none,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment:
|
||||
const AlignmentDirectional(
|
||||
0.0, 0.0),
|
||||
child: Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional
|
||||
.fromSTEB(
|
||||
0.0, 15.0, 0.0, 0.0),
|
||||
child: Text(
|
||||
FFLocalizations.of(context)
|
||||
.getText(
|
||||
'rg9pzkpz' /* FRE ACCESS */,
|
||||
),
|
||||
style:
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
.bodyMediumFamily,
|
||||
color: FlutterFlowTheme
|
||||
.of(context)
|
||||
.info,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts
|
||||
.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
.bodyMediumFamily),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Expanded(
|
||||
child: Container(
|
||||
width: 100.0,
|
||||
height: 100.0,
|
||||
decoration: const BoxDecoration(
|
||||
color: Color(0xFF1AAB5F),
|
||||
),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(0.0, 1.0),
|
||||
child: Container(
|
||||
height: 50.0,
|
||||
decoration: const BoxDecoration(),
|
||||
child: Align(
|
||||
alignment: const AlignmentDirectional(0.0, 0.0),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(-1.0, 0.0),
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
10.0, 0.0, 0.0, 0.0),
|
||||
child: FlutterFlowIconButton(
|
||||
borderRadius: 20.0,
|
||||
borderWidth: 1.0,
|
||||
buttonSize: 40.0,
|
||||
fillColor: FlutterFlowTheme.of(context).primary,
|
||||
icon: const Icon(
|
||||
Icons.menu_rounded,
|
||||
color: Colors.white,
|
||||
size: 28.0,
|
||||
),
|
||||
onPressed: () async {
|
||||
scaffoldKey.currentState!.openDrawer();
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(-1.0, 0.0),
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
60.0, 15.0, 0.0, 0.0),
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(8.0),
|
||||
child: Image.network(
|
||||
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/8r2vsbd9i03k/logo.png',
|
||||
width: 50.0,
|
||||
height: 200.0,
|
||||
fit: BoxFit.none,
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment:
|
||||
const AlignmentDirectional(0.0, 1.0),
|
||||
child: Container(
|
||||
width: 100.0,
|
||||
height: 50.0,
|
||||
decoration: const BoxDecoration(),
|
||||
child: Align(
|
||||
alignment:
|
||||
const AlignmentDirectional(1.0, 1.0),
|
||||
child: FlutterFlowIconButton(
|
||||
borderRadius: 20.0,
|
||||
borderWidth: 1.0,
|
||||
buttonSize: 40.0,
|
||||
icon: Icon(
|
||||
Icons.notifications_sharp,
|
||||
color:
|
||||
FlutterFlowTheme.of(context).info,
|
||||
size: 24.0,
|
||||
),
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(0.0, 0.0),
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
0.0, 15.0, 0.0, 0.0),
|
||||
child: Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'rg9pzkpz' /* FRE ACCESS */,
|
||||
),
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
.override(
|
||||
fontFamily: FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily,
|
||||
color: FlutterFlowTheme.of(context).info,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily),
|
||||
),
|
||||
onPressed: () {
|
||||
log('IconButton pressed ...');
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: const AlignmentDirectional(0.0, 1.0),
|
||||
child: Container(
|
||||
width: 100.0,
|
||||
height: 50.0,
|
||||
decoration: const BoxDecoration(),
|
||||
child: Align(
|
||||
alignment: const AlignmentDirectional(1.0, 1.0),
|
||||
child: FlutterFlowIconButton(
|
||||
borderRadius: 20.0,
|
||||
borderWidth: 1.0,
|
||||
buttonSize: 40.0,
|
||||
icon: Icon(
|
||||
Icons.notifications_sharp,
|
||||
color: FlutterFlowTheme.of(context).info,
|
||||
size: 24.0,
|
||||
),
|
||||
onPressed: () {
|
||||
log('IconButton pressed ...');
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
SizedBox buildDrawer(BuildContext context) {
|
||||
return SizedBox(
|
||||
width: 750.0,
|
||||
child: Drawer(
|
||||
elevation: 16.0,
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: FlutterFlowTheme.of(context).primaryBackground,
|
||||
shape: BoxShape.rectangle,
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Container(
|
||||
width: double.infinity,
|
||||
decoration: const BoxDecoration(
|
||||
borderRadius: BorderRadius.only(
|
||||
bottomLeft: Radius.circular(5.0),
|
||||
bottomRight: Radius.circular(5.0),
|
||||
topLeft: Radius.circular(0.0),
|
||||
topRight: Radius.circular(0.0),
|
||||
),
|
||||
shape: BoxShape.rectangle,
|
||||
width: 750.0,
|
||||
child: Drawer(
|
||||
elevation: 16.0,
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: FlutterFlowTheme.of(context).primaryBackground,
|
||||
shape: BoxShape.rectangle,
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Container(
|
||||
width: double.infinity,
|
||||
decoration: const BoxDecoration(
|
||||
borderRadius: BorderRadius.only(
|
||||
bottomLeft: Radius.circular(5.0),
|
||||
bottomRight: Radius.circular(5.0),
|
||||
topLeft: Radius.circular(0.0),
|
||||
topRight: Radius.circular(0.0),
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(30, 30, 10, 0),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Flexible(
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
decoration: const BoxDecoration(),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: 50.0,
|
||||
height: 50.0,
|
||||
clipBehavior: Clip.antiAlias,
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
),
|
||||
child: Image.network(
|
||||
valueOrDefault<String>(
|
||||
'https://freaccess.com.br/freaccess/Images/Clients/${FFAppState().cliUUID}.png',
|
||||
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/7ftdetkzc3s0/360_F_64676383_LdbmhiNM6Ypzb3FM4PPuFP9rHe7ri8Ju.jpg',
|
||||
),
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
shape: BoxShape.rectangle,
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(30, 30, 10, 0),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Flexible(
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
decoration: const BoxDecoration(),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: 50.0,
|
||||
height: 50.0,
|
||||
clipBehavior: Clip.antiAlias,
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
),
|
||||
Container(
|
||||
width: 150.0,
|
||||
child: Text(
|
||||
valueOrDefault<String>(
|
||||
convertToUppercase(
|
||||
FFAppState().local),
|
||||
'NOME DO LOCAL',
|
||||
),
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyLarge
|
||||
.override(
|
||||
fontFamily: 'Nunito Sans',
|
||||
color:
|
||||
FlutterFlowTheme.of(context)
|
||||
.primaryText,
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.normal,
|
||||
useGoogleFonts:
|
||||
GoogleFonts.asMap()
|
||||
.containsKey(
|
||||
'Nunito Sans'),
|
||||
),
|
||||
child: Image.network(
|
||||
valueOrDefault<String>(
|
||||
'https://freaccess.com.br/freaccess/Images/Clients/${FFAppState().cliUUID}.png',
|
||||
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/7ftdetkzc3s0/360_F_64676383_LdbmhiNM6Ypzb3FM4PPuFP9rHe7ri8Ju.jpg',
|
||||
),
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
].divide(const SizedBox(width: 20.0)),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
width: 150.0,
|
||||
child: Text(
|
||||
valueOrDefault<String>(
|
||||
convertToUppercase(FFAppState().local),
|
||||
'NOME DO LOCAL',
|
||||
),
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyLarge
|
||||
.override(
|
||||
fontFamily: 'Nunito Sans',
|
||||
color: FlutterFlowTheme.of(context)
|
||||
.primaryText,
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.normal,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey('Nunito Sans'),
|
||||
),
|
||||
),
|
||||
),
|
||||
].divide(const SizedBox(width: 20.0)),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
width: 50.0,
|
||||
child: Container(
|
||||
height: 30.0,
|
||||
decoration: const BoxDecoration(),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Flexible(
|
||||
child: FlutterFlowIconButton(
|
||||
borderRadius: 100.0,
|
||||
borderWidth: 1.0,
|
||||
buttonSize: 40.0,
|
||||
icon: Icon(
|
||||
Icons.close_sharp,
|
||||
color: FlutterFlowTheme.of(context)
|
||||
.primary,
|
||||
size: 20.0,
|
||||
),
|
||||
onPressed: () async {
|
||||
if (scaffoldKey.currentState!
|
||||
.isDrawerOpen ||
|
||||
scaffoldKey.currentState!
|
||||
.isEndDrawerOpen) {
|
||||
Navigator.pop(context);
|
||||
}
|
||||
},
|
||||
),
|
||||
Container(
|
||||
width: 50.0,
|
||||
child: Container(
|
||||
height: 30.0,
|
||||
decoration: const BoxDecoration(),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Flexible(
|
||||
child: FlutterFlowIconButton(
|
||||
borderRadius: 100.0,
|
||||
borderWidth: 1.0,
|
||||
buttonSize: 40.0,
|
||||
icon: Icon(
|
||||
Icons.close_sharp,
|
||||
color: FlutterFlowTheme.of(context)
|
||||
.primary,
|
||||
size: 20.0,
|
||||
),
|
||||
onPressed: () async {
|
||||
if (scaffoldKey
|
||||
.currentState!.isDrawerOpen ||
|
||||
scaffoldKey.currentState!
|
||||
.isEndDrawerOpen) {
|
||||
Navigator.pop(context);
|
||||
}
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
]
|
||||
.divide(const SizedBox(width: 0.0))
|
||||
.around(const SizedBox(width: 0.0)),
|
||||
),
|
||||
),
|
||||
]
|
||||
.divide(const SizedBox(width: 0.0))
|
||||
.around(const SizedBox(width: 0.0)),
|
||||
),
|
||||
].addToStart(const SizedBox(height: 30.0)),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 0.0),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Flexible(
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
8.0, 0.0, 8.0, 0.0),
|
||||
child: TextFormField(
|
||||
controller: _model.textController,
|
||||
focusNode: _model.textFieldFocusNode,
|
||||
autofocus: false,
|
||||
obscureText: false,
|
||||
decoration: InputDecoration(
|
||||
isDense: true,
|
||||
labelStyle: FlutterFlowTheme.of(context)
|
||||
.labelMedium
|
||||
.override(
|
||||
fontFamily: FlutterFlowTheme.of(context)
|
||||
.labelMediumFamily,
|
||||
color: FlutterFlowTheme.of(context)
|
||||
.primaryText,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(context)
|
||||
.labelMediumFamily),
|
||||
),
|
||||
alignLabelWithHint: false,
|
||||
hintStyle: FlutterFlowTheme.of(context)
|
||||
.labelMedium
|
||||
.override(
|
||||
fontFamily: FlutterFlowTheme.of(context)
|
||||
.labelMediumFamily,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(context)
|
||||
.labelMediumFamily),
|
||||
),
|
||||
enabledBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context)
|
||||
.customColor1,
|
||||
width: 0.5,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(2.0),
|
||||
),
|
||||
focusedBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
width: 0.5,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(2.0),
|
||||
),
|
||||
errorBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).error,
|
||||
width: 0.5,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(2.0),
|
||||
),
|
||||
focusedErrorBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).error,
|
||||
width: 0.5,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(2.0),
|
||||
),
|
||||
prefixIcon: const Icon(
|
||||
Icons.search_sharp,
|
||||
),
|
||||
),
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
].addToStart(const SizedBox(height: 30.0)),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 0.0),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Flexible(
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
8.0, 0.0, 8.0, 0.0),
|
||||
child: TextFormField(
|
||||
controller: _model.textController,
|
||||
focusNode: _model.textFieldFocusNode,
|
||||
autofocus: false,
|
||||
obscureText: false,
|
||||
decoration: InputDecoration(
|
||||
isDense: true,
|
||||
labelStyle: FlutterFlowTheme.of(context)
|
||||
.labelMedium
|
||||
.override(
|
||||
fontFamily: FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily,
|
||||
.labelMediumFamily,
|
||||
color:
|
||||
FlutterFlowTheme.of(context).primaryText,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily),
|
||||
.containsKey(FlutterFlowTheme.of(context)
|
||||
.labelMediumFamily),
|
||||
),
|
||||
validator: _model.textControllerValidator
|
||||
.asValidator(context),
|
||||
alignLabelWithHint: false,
|
||||
hintStyle: FlutterFlowTheme.of(context)
|
||||
.labelMedium
|
||||
.override(
|
||||
fontFamily: FlutterFlowTheme.of(context)
|
||||
.labelMediumFamily,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey(FlutterFlowTheme.of(context)
|
||||
.labelMediumFamily),
|
||||
),
|
||||
enabledBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color:
|
||||
FlutterFlowTheme.of(context).customColor1,
|
||||
width: 0.5,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(2.0),
|
||||
),
|
||||
focusedBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
width: 0.5,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(2.0),
|
||||
),
|
||||
errorBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).error,
|
||||
width: 0.5,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(2.0),
|
||||
),
|
||||
focusedErrorBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: FlutterFlowTheme.of(context).error,
|
||||
width: 0.5,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(2.0),
|
||||
),
|
||||
prefixIcon: const Icon(
|
||||
Icons.search_sharp,
|
||||
),
|
||||
),
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
.override(
|
||||
fontFamily: FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily),
|
||||
),
|
||||
validator: _model.textControllerValidator
|
||||
.asValidator(context),
|
||||
),
|
||||
),
|
||||
]
|
||||
.addToStart(const SizedBox(width: 30.0))
|
||||
.addToEnd(const SizedBox(width: 30.0)),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: wrapWithModel(
|
||||
model: _model.menuComponentModel,
|
||||
updateCallback: () => setState(() {}),
|
||||
child: MenuComponentWidget(
|
||||
expandable: false,
|
||||
style: MenuView.list,
|
||||
item: MenuItem.card,
|
||||
),
|
||||
),
|
||||
),
|
||||
FFButtonWidget(
|
||||
onPressed: () async {
|
||||
FFAppState().isLogged = false;
|
||||
setState(() {});
|
||||
|
||||
context.goNamed(
|
||||
'welcomePage',
|
||||
extra: <String, dynamic>{
|
||||
kTransitionInfoKey: const TransitionInfo(
|
||||
hasTransition: true,
|
||||
transitionType: PageTransitionType.scale,
|
||||
alignment: Alignment.bottomCenter,
|
||||
),
|
||||
},
|
||||
);
|
||||
},
|
||||
text: FFLocalizations.of(context).getText(
|
||||
'xx0db4wi' /* Sair */,
|
||||
),
|
||||
options: FFButtonOptions(
|
||||
height: 40.0,
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
|
||||
iconPadding:
|
||||
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
|
||||
color: const Color(0x00D70000),
|
||||
textStyle:
|
||||
FlutterFlowTheme.of(context).labelMedium.override(
|
||||
fontFamily: 'Plus Jakarta Sans',
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.w500,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey('Plus Jakarta Sans'),
|
||||
),
|
||||
elevation: 0.0,
|
||||
borderSide: const BorderSide(
|
||||
width: 0.0,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(50.0),
|
||||
]
|
||||
.addToStart(const SizedBox(width: 30.0))
|
||||
.addToEnd(const SizedBox(width: 30.0)),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: wrapWithModel(
|
||||
model: _model.menuComponentModel,
|
||||
updateCallback: () => setState(() {}),
|
||||
child: MenuComponentWidget(
|
||||
expandable: false,
|
||||
style: MenuView.list,
|
||||
item: MenuItem.card,
|
||||
),
|
||||
),
|
||||
|
||||
].addToEnd(const SizedBox(height: 64.0)),
|
||||
),
|
||||
),
|
||||
FFButtonWidget(
|
||||
onPressed: () async {
|
||||
FFAppState().isLogged = false;
|
||||
setState(() {});
|
||||
|
||||
context.goNamed(
|
||||
'welcomePage',
|
||||
extra: <String, dynamic>{
|
||||
kTransitionInfoKey: const TransitionInfo(
|
||||
hasTransition: true,
|
||||
transitionType: PageTransitionType.scale,
|
||||
alignment: Alignment.bottomCenter,
|
||||
),
|
||||
},
|
||||
);
|
||||
},
|
||||
text: FFLocalizations.of(context).getText(
|
||||
'xx0db4wi' /* Sair */,
|
||||
),
|
||||
options: FFButtonOptions(
|
||||
height: 40.0,
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
|
||||
iconPadding:
|
||||
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
|
||||
color: const Color(0x00D70000),
|
||||
textStyle: FlutterFlowTheme.of(context).labelMedium.override(
|
||||
fontFamily: 'Plus Jakarta Sans',
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.w500,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey('Plus Jakarta Sans'),
|
||||
),
|
||||
elevation: 0.0,
|
||||
borderSide: const BorderSide(
|
||||
width: 0.0,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(50.0),
|
||||
),
|
||||
),
|
||||
].addToEnd(const SizedBox(height: 64.0)),
|
||||
),
|
||||
);
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// body: Container(
|
||||
// decoration: BoxDecoration(
|
||||
|
@ -836,6 +787,5 @@ class _HomePageWidgetState extends State<HomePageWidget> {
|
|||
// ),
|
||||
// ),
|
||||
// );
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
||||
import 'package:hub/backend/api_requests/api_manager.dart';
|
||||
import 'package:hub/flutter_flow/flutter_flow_model.dart';
|
||||
import 'package:hub/flutter_flow/request_manager.dart';
|
||||
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hub/pages/message_history_page/message_history_page_widget.dart';
|
||||
|
||||
class MessageHistoryPageModel extends FlutterFlowModel<MessageHistoryPageWidget> {
|
||||
class MessageHistoryPageModel
|
||||
extends FlutterFlowModel<MessageHistoryPageWidget> {
|
||||
/// State fields for stateful widgets in this page.
|
||||
///
|
||||
|
||||
///
|
||||
|
||||
//copyWith
|
||||
|
||||
final unfocusNode = FocusNode();
|
||||
|
@ -49,9 +50,8 @@ class MessageHistoryPageModel extends FlutterFlowModel<MessageHistoryPageWidget>
|
|||
textController?.dispose();
|
||||
tabBarController?.dispose();
|
||||
|
||||
|
||||
/// Dispose query cache managers for this widget.
|
||||
|
||||
clearGetLiberationsCache();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@ import 'package:hub/flutter_flow/flutter_flow_util.dart';
|
|||
import 'package:hub/flutter_flow/nav/nav.dart';
|
||||
import 'package:hub/pages/message_history_page/message_history_page_model.dart';
|
||||
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
|
@ -26,7 +25,8 @@ class MessageHistoryPageWidget extends StatefulWidget {
|
|||
_MessageHistoryPageWidgetState();
|
||||
}
|
||||
|
||||
class _MessageHistoryPageWidgetState extends State<MessageHistoryPageWidget> with TickerProviderStateMixin {
|
||||
class _MessageHistoryPageWidgetState extends State<MessageHistoryPageWidget>
|
||||
with TickerProviderStateMixin {
|
||||
late MessageHistoryPageModel _model;
|
||||
|
||||
final scaffoldKey = GlobalKey<ScaffoldState>();
|
||||
|
@ -36,7 +36,7 @@ class _MessageHistoryPageWidgetState extends State<MessageHistoryPageWidget> wit
|
|||
super.initState();
|
||||
_model = createModel(context, () => MessageHistoryPageModel());
|
||||
|
||||
_model.tabBarController = TabController(
|
||||
_model.tabBarController = TabController(
|
||||
vsync: this,
|
||||
length: 3,
|
||||
initialIndex: 1,
|
||||
|
@ -106,8 +106,7 @@ PreferredSizeWidget appBarMessage(BuildContext context) {
|
|||
);
|
||||
}
|
||||
|
||||
Widget bodyMessage(
|
||||
BuildContext context, MessageHistoryPageModel _model) {
|
||||
Widget bodyMessage(BuildContext context, MessageHistoryPageModel _model) {
|
||||
return SafeArea(
|
||||
top: true,
|
||||
child: Column(
|
||||
|
@ -155,33 +154,26 @@ Widget bodyMessage(
|
|||
},
|
||||
),
|
||||
),
|
||||
Expanded(child: TabBarView(
|
||||
controller: _model.tabBarController,
|
||||
children: [
|
||||
liberationDynamicListView(context, _model, 'P'),
|
||||
liberationDynamicListView(context, _model, 'A'),
|
||||
liberationDynamicListView(context, _model, 'T'),
|
||||
]
|
||||
)),
|
||||
Expanded(
|
||||
child: TabBarView(controller: _model.tabBarController, children: [
|
||||
liberationDynamicListView(context, _model, 'P'),
|
||||
liberationDynamicListView(context, _model, 'A'),
|
||||
liberationDynamicListView(context, _model, 'T'),
|
||||
])),
|
||||
].addToStart(const SizedBox(height: 0)),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Widget liberationDynamicListView(
|
||||
BuildContext context,
|
||||
MessageHistoryPageModel _model,
|
||||
String DestIndex
|
||||
) {
|
||||
BuildContext context, MessageHistoryPageModel _model, String DestIndex) {
|
||||
return Container(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
decoration: const BoxDecoration(),
|
||||
child: FutureBuilder<ApiCallResponse>(
|
||||
future: PhpGroup.getMessagesCall.call(
|
||||
future: PhpGroup.getMessagesCall
|
||||
.call(
|
||||
devUUID: FFAppState().devUUID.toString(),
|
||||
userUUID: FFAppState().userUUID.toString(),
|
||||
cliID: FFAppState().cliUUID.toString(),
|
||||
|
@ -189,7 +181,8 @@ Widget liberationDynamicListView(
|
|||
pageSize: '100',
|
||||
pageNumber: '1',
|
||||
tipoDestino: DestIndex,
|
||||
).catchError((error) {
|
||||
)
|
||||
.catchError((error) {
|
||||
log('Error: ${error.toString()}');
|
||||
return Future.delayed(Duration(seconds: 1), () {
|
||||
return Center(
|
||||
|
@ -217,8 +210,15 @@ Widget liberationDynamicListView(
|
|||
child: Text('Erro ao carregar mensagens'),
|
||||
);
|
||||
}
|
||||
final mensagens = snapshot.data!.jsonBody['mensagens'];
|
||||
final totalRows = snapshot.data!.jsonBody['total_rows'];
|
||||
if (totalRows == 0 || mensagens == null || mensagens.isEmpty) {
|
||||
return const Center(
|
||||
child: Text('Nenhuma mensagem encontrada'),
|
||||
);
|
||||
}
|
||||
return ListView.builder(
|
||||
itemCount: snapshot.data!.jsonBody['total_rows'],
|
||||
itemCount: totalRows,
|
||||
addAutomaticKeepAlives: false,
|
||||
addRepaintBoundaries: true,
|
||||
cacheExtent: 1000.0,
|
||||
|
@ -234,8 +234,7 @@ Widget liberationDynamicListView(
|
|||
);
|
||||
}
|
||||
|
||||
Widget messageHistoryItem(
|
||||
BuildContext context, dynamic jsonBody) {
|
||||
Widget messageHistoryItem(BuildContext context, dynamic jsonBody) {
|
||||
log(jsonBody.toString());
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 15),
|
||||
|
@ -250,55 +249,60 @@ Widget messageHistoryItem(
|
|||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 15.0),
|
||||
child: Text(
|
||||
jsonBody['MSG_DATE'].toString(),
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 16,
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
),
|
||||
),
|
||||
Icon(
|
||||
jsonBody['MSG_DESTINO_TP'] == 'T'
|
||||
? Icons.group
|
||||
: Icons.person,
|
||||
color: FlutterFlowTheme.of(context).accent1,
|
||||
)
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 15.0),
|
||||
child: Text(
|
||||
jsonBody['MSG_ORIGEM_DESC'].toString(),
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 16,
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 15.0),
|
||||
child: Text(
|
||||
jsonBody['MSG_DATE'].toString(),
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 10,
|
||||
color: FlutterFlowTheme.of(context).customColor6,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
),
|
||||
overflow: TextOverflow.fade,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 15.0),
|
||||
child: Text(
|
||||
jsonBody['MSG_ORIGEM_DESC'].toString(),
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 12,
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
),
|
||||
overflow: TextOverflow.fade,
|
||||
),
|
||||
),
|
||||
Icon(
|
||||
jsonBody['MSG_DESTINO_TP'] == 'T'
|
||||
? Icons.group
|
||||
: Icons.person,
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Text(jsonBody['MSG_TEXTO'].toString(),),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Text(
|
||||
jsonBody['MSG_TEXTO'].toString(),
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,94 +1,126 @@
|
|||
|
||||
import 'dart:developer';
|
||||
|
||||
|
||||
|
||||
import 'package:hub/app_state.dart';
|
||||
import 'package:hub/backend/api_requests/api_calls.dart';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hub/components/templates_components/change_passs_qr_code_pass_key_template_component/change_pass_widget.dart';
|
||||
import 'package:hub/flutter_flow/flutter_flow_icon_button.dart';
|
||||
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
|
||||
import 'package:hub/flutter_flow/flutter_flow_util.dart';
|
||||
import 'package:hub/flutter_flow/nav/nav.dart';
|
||||
import 'package:share_plus/share_plus.dart';
|
||||
|
||||
class PreferencesPageModel with ChangeNotifier {
|
||||
final unfocusNode = FocusNode();
|
||||
|
||||
|
||||
Future<void> toggleFingerprint(BuildContext context) async {
|
||||
|
||||
// FFAppState().checkBiometrics()
|
||||
// .then((value) => FFAppState().authenticateBiometric()
|
||||
// .then( (value) {
|
||||
// FFAppState().fingerprint = !FFAppState().fingerprint;
|
||||
|
||||
|
||||
// })
|
||||
// .whenComplete(() => notifyListeners()));
|
||||
|
||||
if(FFAppState().fingerprint) {
|
||||
if (FFAppState().fingerprint) {
|
||||
FFAppState().fingerprint = false;
|
||||
FFAppState().deleteFingerprintPass();
|
||||
notifyListeners();
|
||||
} else {
|
||||
await showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
useSafeArea: true,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding:
|
||||
MediaQuery.viewInsetsOf(context),
|
||||
child:
|
||||
PassKeyTemplateWidget(
|
||||
toggleActionStatus: (key) async {
|
||||
log(key);
|
||||
FFAppState().fingerprintPass = key;
|
||||
FFAppState().fingerprint = true;
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
).whenComplete(() => notifyListeners());
|
||||
await showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
useSafeArea: true,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child: PassKeyTemplateWidget(
|
||||
toggleActionStatus: (key) async {
|
||||
log(key);
|
||||
FFAppState().fingerprintPass = key;
|
||||
FFAppState().fingerprint = true;
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
).whenComplete(() => notifyListeners());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void enablePerson(BuildContext context) {
|
||||
|
||||
notifyListeners();
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(FFAppState().userDevUUID, style: TextStyle(color: FlutterFlowTheme.of(context).info) ),
|
||||
backgroundColor: FlutterFlowTheme.of(context).primary,
|
||||
duration: const Duration(seconds: 1),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(30),
|
||||
),
|
||||
),
|
||||
Share.share(
|
||||
FFAppState().userDevUUID,
|
||||
);
|
||||
}
|
||||
|
||||
void toggleNotify() {
|
||||
void toggleNotify(BuildContext context) {
|
||||
FFAppState().notify = !FFAppState().notify;
|
||||
PhpGroup.changeNotifica.call(
|
||||
PhpGroup.changeNotifica
|
||||
.call(
|
||||
userUUID: FFAppState().userUUID,
|
||||
devUUID: FFAppState().devUUID,
|
||||
cliID: FFAppState().cliUUID,
|
||||
atividade: 'updVisitado',
|
||||
notifica: FFAppState().notify ? 'S' : 'N',
|
||||
);
|
||||
)
|
||||
.catchError((err) {
|
||||
log(err.toString());
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
FFLocalizations.of(context).getVariableText(
|
||||
enText: 'Error changing notification',
|
||||
ptText: 'Erro ao alterar notificação',
|
||||
),
|
||||
style: TextStyle(color: FlutterFlowTheme.of(context).info)),
|
||||
backgroundColor: FlutterFlowTheme.of(context).error,
|
||||
duration: const Duration(seconds: 3),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(30),
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void localLogout(){
|
||||
PhpGroup.resopndeVinculo.call(
|
||||
void localUnlink(BuildContext context) {
|
||||
PhpGroup.resopndeVinculo
|
||||
.call(
|
||||
userUUID: FFAppState().userUUID,
|
||||
devUUID: FFAppState().devUUID,
|
||||
cliID: FFAppState().cliUUID,
|
||||
tarefa: 'I',
|
||||
)
|
||||
.catchError((err) {
|
||||
log(err.toString());
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
FFLocalizations.of(context).getVariableText(
|
||||
enText: 'Error unlinking device',
|
||||
ptText: 'Erro ao desvincular dispositivo',
|
||||
),
|
||||
style: TextStyle(color: FlutterFlowTheme.of(context).info)),
|
||||
backgroundColor: FlutterFlowTheme.of(context).error,
|
||||
duration: const Duration(seconds: 3),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(30),
|
||||
),
|
||||
),
|
||||
);
|
||||
}).then(
|
||||
(value) {
|
||||
FFAppState().deleteCliUUID();
|
||||
FFAppState().deleteLocal();
|
||||
FFAppState().deleteOwnerUUID();
|
||||
Navigator.pop(context);
|
||||
},
|
||||
);
|
||||
notifyListeners();
|
||||
}
|
||||
|
@ -108,57 +140,99 @@ class PreferencesPageModel with ChangeNotifier {
|
|||
);
|
||||
}
|
||||
|
||||
|
||||
Future<void> togglePass(BuildContext context) async {
|
||||
Future<void> togglePass(BuildContext context) async {
|
||||
debugPrint('pass: ${FFAppState().pass}');
|
||||
if(FFAppState().pass) {
|
||||
if (FFAppState().pass) {
|
||||
FFAppState().pass = false;
|
||||
FFAppState().deleteAccessPass();
|
||||
notifyListeners();
|
||||
} else {
|
||||
await showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
useSafeArea: true,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding:
|
||||
MediaQuery.viewInsetsOf(context),
|
||||
child:
|
||||
PassKeyTemplateWidget(
|
||||
toggleActionStatus: (key) async {
|
||||
FFAppState().accessPass = key;
|
||||
await showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
useSafeArea: true,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child: PassKeyTemplateWidget(
|
||||
toggleActionStatus: (key) async {
|
||||
FFAppState().accessPass = key;
|
||||
notifyListeners();
|
||||
debugPrint('key: $key');
|
||||
await PhpGroup.changePass.call(
|
||||
await PhpGroup.changePass
|
||||
.call(
|
||||
userUUID: FFAppState().userUUID,
|
||||
devUUID: FFAppState().devUUID,
|
||||
cliID: FFAppState().cliUUID,
|
||||
atividade: 'updVisitado',
|
||||
newSenha: FFAppState().accessPass,
|
||||
)
|
||||
.then((value) {
|
||||
.then((value) {
|
||||
FFAppState().pass = true;
|
||||
// var error = jsonDecode(value.jsonBody['error'].toString());
|
||||
// log('${jsonDecode(value.jsonBody['error'].toString())}');
|
||||
if(jsonDecode(value.jsonBody['error'].toString()) == false) {
|
||||
if (jsonDecode(value.jsonBody['error'].toString()) == false) {
|
||||
FFAppState().pass = true;
|
||||
} else {
|
||||
FFAppState().pass = false;
|
||||
}
|
||||
})
|
||||
.onError((error, StackTrace) {
|
||||
FFAppState().pass = false;
|
||||
log(error.toString());
|
||||
log(StackTrace.toString());
|
||||
})
|
||||
.whenComplete(() => notifyListeners());
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}).onError((error, StackTrace) {
|
||||
FFAppState().pass = false;
|
||||
log(error.toString());
|
||||
log(StackTrace.toString());
|
||||
}).whenComplete(() => notifyListeners());
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> togglePanic(BuildContext context) async {
|
||||
if (FFAppState().panic) {
|
||||
FFAppState().panic = false;
|
||||
FFAppState().deletePanicPass();
|
||||
notifyListeners();
|
||||
} else {
|
||||
await showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
useSafeArea: true,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Padding(
|
||||
padding: MediaQuery.viewInsetsOf(context),
|
||||
child: PassKeyTemplateWidget(
|
||||
toggleActionStatus: (key) async {
|
||||
FFAppState().panicPass = key;
|
||||
notifyListeners();
|
||||
await PhpGroup.changePass
|
||||
.call(
|
||||
userUUID: FFAppState().userUUID,
|
||||
devUUID: FFAppState().devUUID,
|
||||
cliID: FFAppState().cliUUID,
|
||||
atividade: 'updVisitado',
|
||||
newSenha: FFAppState().panicPass,
|
||||
)
|
||||
.then((value) {
|
||||
FFAppState().panic = true;
|
||||
if (jsonDecode(value.jsonBody['error'].toString()) == false) {
|
||||
FFAppState().panic = true;
|
||||
} else {
|
||||
FFAppState().panic = false;
|
||||
}
|
||||
}).onError((e, s) {
|
||||
FFAppState().panic = false;
|
||||
log(e.toString());
|
||||
log(s.toString());
|
||||
}).whenComplete(() => notifyListeners());
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -167,4 +241,4 @@ class PreferencesPageModel with ChangeNotifier {
|
|||
unfocusNode.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,6 @@ import 'package:hub/flutter_flow/nav/nav.dart';
|
|||
import 'package:hub/pages/preferences_settings_page/preferences_settings_model.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
|
||||
class PreferencesPageWidget extends StatelessWidget {
|
||||
const PreferencesPageWidget({super.key});
|
||||
|
||||
|
@ -46,7 +45,7 @@ class PreferencesPageWidget extends StatelessWidget {
|
|||
FFLocalizations.of(context).getVariableText(
|
||||
enText: 'Preferences',
|
||||
ptText: 'Preferências',
|
||||
),
|
||||
),
|
||||
style: FlutterFlowTheme.of(context).headlineMedium.override(
|
||||
fontFamily: 'Nunito',
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
|
@ -74,7 +73,7 @@ class PreferencesPageWidget extends StatelessWidget {
|
|||
// childAspectRatio: 1.0,
|
||||
// mainAxisExtent: 100.0,
|
||||
// ),
|
||||
itemCount: 6, // Assuming 4 items for simplicity
|
||||
itemCount: 7, // Assuming 4 items for simplicity
|
||||
padding: const EdgeInsets.symmetric(horizontal: 20.0),
|
||||
physics: const AlwaysScrollableScrollPhysics(),
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
|
@ -90,82 +89,110 @@ class PreferencesPageWidget extends StatelessWidget {
|
|||
);
|
||||
}
|
||||
|
||||
Widget _buildIconButton(BuildContext context, int index, PreferencesPageModel model) {
|
||||
Widget _buildIconButton(
|
||||
BuildContext context, int index, PreferencesPageModel model) {
|
||||
IconData icon;
|
||||
Function() onPressed =() => {};
|
||||
Function() onPressed = () => {};
|
||||
bool isEnabled;
|
||||
String content;
|
||||
|
||||
switch (index) {
|
||||
case 0:
|
||||
icon = Icons.fingerprint;
|
||||
onPressed = () => model.toggleFingerprint(context); // Disable if fingerprint is false
|
||||
onPressed = () =>
|
||||
model.toggleFingerprint(context); // Disable if fingerprint is false
|
||||
isEnabled = FFAppState().fingerprint;
|
||||
content = FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Ative a autenticação por impressão digital para login seguro.',
|
||||
content = FFLocalizations.of(context).getVariableText(
|
||||
ptText:
|
||||
'Ative a autenticação por impressão digital para login seguro.',
|
||||
enText: 'Enable fingerprint authentication for secure login.',
|
||||
);
|
||||
);
|
||||
break;
|
||||
case 1:
|
||||
icon = Icons.person;
|
||||
onPressed = () => model.enablePerson(context);
|
||||
isEnabled = FFAppState().person;
|
||||
content = FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Exibir código de identificação remota',
|
||||
enText: 'Display remote identification code',
|
||||
);
|
||||
content = FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Compartilhe o código de identificação remota',
|
||||
enText: 'Share the remote identification code',
|
||||
);
|
||||
break;
|
||||
case 2:
|
||||
icon = Icons.notifications;
|
||||
onPressed = model.toggleNotify;
|
||||
onPressed = () => model.toggleNotify(context);
|
||||
isEnabled = FFAppState().notify;
|
||||
content = FFLocalizations.of(context).getVariableText(
|
||||
content = FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Ative para receber sua notificação de acesso',
|
||||
enText: 'Enable to receive your access notification',
|
||||
);
|
||||
);
|
||||
break;
|
||||
case 3:
|
||||
icon = Icons.lock_clock_sharp;
|
||||
icon = Icons.lock;
|
||||
// onLongPress = model.togglePass(context, model);
|
||||
isEnabled = FFAppState().pass;
|
||||
content = FFLocalizations.of(context).getVariableText(
|
||||
content = FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Ative para inserir uma credencial de acesso para o QRCode',
|
||||
enText: 'Enable to enter an access credential for the QRCode',
|
||||
);
|
||||
);
|
||||
break;
|
||||
case 4:
|
||||
icon = Icons.landscape;
|
||||
onPressed = model.localLogout;
|
||||
isEnabled = false;
|
||||
content = FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Ative para se desvincular do local selecionado',
|
||||
enText: 'Enable to unlink from the selected location',
|
||||
);
|
||||
icon = Icons.lock_clock_sharp;
|
||||
// onLongPress = model.togglePass(context, model);
|
||||
isEnabled = FFAppState().panic;
|
||||
content = FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Ative para inserir uma credencial de pânico para o QRCode',
|
||||
enText: 'Enable to enter an panic credential for the QRCode',
|
||||
);
|
||||
break;
|
||||
case 5:
|
||||
icon = Icons.landscape;
|
||||
onPressed = () => model.localUnlink(context);
|
||||
isEnabled = true;
|
||||
content = FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Desative para se desvincular do local selecionado',
|
||||
enText: 'Enable to unlink from the selected location',
|
||||
);
|
||||
break;
|
||||
case 6:
|
||||
icon = Icons.delete;
|
||||
onPressed = () => model.deleteAccount(context);
|
||||
isEnabled = false;
|
||||
content = FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'Delete sua conta e todos os dados associados permanentemente.',
|
||||
isEnabled = true;
|
||||
content = FFLocalizations.of(context).getVariableText(
|
||||
ptText:
|
||||
'Delete sua conta e todos os dados associados permanentemente.',
|
||||
enText: 'Delete your account and all associated data permanently.',
|
||||
);
|
||||
);
|
||||
break;
|
||||
default:
|
||||
throw Exception('Invalid index: $index');
|
||||
}
|
||||
|
||||
return Container(
|
||||
return SizedBox(
|
||||
height: 100,
|
||||
child: GestureDetector(
|
||||
onTap: index != 3 ? onPressed : () {model.togglePass(context);},
|
||||
onTap: () {
|
||||
switch (index) {
|
||||
case 3:
|
||||
model.togglePass(context);
|
||||
break;
|
||||
case 4:
|
||||
model.togglePanic(context);
|
||||
break;
|
||||
default:
|
||||
onPressed();
|
||||
}
|
||||
},
|
||||
child: Row(
|
||||
children: [
|
||||
CircleAvatar(
|
||||
backgroundColor: isEnabled ? FlutterFlowTheme.of(context).primary : FlutterFlowTheme.of(context).alternate,
|
||||
backgroundColor: isEnabled
|
||||
? FlutterFlowTheme.of(context).primary
|
||||
: FlutterFlowTheme.of(context).alternate,
|
||||
child: Icon(
|
||||
icon,
|
||||
color: isEnabled ? FlutterFlowTheme.of(context).primaryBackground : FlutterFlowTheme.of(context).primary,
|
||||
color: isEnabled
|
||||
? FlutterFlowTheme.of(context).primaryBackground
|
||||
: FlutterFlowTheme.of(context).primary,
|
||||
// icon: Icon(icon, color: isEnabled ? FlutterFlowTheme.of(context).primaryBackground : FlutterFlowTheme.of(context).primary, size: 40.0),
|
||||
// onPressed: index != 3 ? onPressed : () {model.togglePass(context);},
|
||||
// borderRadius: 20.0,
|
||||
|
@ -181,13 +208,13 @@ class PreferencesPageWidget extends StatelessWidget {
|
|||
child: Text(
|
||||
content,
|
||||
style: FlutterFlowTheme.of(context).bodySmall.override(
|
||||
fontFamily: 'Nunito',
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.normal,
|
||||
fontStyle: FontStyle.normal,
|
||||
),
|
||||
fontFamily: 'Nunito',
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
fontWeight: FontWeight.normal,
|
||||
fontStyle: FontStyle.normal,
|
||||
),
|
||||
overflow: TextOverflow.clip,
|
||||
),
|
||||
),
|
||||
|
@ -196,4 +223,4 @@ class PreferencesPageWidget extends StatelessWidget {
|
|||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,51 +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;
|
||||
// State field(s) for TextField widget.
|
||||
FocusNode? textFieldFocusNode2;
|
||||
TextEditingController? textController2;
|
||||
String? Function(BuildContext, String?)? textController2Validator;
|
||||
// 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;
|
||||
// State field(s) for TextField widget.
|
||||
FocusNode? textFieldFocusNode4;
|
||||
TextEditingController? textController4;
|
||||
String? Function(BuildContext, String?)? textController4Validator;
|
||||
// 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) {}
|
||||
|
||||
@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,837 +38,46 @@ class _RegisterVisitorPageWidgetState extends State<RegisterVisitorPageWidget> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
context.watch<FFAppState>();
|
||||
|
||||
return GestureDetector(
|
||||
onTap: () => _model.unfocusNode.canRequestFocus
|
||||
? FocusScope.of(context).requestFocus(_model.unfocusNode)
|
||||
: FocusScope.of(context).unfocus(),
|
||||
child: Scaffold(
|
||||
key: scaffoldKey,
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
|
||||
appBar: AppBar(
|
||||
backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
|
||||
automaticallyImplyLeading: false,
|
||||
leading: FlutterFlowIconButton(
|
||||
borderColor: Colors.transparent,
|
||||
borderRadius: 30.0,
|
||||
borderWidth: 1.0,
|
||||
buttonSize: 60.0,
|
||||
icon: Icon(
|
||||
Icons.keyboard_arrow_left,
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
size: 30.0,
|
||||
),
|
||||
onPressed: () async {
|
||||
context.pop();
|
||||
},
|
||||
automaticallyImplyLeading: false,
|
||||
leading: FlutterFlowIconButton(
|
||||
borderColor: Colors.transparent,
|
||||
borderRadius: 30.0,
|
||||
borderWidth: 1.0,
|
||||
buttonSize: 60.0,
|
||||
icon: Icon(
|
||||
Icons.keyboard_arrow_left,
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
size: 30.0,
|
||||
),
|
||||
title: Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'megskb6s' /* Cadastro Visitante */,
|
||||
),
|
||||
style: FlutterFlowTheme.of(context).headlineMedium.override(
|
||||
fontFamily: FlutterFlowTheme.of(context).headlineMediumFamily,
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
fontSize: 15.0,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context).headlineMediumFamily),
|
||||
),
|
||||
),
|
||||
actions: const [],
|
||||
centerTitle: true,
|
||||
elevation: 0.0,
|
||||
onPressed: () async {
|
||||
context.pop();
|
||||
},
|
||||
),
|
||||
body: SafeArea(
|
||||
top: true,
|
||||
child: Align(
|
||||
alignment: const AlignmentDirectional(0.0, 1.0),
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
color: FlutterFlowTheme.of(context).primaryBackground,
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(0.0),
|
||||
bottomRight: Radius.circular(0.0),
|
||||
topLeft: Radius.circular(25.0),
|
||||
topRight: Radius.circular(25.0),
|
||||
),
|
||||
),
|
||||
child: SingleChildScrollView(
|
||||
child: 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: 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)),
|
||||
),
|
||||
),
|
||||
),
|
||||
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',
|
||||
);
|
||||
|
||||
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 showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
enableDrag: false,
|
||||
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: 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.scheduleVisitor?.jsonBody ??
|
||||
''),
|
||||
)}',
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
).then((value) => safeSetState(() {}));
|
||||
}
|
||||
} else {
|
||||
await showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
enableDrag: false,
|
||||
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: 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}',
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
).then((value) => safeSetState(() {}));
|
||||
}
|
||||
|
||||
setState(() {});
|
||||
},
|
||||
text: FFLocalizations.of(context).getText(
|
||||
'okbw0aiu' /* Cadastrar */,
|
||||
),
|
||||
options: FFButtonOptions(
|
||||
width: 250.0,
|
||||
height: 36.0,
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
80.0, 0.0, 80.0, 0.0),
|
||||
iconPadding: const EdgeInsetsDirectional.fromSTEB(
|
||||
0.0, 0.0, 0.0, 0.0),
|
||||
color: FlutterFlowTheme.of(context).primary,
|
||||
textStyle: FlutterFlowTheme.of(context)
|
||||
.titleSmall
|
||||
.override(
|
||||
fontFamily: FlutterFlowTheme.of(context)
|
||||
.titleSmallFamily,
|
||||
color: FlutterFlowTheme.of(context).info,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap()
|
||||
.containsKey(FlutterFlowTheme.of(context)
|
||||
.titleSmallFamily),
|
||||
),
|
||||
borderSide: const BorderSide(
|
||||
color: Colors.transparent,
|
||||
width: 30.0,
|
||||
),
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(15.0),
|
||||
bottomRight: Radius.circular(15.0),
|
||||
topLeft: Radius.circular(15.0),
|
||||
topRight: Radius.circular(15.0),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
]
|
||||
.divide(const SizedBox(height: 10.0))
|
||||
.addToStart(const SizedBox(height: 30.0)),
|
||||
),
|
||||
),
|
||||
),
|
||||
title: Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'megskb6s' /* Cadastro Visitante */,
|
||||
),
|
||||
style: FlutterFlowTheme.of(context).headlineMedium.override(
|
||||
fontFamily: FlutterFlowTheme.of(context).headlineMediumFamily,
|
||||
color: FlutterFlowTheme.of(context).primaryText,
|
||||
fontSize: 15.0,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts.asMap().containsKey(
|
||||
FlutterFlowTheme.of(context).headlineMediumFamily),
|
||||
),
|
||||
),
|
||||
actions: const [],
|
||||
centerTitle: true,
|
||||
elevation: 0.0,
|
||||
),
|
||||
body: const SafeArea(
|
||||
top: true,
|
||||
child: RegisiterVistorTemplateComponentWidget(
|
||||
source: 'RegisterVisitorPage',
|
||||
)),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
import 'package:hub/backend/api_requests/api_calls.dart';
|
||||
import 'package:hub/backend/api_requests/api_manager.dart';
|
||||
|
||||
import 'package:hub/flutter_flow/flutter_flow_model.dart';
|
||||
import 'package:hub/flutter_flow/form_field_controller.dart';
|
||||
import 'package:hub/flutter_flow/internationalization.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';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
class ScheduleCompleteVisitPageModel
|
||||
extends FlutterFlowModel<ScheduleCompleteVisitPageWidget> {
|
||||
|
@ -38,6 +40,18 @@ class ScheduleCompleteVisitPageModel
|
|||
visitorJsonList[index] = updateFn(visitorJsonList[index]);
|
||||
|
||||
String visitorStrList = '0';
|
||||
bool? dropDownValidator1;
|
||||
bool? dropDownValidator2;
|
||||
|
||||
bool isValid() {
|
||||
if ((textController1!.text != '') &&
|
||||
(textController2!.text != '') &&
|
||||
(dropDownValue1 != null && dropDownValue1 != '') &&
|
||||
(dropDownValue2 != null && dropDownValue2 != '')) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// State fields for stateful widgets in this page.
|
||||
|
||||
|
@ -51,15 +65,78 @@ class ScheduleCompleteVisitPageModel
|
|||
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.',
|
||||
);
|
||||
}
|
||||
if (val != null) {
|
||||
try {
|
||||
DateTime startDate = DateFormat('d/M/y H:mm:ss').parse(val);
|
||||
DateTime endDate =
|
||||
DateFormat('d/M/y H:mm:ss').parse(textController2!.text);
|
||||
if (startDate.isAfter(endDate)) {
|
||||
return FFLocalizations.of(context).getVariableText(
|
||||
ptText: 'A data de início deve ser anterior à data de término.',
|
||||
enText: 'Start date must be before end date.',
|
||||
);
|
||||
}
|
||||
if (startDate.isBefore(DateTime.now())) {
|
||||
return FFLocalizations.of(context).getVariableText(
|
||||
enText: 'Start date must be after current date.',
|
||||
ptText: 'A data de início deve ser posterior à data atual.',
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
return '$e';
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
DateTime? datePicked1;
|
||||
// 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.',
|
||||
);
|
||||
}
|
||||
if (val != null) {
|
||||
try {
|
||||
DateTime endDate = DateFormat('d/M/y H:mm:ss').parse(val);
|
||||
DateTime startDate =
|
||||
DateFormat('d/M/y H:mm:ss').parse(textController1!.text);
|
||||
if (endDate.isBefore(startDate)) {
|
||||
return FFLocalizations.of(context).getVariableText(
|
||||
enText: 'End date must be after start date.',
|
||||
ptText: 'A data de término deve ser posterior à data de início.',
|
||||
);
|
||||
}
|
||||
if (endDate.isBefore(DateTime.now())) {
|
||||
return FFLocalizations.of(context).getVariableText(
|
||||
enText: 'End date must be after current date.',
|
||||
ptText: 'A data de término deve ser posterior à data atual.',
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
return '$e';
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
DateTime? datePicked2;
|
||||
// State field(s) for DropDown widget.
|
||||
String? dropDownValue1;
|
||||
FormFieldController<String>? dropDownValueController1;
|
||||
|
||||
// State field(s) for DropDown widget.
|
||||
String? dropDownValue2;
|
||||
FormFieldController<String>? dropDownValueController2;
|
||||
|
@ -69,9 +146,35 @@ class ScheduleCompleteVisitPageModel
|
|||
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;
|
||||
}
|
||||
|
||||
@override
|
||||
void initState(BuildContext context) {}
|
||||
void initState(BuildContext context) {
|
||||
tabBarController = TabController(
|
||||
vsync: Navigator.of(context),
|
||||
length: 2,
|
||||
);
|
||||
|
||||
textFieldFocusNode1 = FocusNode();
|
||||
textController1 = TextEditingController();
|
||||
textController1Validator = _textController1Validator;
|
||||
|
||||
textFieldFocusNode2 = FocusNode();
|
||||
textController2 = TextEditingController();
|
||||
textController2Validator = _textController2Validator;
|
||||
|
||||
textFieldFocusNode3 = FocusNode();
|
||||
textController3 = TextEditingController();
|
||||
textController3Validator = _textController3Validator;
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
|
@ -107,4 +210,4 @@ class ScheduleCompleteVisitPageModel
|
|||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,40 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
|
||||
import '../../../flutter_flow/flutter_flow_theme.dart';
|
||||
import '../../../flutter_flow/flutter_flow_util.dart';
|
||||
|
||||
class AtomTermsOfUse extends StatelessWidget {
|
||||
|
||||
const AtomTermsOfUse({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return InkWell(
|
||||
child: Text(
|
||||
FFLocalizations.of(context).getText(
|
||||
'olf967cj' /* Termo de Uso */,
|
||||
),
|
||||
style: FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
.override(
|
||||
fontFamily:
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMediumFamily,
|
||||
color:
|
||||
FlutterFlowTheme.of(context)
|
||||
.primaryText,
|
||||
fontSize: 14.0,
|
||||
letterSpacing: 0.0,
|
||||
useGoogleFonts: GoogleFonts
|
||||
.asMap()
|
||||
.containsKey(
|
||||
FlutterFlowTheme.of(
|
||||
context)
|
||||
.bodyMediumFamily),
|
||||
),
|
||||
),
|
||||
onTap: () => launchURL('https://freaccess.com.br/pp'),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
enum EnumThrowException {
|
||||
success,
|
||||
error,
|
||||
warning
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hub/components/molecular_components/throw_exception/throw_exception_widget.dart';
|
||||
import 'package:hub/flutter_flow/flutter_flow_util.dart';
|
||||
import 'package:hub/shared/enums/enum_throw_exception.dart';
|
||||
|
||||
class DialogUtil {
|
||||
static const double _height = 350;
|
||||
|
||||
static Future<dynamic> errorDefault(BuildContext context) {
|
||||
return error(context, FFLocalizations.of(context).getVariableText(
|
||||
ptText: "Falha ao efetuar operação, Tente Novamente mais tarde.",
|
||||
enText: "Failed to perform operation, please try again later."
|
||||
));
|
||||
}
|
||||
|
||||
static Future<dynamic> error(BuildContext context, String message) async {
|
||||
return await showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Dialog(
|
||||
child: SizedBox(
|
||||
height: _height,
|
||||
child: Padding(padding: MediaQuery.viewInsetsOf(context), child: ThrowExceptionWidget(msg: message, type: EnumThrowException.error))
|
||||
)
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
static Future<dynamic> warning(BuildContext context, String message) async {
|
||||
return await showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Dialog(
|
||||
child: SizedBox(
|
||||
height: _height,
|
||||
child: Padding(padding: MediaQuery.viewInsetsOf(context), child: ThrowExceptionWidget(msg: message, type: EnumThrowException.warning))
|
||||
)
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
static Future<dynamic> success(BuildContext context, String message) async {
|
||||
return await showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return Dialog(
|
||||
child: SizedBox(
|
||||
height: _height,
|
||||
child: Padding(padding: MediaQuery.viewInsetsOf(context), child: ThrowExceptionWidget(msg: message, type: EnumThrowException.success))
|
||||
)
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
import 'dart:developer';
|
||||
|
||||
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
|
||||
import 'package:hub/backend/api_requests/api_calls.dart';
|
||||
|
||||
class LogUtil {
|
||||
|
||||
static void requestAPIFailed(String url, String body, String reason, dynamic error, StackTrace stack) async {
|
||||
FirebaseCrashlytics.instance.setCustomKey('URL', "${PhpGroup.getBaseUrl()}/$url");
|
||||
FirebaseCrashlytics.instance.setCustomKey('Body', body);
|
||||
|
||||
await FirebaseCrashlytics.instance.recordError(error, stack, reason: reason);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
class ValidatorUtil {
|
||||
|
||||
static bool isValidEmail(String email) {
|
||||
if (RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$').hasMatch(email)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
16
pubspec.lock
16
pubspec.lock
|
@ -345,6 +345,22 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.17.2"
|
||||
firebase_crashlytics:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: firebase_crashlytics
|
||||
sha256: ad7510d9bcf1f40fc895944942f553a4c5603acb4715c0d6386dd587f82f6ae5
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.0.1"
|
||||
firebase_crashlytics_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: firebase_crashlytics_platform_interface
|
||||
sha256: "318589f1da3bb858872002fa20170234566f0fb080669a8256c85a81513a802a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.6.37"
|
||||
firebase_messaging:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
|
@ -107,6 +107,7 @@ dependencies:
|
|||
flutter_riverpod: ^2.5.1
|
||||
qr_flutter: ^4.1.0
|
||||
permission_handler: ^11.3.1
|
||||
firebase_crashlytics: ^4.0.1
|
||||
|
||||
dependency_overrides:
|
||||
http: 1.2.1
|
||||
|
|
Loading…
Reference in New Issue