Updating to latest FlutterFlow output.

This commit is contained in:
FlutterFlow 2024-06-10 19:41:03 +00:00
parent c12d33c1db
commit 6bdfcf371c
66 changed files with 4061 additions and 7649 deletions

View File

@ -5,8 +5,7 @@
<uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<application <application
android:label="FREHub" android:label="FREHub"
tools:replace="android:label" tools:replace="android:label"

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -28,6 +28,7 @@ require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelpe
flutter_ios_podfile_setup flutter_ios_podfile_setup
target 'Runner' do target 'Runner' do
pod 'GoogleUtilities'
use_frameworks! :linkage => :static use_frameworks! :linkage => :static
use_modular_headers! use_modular_headers!
@ -43,3 +44,9 @@ post_install do |installer|
end end
end end
end end
target 'ImageNotification' do
use_frameworks! :linkage => :static
pod 'Firebase/Messaging'
pod 'GoogleUtilities'
end

View File

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

View File

@ -52,6 +52,11 @@
<key>NSPhotoLibraryUsageDescription</key> <key>NSPhotoLibraryUsageDescription</key>
<string>In order to upload data, this app requires permission to access the photo library.</string> <string>In order to upload data, this app requires permission to access the photo library.</string>
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
</array>
<key>UILaunchStoryboardName</key> <key>UILaunchStoryboardName</key>

View File

@ -2,5 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>aps-environment</key>
<string>development</string>
</dict> </dict>
</plist> </plist>

View File

@ -1,12 +1,7 @@
import '/application_components/molecular_components/throw_exception/throw_exception_widget.dart';
import '/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import '/custom_code/actions/index.dart' as actions;
import '/flutter_flow/random_data_util.dart' as random_data;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
Future repeatVisitScheduleAction( Future repeatVisitScheduleActionBlock(
BuildContext context, { BuildContext context, {
List<dynamic>? visitorJsonList, List<dynamic>? visitorJsonList,
String? visitorStrList, String? visitorStrList,
@ -56,220 +51,3 @@ Future repeatVisitScheduleAction(
}.withoutNulls, }.withoutNulls,
); );
} }
Future<Color> manageStatusColorAction(
BuildContext context, {
required String? visitStatusStr,
}) async {
if (visitStatusStr == 'A') {
return FlutterFlowTheme.of(context).success;
} else if ((visitStatusStr == 'C') ||
(visitStatusStr == 'F') ||
(visitStatusStr == 'B') ||
(visitStatusStr == 'I')) {
return FlutterFlowTheme.of(context).error;
}
return FlutterFlowTheme.of(context).warning;
}
Future singInActionApp(
BuildContext context, {
String? emailAdress,
String? password,
}) async {
String? devUUID;
ApiCallResponse? loginCall;
await Future.wait([
Future(() async {
FFAppState().email = emailAdress!;
}),
Future(() async {
FFAppState().passwd = password!;
}),
]);
if ((FFAppState().email != '') &&
(FFAppState().passwd != '')) {
devUUID = await actions.getDevUUID();
FFAppState().devUUID = devUUID!;
loginCall = await PhpGroup.loginCall.call(
email: FFAppState().email,
password: FFAppState().passwd,
uuid: FFAppState().devUUID,
type: FFAppState().device,
description: random_data.randomString(
10,
10,
true,
false,
false,
),
);
FFAppState().userUUID = PhpGroup.loginCall.userUUID(
(loginCall.jsonBody ?? ''),
)!;
if (PhpGroup.loginCall.error(
(loginCall.jsonBody ?? ''),
) ==
false) {
FFAppState().isLogged = true;
context.goNamed(
'homePage',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.fade,
),
},
);
} else {
await showModalBottomSheet(
isScrollControlled: true,
backgroundColor: Colors.transparent,
enableDrag: false,
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: ThrowExceptionWidget(
msg: PhpGroup.loginCall.msg(
(loginCall?.jsonBody ?? ''),
)!,
),
);
},
);
FFAppState().email = '';
FFAppState().passwd = '';
FFAppState().update(() {});
}
} else {
return;
}
}
Future<bool> signUpActionApp(
BuildContext context, {
required String? name,
String? passwd,
required String? email,
String? device,
}) async {
ApiCallResponse? registerCall;
if ((email != null && email != '') &&
(passwd != null && passwd != '') &&
(name != null && name != '')) {
registerCall = await PhpGroup.registerCall.call(
name: name,
password: passwd,
email: email,
token: random_data.randomString(
36,
36,
false,
false,
true,
),
uuid: random_data.randomString(
36,
36,
false,
false,
true,
),
tipo: device,
descricao: random_data.randomString(
36,
36,
true,
false,
false,
),
);
if (PhpGroup.registerCall.error(
(registerCall.jsonBody ?? ''),
) ==
false) {
return true;
}
await showDialog(
context: context,
builder: (alertDialogContext) {
return AlertDialog(
title: const Text('ERROR2'),
content: const Text('ERROR2'),
actions: [
TextButton(
onPressed: () => Navigator.pop(alertDialogContext),
child: const Text('ERROR2 '),
),
],
);
},
);
return false;
} else {
await showDialog(
context: context,
builder: (alertDialogContext) {
return AlertDialog(
title: const Text('ERROR1'),
content: const Text('ERROR1'),
actions: [
TextButton(
onPressed: () => Navigator.pop(alertDialogContext),
child: const Text('ERROR1 '),
),
],
);
},
);
return false;
}
}
Future forgotPasswdAction(
BuildContext context, {
required String? email,
}) async {
ApiCallResponse? forgotPasswd;
forgotPasswd = await PhpGroup.forgotPasswordCall.call(
email: email,
);
if (PhpGroup.forgotPasswordCall.error(
(forgotPasswd.jsonBody ?? ''),
) ==
false) {
context.pushNamed(
'LoginPage',
queryParameters: {
'device': serializeParam(
FFAppState().device,
ParamType.String,
),
}.withoutNulls,
);
} else {
return;
}
}
Future cachingLoginActionApp(BuildContext context) async {
if (FFAppState().isLogged == true) {
context.pushNamed('homePage');
} else {
if (isAndroid == true) {
FFAppState().device = 'Android';
} else if (isiOS == true) {
FFAppState().device = 'iOS';
} else {
FFAppState().device = 'Web';
}
}
}

View File

@ -2,7 +2,6 @@ import '/application_components/organism_components/bottom_arrow_linked_locals_c
import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/custom_functions.dart' as functions; import '/flutter_flow/custom_functions.dart' as functions;
import '/flutter_flow/random_data_util.dart' as random_data;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -44,12 +43,16 @@ class _LocalProfileComponentWidgetState
Widget build(BuildContext context) { Widget build(BuildContext context) {
context.watch<FFAppState>(); context.watch<FFAppState>();
return Visibility( return Container(
visible: random_data.randomInteger(0, 10) != null, height: 284.0,
child: Container(
decoration: const BoxDecoration(), decoration: const BoxDecoration(),
child: Align( child: Column(
alignment: const AlignmentDirectional(0.0, -1.0), mainAxisSize: MainAxisSize.max,
children: [
Stack(
children: [
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Material( child: Material(
color: Colors.transparent, color: Colors.transparent,
elevation: 0.0, elevation: 0.0,
@ -62,11 +65,23 @@ class _LocalProfileComponentWidgetState
color: const Color(0xFF1AAB5F), color: const Color(0xFF1AAB5F),
), ),
), ),
child: Row( ),
mainAxisSize: MainAxisSize.max, ),
children: [ ),
Align( Align(
alignment: const AlignmentDirectional(-1.0, 0.0), alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding(
padding: const EdgeInsets.all(24.0),
child: Container(
width: 200.0,
height: 200.0,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground,
shape: BoxShape.circle,
),
alignment: const AlignmentDirectional(0.0, 0.0),
child: Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding( child: Padding(
padding: const EdgeInsets.all(2.0), padding: const EdgeInsets.all(2.0),
child: InkWell( child: InkWell(
@ -98,15 +113,15 @@ class _LocalProfileComponentWidgetState
'https://freaccess.com.br/freaccess/Images/Clients/${FFAppState().cliUUID}.png', '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', 'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/7ftdetkzc3s0/360_F_64676383_LdbmhiNM6Ypzb3FM4PPuFP9rHe7ri8Ju.jpg',
), ),
width: 80.0, width: 300.0,
height: 80.0, height: 200.0,
fit: BoxFit.cover, fit: BoxFit.cover,
alignment: const Alignment(0.0, 0.0), alignment: const Alignment(0.0, 0.0),
errorBuilder: (context, error, stackTrace) => errorBuilder: (context, error, stackTrace) =>
Image.asset( Image.asset(
'assets/images/error_image.svg', 'assets/images/error_image.svg',
width: 80.0, width: 300.0,
height: 80.0, height: 200.0,
fit: BoxFit.cover, fit: BoxFit.cover,
alignment: const Alignment(0.0, 0.0), alignment: const Alignment(0.0, 0.0),
), ),
@ -115,6 +130,11 @@ class _LocalProfileComponentWidgetState
), ),
), ),
), ),
),
),
),
],
),
Column( Column(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
@ -124,27 +144,18 @@ class _LocalProfileComponentWidgetState
functions.convertToUppercase(FFAppState().local), functions.convertToUppercase(FFAppState().local),
'NOME DO LOCAL', 'NOME DO LOCAL',
), ),
style: style: FlutterFlowTheme.of(context).labelMedium.override(
FlutterFlowTheme.of(context).labelMedium.override(
fontFamily: 'Nunito', fontFamily: 'Nunito',
color: FlutterFlowTheme.of(context).info, color: FlutterFlowTheme.of(context).primaryText,
fontSize: 14.0, fontSize: 20.0,
letterSpacing: 0.0, letterSpacing: 0.0,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
useGoogleFonts: useGoogleFonts: GoogleFonts.asMap().containsKey('Nunito'),
GoogleFonts.asMap().containsKey('Nunito'),
), ),
), ),
], ],
), ),
] ],
.divide(const SizedBox(width: 20.0))
.addToStart(const SizedBox(width: 20.0))
.addToEnd(const SizedBox(width: 20.0)),
),
),
),
),
), ),
); );
} }

View File

@ -1,8 +1,10 @@
import '/application_components/molecular_components/option_selection_modal/option_selection_modal_widget.dart';
import '/flutter_flow/flutter_flow_icon_button.dart'; import '/flutter_flow/flutter_flow_icon_button.dart';
import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart';
import 'menu_list_view_component_model.dart'; import 'menu_list_view_component_model.dart';
export 'menu_list_view_component_model.dart'; export 'menu_list_view_component_model.dart';
@ -10,13 +12,9 @@ class MenuListViewComponentWidget extends StatefulWidget {
const MenuListViewComponentWidget({ const MenuListViewComponentWidget({
super.key, super.key,
required this.changeMenuStyle, required this.changeMenuStyle,
required this.registerVisitorAction,
required this.scheduleVisitAction,
}); });
final Future Function()? changeMenuStyle; final Future Function()? changeMenuStyle;
final Future Function()? registerVisitorAction;
final Future Function()? scheduleVisitAction;
@override @override
State<MenuListViewComponentWidget> createState() => State<MenuListViewComponentWidget> createState() =>
@ -48,6 +46,8 @@ class _MenuListViewComponentWidgetState
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
context.watch<FFAppState>();
return Wrap( return Wrap(
spacing: 0.0, spacing: 0.0,
runSpacing: 0.0, runSpacing: 0.0,
@ -62,46 +62,42 @@ class _MenuListViewComponentWidgetState
padding: const EdgeInsetsDirectional.fromSTEB(5.0, 0.0, 5.0, 0.0), padding: const EdgeInsetsDirectional.fromSTEB(5.0, 0.0, 5.0, 0.0),
child: Container( child: Container(
width: double.infinity, width: double.infinity,
height: 125.0, height: 106.0,
decoration: const BoxDecoration(), decoration: const BoxDecoration(),
child: ListView( child: ListView(
padding: const EdgeInsets.fromLTRB( padding: EdgeInsets.zero,
10.0,
0,
10.0,
0,
),
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
children: [ children: [
Padding( Padding(
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 20.0), padding: const EdgeInsetsDirectional.fromSTEB(10.0, 10.0, 0.0, 1.0),
child: InkWell( child: InkWell(
splashColor: Colors.transparent, splashColor: Colors.transparent,
focusColor: Colors.transparent, focusColor: Colors.transparent,
hoverColor: Colors.transparent, hoverColor: Colors.transparent,
highlightColor: Colors.transparent, highlightColor: Colors.transparent,
onTap: () async { onTap: () async {
await widget.scheduleVisitAction?.call(); await showModalBottomSheet(
isScrollControlled: true,
backgroundColor: Colors.transparent,
enableDrag: false,
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: const OptionSelectionModalWidget(),
);
},
).then((value) => safeSetState(() {}));
}, },
child: Container( child: Container(
width: 100.0, width: 100.0,
height: double.infinity, height: double.infinity,
decoration: BoxDecoration( decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground, color: FlutterFlowTheme.of(context).primaryBackground,
boxShadow: [
BoxShadow(
blurRadius: 4.0,
color: FlutterFlowTheme.of(context).customColor5,
offset: const Offset(
0.0,
2.0,
),
)
],
borderRadius: BorderRadius.circular(24.0), borderRadius: BorderRadius.circular(24.0),
shape: BoxShape.rectangle, shape: BoxShape.rectangle,
border: Border.all( border: Border.all(
color: FlutterFlowTheme.of(context).alternate, color: FlutterFlowTheme.of(context).customColor1,
width: 0.5, width: 0.5,
), ),
), ),
@ -186,34 +182,36 @@ Visita */
), ),
), ),
Padding( Padding(
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 20.0), padding: const EdgeInsetsDirectional.fromSTEB(10.0, 10.0, 0.0, 1.0),
child: InkWell( child: InkWell(
splashColor: Colors.transparent, splashColor: Colors.transparent,
focusColor: Colors.transparent, focusColor: Colors.transparent,
hoverColor: Colors.transparent, hoverColor: Colors.transparent,
highlightColor: Colors.transparent, highlightColor: Colors.transparent,
onTap: () async { onTap: () async {
await widget.registerVisitorAction?.call(); context.pushNamed(
'registerVisitorPage',
queryParameters: {
'userUUID': serializeParam(
FFAppState().userUUID,
ParamType.String,
),
'devUUID': serializeParam(
FFAppState().devUUID,
ParamType.String,
),
}.withoutNulls,
);
}, },
child: Container( child: Container(
width: 100.0, width: 100.0,
height: double.infinity, height: 0.0,
decoration: BoxDecoration( decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground, color: FlutterFlowTheme.of(context).primaryBackground,
boxShadow: [
BoxShadow(
blurRadius: 4.0,
color: FlutterFlowTheme.of(context).customColor5,
offset: const Offset(
0.0,
2.0,
),
)
],
borderRadius: BorderRadius.circular(24.0), borderRadius: BorderRadius.circular(24.0),
shape: BoxShape.rectangle, shape: BoxShape.rectangle,
border: Border.all( border: Border.all(
color: FlutterFlowTheme.of(context).alternate, color: FlutterFlowTheme.of(context).customColor1,
width: 0.5, width: 0.5,
), ),
), ),
@ -298,26 +296,16 @@ Visitante */
), ),
), ),
Padding( Padding(
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 20.0), padding: const EdgeInsetsDirectional.fromSTEB(10.0, 10.0, 0.0, 1.0),
child: Container( child: Container(
width: 100.0, width: 100.0,
height: double.infinity, height: double.infinity,
decoration: BoxDecoration( decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground, color: FlutterFlowTheme.of(context).primaryBackground,
boxShadow: [
BoxShadow(
blurRadius: 4.0,
color: FlutterFlowTheme.of(context).customColor5,
offset: const Offset(
0.0,
2.0,
),
)
],
borderRadius: BorderRadius.circular(24.0), borderRadius: BorderRadius.circular(24.0),
shape: BoxShape.rectangle, shape: BoxShape.rectangle,
border: Border.all( border: Border.all(
color: FlutterFlowTheme.of(context).alternate, color: FlutterFlowTheme.of(context).customColor1,
width: 0.5, width: 0.5,
), ),
), ),
@ -400,26 +388,16 @@ Condomínio */
), ),
), ),
Padding( Padding(
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 20.0), padding: const EdgeInsetsDirectional.fromSTEB(10.0, 10.0, 0.0, 1.0),
child: Container( child: Container(
width: 100.0, width: 100.0,
height: double.infinity, height: double.infinity,
decoration: BoxDecoration( decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground, color: FlutterFlowTheme.of(context).primaryBackground,
boxShadow: [
BoxShadow(
blurRadius: 4.0,
color: FlutterFlowTheme.of(context).customColor5,
offset: const Offset(
0.0,
2.0,
),
)
],
borderRadius: BorderRadius.circular(24.0), borderRadius: BorderRadius.circular(24.0),
shape: BoxShape.rectangle, shape: BoxShape.rectangle,
border: Border.all( border: Border.all(
color: FlutterFlowTheme.of(context).alternate, color: FlutterFlowTheme.of(context).customColor1,
width: 0.5, width: 0.5,
), ),
), ),
@ -502,26 +480,108 @@ Pet */
), ),
), ),
Padding( Padding(
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 20.0), padding: const EdgeInsetsDirectional.fromSTEB(10.0, 10.0, 0.0, 1.0),
child: Container( child: Container(
width: 100.0, width: 100.0,
height: double.infinity, height: double.infinity,
decoration: BoxDecoration( decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground, color: FlutterFlowTheme.of(context).primaryBackground,
boxShadow: [
BoxShadow(
blurRadius: 4.0,
color: FlutterFlowTheme.of(context).customColor5,
offset: const Offset(
0.0,
2.0,
),
)
],
borderRadius: BorderRadius.circular(24.0), borderRadius: BorderRadius.circular(24.0),
shape: BoxShape.rectangle, shape: BoxShape.rectangle,
border: Border.all( border: Border.all(
color: FlutterFlowTheme.of(context).alternate, color: FlutterFlowTheme.of(context).customColor1,
width: 0.5,
),
),
child: Padding(
padding: const EdgeInsets.all(4.0),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Align(
alignment: const AlignmentDirectional(-1.0, 0.0),
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
8.0, 0.0, 0.0, 0.0),
child: Container(
width: 30.0,
height: 30.0,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context)
.primaryBackground,
shape: BoxShape.circle,
),
alignment:
const AlignmentDirectional(0.0, 0.0),
child: Icon(
FFIcons.kvector3,
color: FlutterFlowTheme.of(context)
.accent1,
size: 24.0,
),
),
),
),
),
],
),
),
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Text(
FFLocalizations.of(context).getText(
'xlp8dyn6' /* Agendar
Visita */
,
),
style: FlutterFlowTheme.of(context)
.titleLarge
.override(
fontFamily: 'Nunito',
color: FlutterFlowTheme.of(context)
.primaryText,
fontSize: 14.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts.asMap()
.containsKey('Nunito'),
),
),
),
],
),
),
].divide(const SizedBox(height: 0.0)),
),
),
),
),
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(10.0, 10.0, 0.0, 1.0),
child: Container(
width: 100.0,
height: double.infinity,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground,
borderRadius: BorderRadius.circular(24.0),
shape: BoxShape.rectangle,
border: Border.all(
color: FlutterFlowTheme.of(context).customColor1,
width: 0.5, width: 0.5,
), ),
), ),
@ -603,7 +663,99 @@ de Acesso */
), ),
), ),
), ),
].divide(const SizedBox(width: 15.0)), Padding(
padding: const EdgeInsetsDirectional.fromSTEB(10.0, 10.0, 0.0, 1.0),
child: Container(
width: 100.0,
height: double.infinity,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground,
borderRadius: BorderRadius.circular(24.0),
shape: BoxShape.rectangle,
border: Border.all(
color: FlutterFlowTheme.of(context).customColor1,
width: 0.5,
),
),
child: Padding(
padding: const EdgeInsets.all(4.0),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Align(
alignment: const AlignmentDirectional(-1.0, 0.0),
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
8.0, 0.0, 0.0, 0.0),
child: Container(
width: 30.0,
height: 30.0,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context)
.primaryBackground,
shape: BoxShape.circle,
),
alignment:
const AlignmentDirectional(0.0, 0.0),
child: Icon(
FFIcons.kfast,
color: FlutterFlowTheme.of(context)
.accent1,
size: 24.0,
),
),
),
),
),
],
),
),
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Text(
FFLocalizations.of(context).getText(
'45gqx8e0' /* Agenda
Auto-Visita */
,
),
style: FlutterFlowTheme.of(context)
.titleLarge
.override(
fontFamily: 'Nunito',
color: FlutterFlowTheme.of(context)
.primaryText,
fontSize: 14.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts.asMap()
.containsKey('Nunito'),
),
),
),
],
),
),
].divide(const SizedBox(height: 0.0)),
),
),
),
),
],
), ),
), ),
), ),

View File

@ -10,14 +10,10 @@ export 'menu_staggered_view_component_model.dart';
class MenuStaggeredViewComponentWidget extends StatefulWidget { class MenuStaggeredViewComponentWidget extends StatefulWidget {
const MenuStaggeredViewComponentWidget({ const MenuStaggeredViewComponentWidget({
super.key, super.key,
required this.changeMenuStyleAction, required this.changeMenuStyle,
required this.registerVisitorOptAction,
required this.scheduleVisitOptAction,
}); });
final Future Function()? changeMenuStyleAction; final Future Function()? changeMenuStyle;
final Future Function()? registerVisitorOptAction;
final Future Function()? scheduleVisitOptAction;
@override @override
State<MenuStaggeredViewComponentWidget> createState() => State<MenuStaggeredViewComponentWidget> createState() =>
@ -61,7 +57,7 @@ class _MenuStaggeredViewComponentWidgetState
children: [ children: [
Container( Container(
width: double.infinity, width: double.infinity,
height: MediaQuery.sizeOf(context).height * 0.35, height: 430.0,
decoration: const BoxDecoration(), decoration: const BoxDecoration(),
child: Padding( child: Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
@ -72,39 +68,38 @@ class _MenuStaggeredViewComponentWidgetState
), ),
crossAxisSpacing: 10.0, crossAxisSpacing: 10.0,
mainAxisSpacing: 10.0, mainAxisSpacing: 10.0,
itemCount: 5, itemCount: 7,
shrinkWrap: true, shrinkWrap: true,
itemBuilder: (context, index) { itemBuilder: (context, index) {
return [ return [
() => InkWell( () => Padding(
splashColor: Colors.transparent, padding: EdgeInsets.all(valueOrDefault<double>(
focusColor: Colors.transparent, () {
hoverColor: Colors.transparent, if (MediaQuery.sizeOf(context).width <
highlightColor: Colors.transparent, kBreakpointSmall) {
onTap: () async { return 0.0;
await widget.scheduleVisitOptAction?.call(); } else if (MediaQuery.sizeOf(context).width <
}, kBreakpointMedium) {
return 24.0;
} else if (MediaQuery.sizeOf(context).width <
kBreakpointLarge) {
return 24.0;
} else {
return 0.0;
}
}(),
0.0,
)),
child: Container( child: Container(
width: 100.0, width: 100.0,
height: 100.0, height: 100.0,
decoration: BoxDecoration( decoration: BoxDecoration(
color: color:
FlutterFlowTheme.of(context).primaryBackground, FlutterFlowTheme.of(context).primaryBackground,
boxShadow: [
BoxShadow(
blurRadius: 4.0,
color:
FlutterFlowTheme.of(context).customColor5,
offset: const Offset(
0.0,
2.0,
),
)
],
borderRadius: BorderRadius.circular(24.0), borderRadius: BorderRadius.circular(24.0),
shape: BoxShape.rectangle, shape: BoxShape.rectangle,
border: Border.all( border: Border.all(
color: FlutterFlowTheme.of(context).alternate, color: FlutterFlowTheme.of(context).customColor1,
width: 0.5, width: 0.5,
), ),
), ),
@ -141,7 +136,7 @@ class _MenuStaggeredViewComponentWidgetState
alignment: const AlignmentDirectional( alignment: const AlignmentDirectional(
0.0, 0.0), 0.0, 0.0),
child: Icon( child: Icon(
FFIcons.kvector1, FFIcons.kfast,
color: color:
FlutterFlowTheme.of(context) FlutterFlowTheme.of(context)
.accent1, .accent1,
@ -165,8 +160,8 @@ class _MenuStaggeredViewComponentWidgetState
const AlignmentDirectional(0.0, 0.0), const AlignmentDirectional(0.0, 0.0),
child: Text( child: Text(
FFLocalizations.of(context).getText( FFLocalizations.of(context).getText(
'ee33l0ms' /* Agendar 'jn7p6pj6' /* Agenda
Visita */ Auto-Visita */
, ,
), ),
style: FlutterFlowTheme.of(context) style: FlutterFlowTheme.of(context)
@ -193,35 +188,34 @@ Visita */
), ),
), ),
), ),
() => InkWell( () => Padding(
splashColor: Colors.transparent, padding: EdgeInsets.all(valueOrDefault<double>(
focusColor: Colors.transparent, () {
hoverColor: Colors.transparent, if (MediaQuery.sizeOf(context).width <
highlightColor: Colors.transparent, kBreakpointSmall) {
onTap: () async { return 0.0;
await widget.registerVisitorOptAction?.call(); } else if (MediaQuery.sizeOf(context).width <
}, kBreakpointMedium) {
return 24.0;
} else if (MediaQuery.sizeOf(context).width <
kBreakpointLarge) {
return 24.0;
} else {
return 0.0;
}
}(),
0.0,
)),
child: Container( child: Container(
width: 100.0, width: 100.0,
height: 100.0, height: 100.0,
decoration: BoxDecoration( decoration: BoxDecoration(
color: color:
FlutterFlowTheme.of(context).primaryBackground, FlutterFlowTheme.of(context).primaryBackground,
boxShadow: [
BoxShadow(
blurRadius: 4.0,
color:
FlutterFlowTheme.of(context).customColor5,
offset: const Offset(
0.0,
2.0,
),
)
],
borderRadius: BorderRadius.circular(24.0), borderRadius: BorderRadius.circular(24.0),
shape: BoxShape.rectangle, shape: BoxShape.rectangle,
border: Border.all( border: Border.all(
color: FlutterFlowTheme.of(context).alternate, color: FlutterFlowTheme.of(context).customColor1,
width: 0.5, width: 0.5,
), ),
), ),
@ -282,8 +276,8 @@ Visita */
const AlignmentDirectional(0.0, 0.0), const AlignmentDirectional(0.0, 0.0),
child: Text( child: Text(
FFLocalizations.of(context).getText( FFLocalizations.of(context).getText(
'ya37l3jt' /* Cadastrar 'yymmdtyv' /* Cadastrar
Visitante */ Visitante */
, ,
), ),
style: FlutterFlowTheme.of(context) style: FlutterFlowTheme.of(context)
@ -310,25 +304,34 @@ Visita */
), ),
), ),
), ),
() => Container( () => Padding(
padding: EdgeInsets.all(valueOrDefault<double>(
() {
if (MediaQuery.sizeOf(context).width <
kBreakpointSmall) {
return 0.0;
} else if (MediaQuery.sizeOf(context).width <
kBreakpointMedium) {
return 24.0;
} else if (MediaQuery.sizeOf(context).width <
kBreakpointLarge) {
return 24.0;
} else {
return 0.0;
}
}(),
0.0,
)),
child: Container(
width: 100.0, width: 100.0,
height: 100.0, height: 100.0,
decoration: BoxDecoration( decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground, color:
boxShadow: [ FlutterFlowTheme.of(context).primaryBackground,
BoxShadow(
blurRadius: 4.0,
color: FlutterFlowTheme.of(context).customColor5,
offset: const Offset(
0.0,
2.0,
),
)
],
borderRadius: BorderRadius.circular(24.0), borderRadius: BorderRadius.circular(24.0),
shape: BoxShape.rectangle, shape: BoxShape.rectangle,
border: Border.all( border: Border.all(
color: FlutterFlowTheme.of(context).alternate, color: FlutterFlowTheme.of(context).customColor1,
width: 0.5, width: 0.5,
), ),
), ),
@ -362,8 +365,8 @@ Visita */
.primaryBackground, .primaryBackground,
shape: BoxShape.circle, shape: BoxShape.circle,
), ),
alignment: alignment: const AlignmentDirectional(
const AlignmentDirectional(0.0, 0.0), 0.0, 0.0),
child: Icon( child: Icon(
FFIcons.khome, FFIcons.khome,
color: color:
@ -385,10 +388,11 @@ Visita */
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Align( Align(
alignment: const AlignmentDirectional(0.0, 0.0), alignment:
const AlignmentDirectional(0.0, 0.0),
child: Text( child: Text(
FFLocalizations.of(context).getText( FFLocalizations.of(context).getText(
'h8s3adu8' /* Vincular 'f2jbm9jz' /* Vincular
Condomínio */ Condomínio */
, ,
), ),
@ -415,25 +419,35 @@ Condomínio */
), ),
), ),
), ),
() => Container( ),
() => Padding(
padding: EdgeInsets.all(valueOrDefault<double>(
() {
if (MediaQuery.sizeOf(context).width <
kBreakpointSmall) {
return 0.0;
} else if (MediaQuery.sizeOf(context).width <
kBreakpointMedium) {
return 24.0;
} else if (MediaQuery.sizeOf(context).width <
kBreakpointLarge) {
return 24.0;
} else {
return 0.0;
}
}(),
0.0,
)),
child: Container(
width: 100.0, width: 100.0,
height: 100.0, height: 100.0,
decoration: BoxDecoration( decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground, color:
boxShadow: [ FlutterFlowTheme.of(context).primaryBackground,
BoxShadow(
blurRadius: 4.0,
color: FlutterFlowTheme.of(context).customColor5,
offset: const Offset(
0.0,
2.0,
),
)
],
borderRadius: BorderRadius.circular(24.0), borderRadius: BorderRadius.circular(24.0),
shape: BoxShape.rectangle, shape: BoxShape.rectangle,
border: Border.all( border: Border.all(
color: FlutterFlowTheme.of(context).alternate, color: FlutterFlowTheme.of(context).customColor1,
width: 0.5, width: 0.5,
), ),
), ),
@ -467,8 +481,8 @@ Condomínio */
.primaryBackground, .primaryBackground,
shape: BoxShape.circle, shape: BoxShape.circle,
), ),
alignment: alignment: const AlignmentDirectional(
const AlignmentDirectional(0.0, 0.0), 0.0, 0.0),
child: Icon( child: Icon(
FFIcons.kpets, FFIcons.kpets,
color: color:
@ -490,10 +504,11 @@ Condomínio */
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Align( Align(
alignment: const AlignmentDirectional(0.0, 0.0), alignment:
const AlignmentDirectional(0.0, 0.0),
child: Text( child: Text(
FFLocalizations.of(context).getText( FFLocalizations.of(context).getText(
'j6tfixen' /* Cadastrar 'rs5a7h6m' /* Cadastrar
Pet */ Pet */
, ,
), ),
@ -520,25 +535,35 @@ Pet */
), ),
), ),
), ),
() => Container( ),
() => Padding(
padding: EdgeInsets.all(valueOrDefault<double>(
() {
if (MediaQuery.sizeOf(context).width <
kBreakpointSmall) {
return 0.0;
} else if (MediaQuery.sizeOf(context).width <
kBreakpointMedium) {
return 24.0;
} else if (MediaQuery.sizeOf(context).width <
kBreakpointLarge) {
return 24.0;
} else {
return 0.0;
}
}(),
0.0,
)),
child: Container(
width: 100.0, width: 100.0,
height: 100.0, height: 100.0,
decoration: BoxDecoration( decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground, color:
boxShadow: [ FlutterFlowTheme.of(context).primaryBackground,
BoxShadow(
blurRadius: 4.0,
color: FlutterFlowTheme.of(context).customColor5,
offset: const Offset(
0.0,
2.0,
),
)
],
borderRadius: BorderRadius.circular(24.0), borderRadius: BorderRadius.circular(24.0),
shape: BoxShape.rectangle, shape: BoxShape.rectangle,
border: Border.all( border: Border.all(
color: FlutterFlowTheme.of(context).alternate, color: FlutterFlowTheme.of(context).customColor1,
width: 0.5, width: 0.5,
), ),
), ),
@ -572,8 +597,240 @@ Pet */
.primaryBackground, .primaryBackground,
shape: BoxShape.circle, shape: BoxShape.circle,
), ),
alignment: const AlignmentDirectional(
0.0, 0.0),
child: Icon(
FFIcons.kvector1,
color:
FlutterFlowTheme.of(context)
.accent1,
size: 24.0,
),
),
),
),
),
],
),
),
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Align(
alignment: alignment:
const AlignmentDirectional(0.0, 0.0), const AlignmentDirectional(0.0, 0.0),
child: Text(
FFLocalizations.of(context).getText(
'if2zuaok' /* Agendar
Visita */
,
),
style: FlutterFlowTheme.of(context)
.titleLarge
.override(
fontFamily: 'Nunito',
color:
FlutterFlowTheme.of(context)
.primaryText,
fontSize: 14.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts:
GoogleFonts.asMap()
.containsKey('Nunito'),
),
),
),
],
),
),
].divide(const SizedBox(height: 0.0)),
),
),
),
),
() => Padding(
padding: EdgeInsets.all(valueOrDefault<double>(
() {
if (MediaQuery.sizeOf(context).width <
kBreakpointSmall) {
return 0.0;
} else if (MediaQuery.sizeOf(context).width <
kBreakpointMedium) {
return 24.0;
} else if (MediaQuery.sizeOf(context).width <
kBreakpointLarge) {
return 24.0;
} else {
return 0.0;
}
}(),
0.0,
)),
child: Container(
width: 100.0,
height: 100.0,
decoration: BoxDecoration(
color:
FlutterFlowTheme.of(context).primaryBackground,
borderRadius: BorderRadius.circular(24.0),
shape: BoxShape.rectangle,
border: Border.all(
color: FlutterFlowTheme.of(context).customColor1,
width: 0.5,
),
),
child: Padding(
padding: const EdgeInsets.all(4.0),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Align(
alignment:
const AlignmentDirectional(-1.0, 0.0),
child: Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(
8.0, 0.0, 0.0, 0.0),
child: Container(
width: 30.0,
height: 30.0,
decoration: BoxDecoration(
color:
FlutterFlowTheme.of(context)
.primaryBackground,
shape: BoxShape.circle,
),
alignment: const AlignmentDirectional(
0.0, 0.0),
child: Icon(
FFIcons.kvector3,
color:
FlutterFlowTheme.of(context)
.accent1,
size: 24.0,
),
),
),
),
),
],
),
),
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Align(
alignment:
const AlignmentDirectional(0.0, 0.0),
child: Text(
FFLocalizations.of(context).getText(
'r4mjqq6s' /* Agendar
Visita */
,
),
style: FlutterFlowTheme.of(context)
.titleLarge
.override(
fontFamily: 'Nunito',
color:
FlutterFlowTheme.of(context)
.primaryText,
fontSize: 14.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts:
GoogleFonts.asMap()
.containsKey('Nunito'),
),
),
),
],
),
),
].divide(const SizedBox(height: 0.0)),
),
),
),
),
() => Padding(
padding: EdgeInsets.all(valueOrDefault<double>(
() {
if (MediaQuery.sizeOf(context).width <
kBreakpointSmall) {
return 0.0;
} else if (MediaQuery.sizeOf(context).width <
kBreakpointMedium) {
return 24.0;
} else if (MediaQuery.sizeOf(context).width <
kBreakpointLarge) {
return 24.0;
} else {
return 0.0;
}
}(),
0.0,
)),
child: Container(
width: 100.0,
height: 100.0,
decoration: BoxDecoration(
color:
FlutterFlowTheme.of(context).primaryBackground,
borderRadius: BorderRadius.circular(24.0),
shape: BoxShape.rectangle,
border: Border.all(
color: FlutterFlowTheme.of(context).customColor1,
width: 0.5,
),
),
child: Padding(
padding: const EdgeInsets.all(4.0),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Align(
alignment:
const AlignmentDirectional(-1.0, 0.0),
child: Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(
8.0, 0.0, 0.0, 0.0),
child: Container(
width: 30.0,
height: 30.0,
decoration: BoxDecoration(
color:
FlutterFlowTheme.of(context)
.primaryBackground,
shape: BoxShape.circle,
),
alignment: const AlignmentDirectional(
0.0, 0.0),
child: Icon( child: Icon(
FFIcons.kvector2, FFIcons.kvector2,
color: color:
@ -595,10 +852,11 @@ Pet */
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Align( Align(
alignment: const AlignmentDirectional(0.0, 0.0), alignment:
const AlignmentDirectional(0.0, 0.0),
child: Text( child: Text(
FFLocalizations.of(context).getText( FFLocalizations.of(context).getText(
'9tli4i2x' /* QR Code 'cilu7ief' /* QR Code
de Acesso */ de Acesso */
, ,
), ),
@ -625,6 +883,7 @@ de Acesso */
), ),
), ),
), ),
),
][index](); ][index]();
}, },
), ),
@ -655,7 +914,7 @@ de Acesso */
color: FlutterFlowTheme.of(context).primary, color: FlutterFlowTheme.of(context).primary,
), ),
onPressed: () async { onPressed: () async {
await widget.changeMenuStyleAction?.call(); await widget.changeMenuStyle?.call();
}, },
), ),
), ),

View File

@ -921,6 +921,7 @@ class _ScheduleVisitDetailWidgetState extends State<ScheduleVisitDetailWidget> {
await PhpGroup.postScheduleVisitCall.call( await PhpGroup.postScheduleVisitCall.call(
devUUID: FFAppState().devUUID, devUUID: FFAppState().devUUID,
userUUID: FFAppState().userUUID, userUUID: FFAppState().userUUID,
cliUUID: FFAppState().cliUUID,
atividade: 'putVisita', atividade: 'putVisita',
devDesc: widget.visitObsStr, devDesc: widget.visitObsStr,
idVisitante: widget.visitorStrList, idVisitante: widget.visitorStrList,
@ -931,7 +932,6 @@ class _ScheduleVisitDetailWidgetState extends State<ScheduleVisitDetailWidget> {
functions.extractIdToStr(widget.visitResonStr!), functions.extractIdToStr(widget.visitResonStr!),
idNAC: functions.extractIdToStr(widget.visitLevelStr!), idNAC: functions.extractIdToStr(widget.visitLevelStr!),
obs: widget.visitObsStr, obs: widget.visitObsStr,
cliID: FFAppState().cliUUID,
); );
if (PhpGroup.postScheduleVisitCall.error( if (PhpGroup.postScheduleVisitCall.error(
(_model.postScheduleVisit?.jsonBody ?? ''), (_model.postScheduleVisit?.jsonBody ?? ''),

View File

@ -4,10 +4,12 @@ import 'view_visit_detail_widget.dart' show ViewVisitDetailWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class ViewVisitDetailModel extends FlutterFlowModel<ViewVisitDetailWidget> { class ViewVisitDetailModel extends FlutterFlowModel<ViewVisitDetailWidget> {
/// Local state fields for this component.
Color? statusColor;
/// State fields for stateful widgets in this component. /// State fields for stateful widgets in this component.
// Stores action output result for [Action Block - manageStatusColorAction] action in viewVisitDetail widget.
Color? visitStatusColor;
// State field(s) for TextField widget. // State field(s) for TextField widget.
FocusNode? textFieldFocusNode1; FocusNode? textFieldFocusNode1;
TextEditingController? textController1; TextEditingController? textController1;

View File

@ -4,7 +4,6 @@ import '/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_icon_button.dart'; import '/flutter_flow/flutter_flow_icon_button.dart';
import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import '/actions/actions.dart' as action_blocks;
import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart'; import 'package:flutter/scheduler.dart';
@ -65,14 +64,23 @@ class _ViewVisitDetailWidgetState extends State<ViewVisitDetailWidget> {
// On component load action. // On component load action.
SchedulerBinding.instance.addPostFrameCallback((_) async { SchedulerBinding.instance.addPostFrameCallback((_) async {
_model.visitStatusColor = await action_blocks.manageStatusColorAction( if (widget.visitStatusStr == 'A') {
context, _model.statusColor = FlutterFlowTheme.of(context).primary;
visitStatusStr: widget.visitStatusStr, setState(() {});
); } else if ((widget.visitStatusStr == 'C') ||
(widget.visitStatusStr == 'F') ||
(widget.visitStatusStr == 'B') ||
(widget.visitStatusStr == 'I')) {
_model.statusColor = FlutterFlowTheme.of(context).error;
setState(() {});
} else {
_model.statusColor = FlutterFlowTheme.of(context).warning;
setState(() {});
}
}); });
_model.textController1 ??= TextEditingController( _model.textController1 ??=
text: widget.visitTempStr == 'null' ? '' : widget.visitTempStr); TextEditingController(text: widget.visitorStrList);
_model.textFieldFocusNode1 ??= FocusNode(); _model.textFieldFocusNode1 ??= FocusNode();
_model.textController2 ??= _model.textController2 ??=
@ -759,10 +767,7 @@ class _ViewVisitDetailWidgetState extends State<ViewVisitDetailWidget> {
width: double.infinity, width: double.infinity,
height: 35.0, height: 35.0,
decoration: BoxDecoration( decoration: BoxDecoration(
color: valueOrDefault<Color>( color: _model.statusColor,
_model.visitStatusColor,
FlutterFlowTheme.of(context).primary,
),
borderRadius: const BorderRadius.only( borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(0.0), bottomLeft: Radius.circular(0.0),
bottomRight: Radius.circular(0.0), bottomRight: Radius.circular(0.0),

View File

@ -1,4 +1,3 @@
import '/application_components/molecular_components/option_selection_modal/option_selection_modal_widget.dart';
import '/application_components/organism_components/menu_list_view_component/menu_list_view_component_widget.dart'; import '/application_components/organism_components/menu_list_view_component/menu_list_view_component_widget.dart';
import '/application_components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart'; import '/application_components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
@ -35,23 +34,4 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
Future changeMenuStyle(BuildContext context) async { Future changeMenuStyle(BuildContext context) async {
isGrid = !isGrid; isGrid = !isGrid;
} }
Future scheduleVisitOptAction(BuildContext context) async {
await showModalBottomSheet(
isScrollControlled: true,
backgroundColor: Colors.transparent,
enableDrag: false,
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: const OptionSelectionModalWidget(),
);
},
);
}
Future registerVisitorOptAction(BuildContext context) async {
context.pushNamed('registerVisitorPage');
}
} }

View File

@ -50,14 +50,6 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
await _model.changeMenuStyle(context); await _model.changeMenuStyle(context);
setState(() {}); setState(() {});
}, },
registerVisitorAction: () async {
await _model.registerVisitorOptAction(context);
setState(() {});
},
scheduleVisitAction: () async {
await _model.scheduleVisitOptAction(context);
setState(() {});
},
), ),
); );
} else { } else {
@ -66,18 +58,10 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
updateCallback: () => setState(() {}), updateCallback: () => setState(() {}),
updateOnChange: true, updateOnChange: true,
child: MenuStaggeredViewComponentWidget( child: MenuStaggeredViewComponentWidget(
changeMenuStyleAction: () async { changeMenuStyle: () async {
await _model.changeMenuStyle(context); await _model.changeMenuStyle(context);
setState(() {}); setState(() {});
}, },
registerVisitorOptAction: () async {
await _model.registerVisitorOptAction(context);
setState(() {});
},
scheduleVisitOptAction: () async {
await _model.scheduleVisitOptAction(context);
setState(() {});
},
), ),
); );
} }

View File

@ -1,12 +0,0 @@
import '/flutter_flow/flutter_flow_util.dart';
import 'visit_history_component_widget.dart' show VisitHistoryComponentWidget;
import 'package:flutter/material.dart';
class VisitHistoryComponentModel
extends FlutterFlowModel<VisitHistoryComponentWidget> {
@override
void initState(BuildContext context) {}
@override
void dispose() {}
}

View File

@ -1,388 +0,0 @@
import '/application_components/molecular_components/opt_modal/opt_modal_widget.dart';
import '/application_components/templates_components/visit_details_modal/visit_details_modal_widget.dart';
import '/backend/api_requests/api_calls.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/custom_functions.dart' as functions;
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart';
import 'visit_history_component_model.dart';
export 'visit_history_component_model.dart';
class VisitHistoryComponentWidget extends StatefulWidget {
const VisitHistoryComponentWidget({
super.key,
this.parameter1,
});
final FFUploadedFile? parameter1;
@override
State<VisitHistoryComponentWidget> createState() =>
_VisitHistoryComponentWidgetState();
}
class _VisitHistoryComponentWidgetState
extends State<VisitHistoryComponentWidget> {
late VisitHistoryComponentModel _model;
@override
void setState(VoidCallback callback) {
super.setState(callback);
_model.onUpdate();
}
@override
void initState() {
super.initState();
_model = createModel(context, () => VisitHistoryComponentModel());
}
@override
void dispose() {
_model.maybeDispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
context.watch<FFAppState>();
return Container(
width: double.infinity,
height: 900.0,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground,
),
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
FlutterFlowIconButton(
borderColor: Colors.transparent,
borderRadius: 20.0,
borderWidth: 1.0,
buttonSize: 40.0,
icon: Icon(
Icons.settings_sharp,
color: FlutterFlowTheme.of(context).primary,
size: 24.0,
),
onPressed: () async {
await showModalBottomSheet(
isScrollControlled: true,
backgroundColor: Colors.transparent,
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: const OptModalWidget(),
);
},
).then((value) => safeSetState(() {}));
},
),
],
),
Expanded(
child: Padding(
padding: const EdgeInsets.all(14.0),
child: FutureBuilder<ApiCallResponse>(
future: PhpGroup.getVisitsCall.call(
devUUID: FFAppState().devUUID,
userUUID: FFAppState().userUUID,
cliID: FFAppState().cliUUID,
atividade: 'getVisitas',
),
builder: (context, snapshot) {
// Customize what your widget looks like when it's loading.
if (!snapshot.hasData) {
return Center(
child: SizedBox(
width: 50.0,
height: 50.0,
child: SpinKitCircle(
color: FlutterFlowTheme.of(context).primary,
size: 50.0,
),
),
);
}
final gridViewGetVisitsResponse = snapshot.data!;
return Builder(
builder: (context) {
final visitHistory = (PhpGroup.getVisitsCall
.visitasList(
gridViewGetVisitsResponse.jsonBody,
)
?.toList() ??
[])
.take(10)
.toList();
return GridView.builder(
padding: EdgeInsets.zero,
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
crossAxisSpacing: 10.0,
mainAxisSpacing: 10.0,
childAspectRatio: 1.0,
),
scrollDirection: Axis.vertical,
itemCount: visitHistory.length,
itemBuilder: (context, visitHistoryIndex) {
final visitHistoryItem =
visitHistory[visitHistoryIndex];
return Container(
width: double.infinity,
height: double.infinity,
decoration: const BoxDecoration(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(50.0),
bottomRight: Radius.circular(50.0),
topLeft: Radius.circular(25.0),
topRight: Radius.circular(25.0),
),
shape: BoxShape.rectangle,
),
child: Stack(
children: [
Container(
width: double.infinity,
height: double.infinity,
decoration: BoxDecoration(
color: valueOrDefault<Color>(
() {
if (functions.jsonToStr(getJsonField(
visitHistoryItem,
r'''$.VAW_STATUS''',
)) ==
'\"A\"') {
return FlutterFlowTheme.of(context)
.success;
} else if (functions
.jsonToStr(getJsonField(
visitHistoryItem,
r'''$.VAW_STATUS''',
)) ==
'\"C\"') {
return FlutterFlowTheme.of(context)
.error;
} else if (functions
.jsonToStr(getJsonField(
visitHistoryItem,
r'''$.VAW_STATUS''',
)) ==
'\"I\"') {
return FlutterFlowTheme.of(context)
.warning;
} else {
return FlutterFlowTheme.of(context)
.primary;
}
}(),
FlutterFlowTheme.of(context).primary,
),
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(10.0),
bottomRight: Radius.circular(10.0),
topLeft: Radius.circular(25.0),
topRight: Radius.circular(25.0),
),
shape: BoxShape.rectangle,
),
),
InkWell(
splashColor: Colors.transparent,
focusColor: Colors.transparent,
hoverColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () async {
await showModalBottomSheet(
isScrollControlled: true,
backgroundColor: Colors.transparent,
enableDrag: false,
useSafeArea: true,
context: context,
builder: (context) {
return Padding(
padding:
MediaQuery.viewInsetsOf(context),
child: VisitDetailsModalWidget(
visitStatusStr: getJsonField(
visitHistoryItem,
r'''$.VAW_STATUS ''',
).toString(),
visitStartDateStr: getJsonField(
visitHistoryItem,
r'''$.VAW_DTINICIO''',
).toString(),
visitEndDateStr: getJsonField(
visitHistoryItem,
r'''$.VAW_DTFIM''',
).toString(),
visitReasonStr: getJsonField(
visitHistoryItem,
r'''$.MOT_DESCRICAO''',
).toString(),
visitLevelStr: getJsonField(
visitHistoryItem,
r'''$.NAC_DESCRICAO''',
).toString(),
visitTempStr: getJsonField(
visitHistoryItem,
r'''$.VTE_UNICA ''',
).toString(),
visitObsStr: getJsonField(
visitHistoryItem,
r'''$.VAW_OBS''',
).toString(),
visitorImgPath:
valueOrDefault<String>(
'https://freaccess.com.br/freaccess/getImage.php?devUUID=${FFAppState().devUUID}&userUUID=${FFAppState().userUUID}&cliID=${FFAppState().cliUUID}&atividade=getFoto&Documento=${getJsonField(
visitHistoryItem,
r'''$.VTE_DOCUMENTO''',
).toString()}&tipo=E',
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/7ftdetkzc3s0/360_F_64676383_LdbmhiNM6Ypzb3FM4PPuFP9rHe7ri8Ju.jpg',
),
visitorStrList: getJsonField(
visitHistoryItem,
r'''$.VTE_DOCUMENTO''',
).toString(),
visitIdStr: getJsonField(
visitHistoryItem,
r'''$.VAW_ID''',
).toString(),
visitorJsonList: PhpGroup
.getVisitsCall
.visitasList(
gridViewGetVisitsResponse
.jsonBody,
),
updateToggleIdx: () async {
setState(() {});
},
repeatVisitSchedule: () async {},
),
);
},
).then((value) => safeSetState(() {}));
},
child: ClipRRect(
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: CachedNetworkImage(
fadeInDuration:
const Duration(milliseconds: 500),
fadeOutDuration:
const Duration(milliseconds: 500),
imageUrl: valueOrDefault<String>(
'https://freaccess.com.br/freaccess/getImage.php?devUUID=${FFAppState().devUUID}&userUUID=${FFAppState().userUUID}&cliID=${FFAppState().cliUUID}&atividade=getFoto&Documento=${getJsonField(
visitHistoryItem,
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: double.infinity,
height: double.infinity,
fit: BoxFit.cover,
),
),
),
Align(
alignment: const AlignmentDirectional(0.0, -1.0),
child: Container(
width: 200.0,
height: 20.0,
decoration: BoxDecoration(
color: valueOrDefault<Color>(
() {
if (functions.jsonToStr(getJsonField(
visitHistoryItem,
r'''$.VAW_STATUS''',
)) ==
'\"A\"') {
return FlutterFlowTheme.of(context)
.success;
} else if (functions
.jsonToStr(getJsonField(
visitHistoryItem,
r'''$.VAW_STATUS''',
)) ==
'\"C\"') {
return FlutterFlowTheme.of(context)
.error;
} else if (functions
.jsonToStr(getJsonField(
visitHistoryItem,
r'''$.VAW_STATUS''',
)) ==
'\"I\"') {
return FlutterFlowTheme.of(context)
.warning;
} else {
return FlutterFlowTheme.of(context)
.primary;
}
}(),
FlutterFlowTheme.of(context).primary,
),
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(0.0),
bottomRight: Radius.circular(0.0),
topLeft: Radius.circular(25.0),
topRight: Radius.circular(25.0),
),
),
alignment: const AlignmentDirectional(0.0, 0.0),
child: Text(
getJsonField(
visitHistoryItem,
r'''$.VTE_NOME''',
).toString(),
textAlign: TextAlign.center,
style: FlutterFlowTheme.of(context)
.bodyMedium
.override(
fontFamily:
FlutterFlowTheme.of(context)
.bodyMediumFamily,
color: FlutterFlowTheme.of(context)
.info,
fontSize: 12.0,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.bodyMediumFamily),
),
),
),
),
],
),
);
},
);
},
);
},
),
),
),
],
),
);
}
}

View File

@ -5,7 +5,6 @@ import '/flutter_flow/flutter_flow_icon_button.dart';
import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/flutter_flow_widgets.dart'; import '/flutter_flow/flutter_flow_widgets.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -326,19 +325,8 @@ class _VisitorSearchComponentWidgetState
ClipRRect( ClipRRect(
borderRadius: borderRadius:
BorderRadius.circular(40.0), BorderRadius.circular(40.0),
child: CachedNetworkImage( child: Image.asset(
fadeInDuration: 'assets/images/360_F_64676383_LdbmhiNM6Ypzb3FM4PPuFP9rHe7ri8Ju.jpg',
const Duration(milliseconds: 500),
fadeOutDuration:
const Duration(milliseconds: 500),
imageUrl:
valueOrDefault<String>(
'https://freaccess.com.br/freaccess/getImage.php?devUUID=${FFAppState().devUUID}&userUUID=${FFAppState().userUUID}&cliID=${FFAppState().cliUUID}&atividade=getFoto&Documento=${getJsonField(
visitorItem,
r'''$.VTE_DOCUMENTO''',
).toString()}&tipo=E',
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/7ftdetkzc3s0/360_F_64676383_LdbmhiNM6Ypzb3FM4PPuFP9rHe7ri8Ju.jpg',
),
width: 60.0, width: 60.0,
height: 60.0, height: 60.0,
fit: BoxFit.cover, fit: BoxFit.cover,

View File

@ -1,17 +0,0 @@
import '/flutter_flow/flutter_flow_util.dart';
import 'fast_pass_page_widget.dart' show FastPassPageWidget;
import 'package:flutter/material.dart';
class FastPassPageModel extends FlutterFlowModel<FastPassPageWidget> {
/// State fields for stateful widgets in this page.
final unfocusNode = FocusNode();
@override
void initState(BuildContext context) {}
@override
void dispose() {
unfocusNode.dispose();
}
}

View File

@ -1,44 +0,0 @@
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import 'package:flutter/material.dart';
import 'fast_pass_page_model.dart';
export 'fast_pass_page_model.dart';
class FastPassPageWidget extends StatefulWidget {
const FastPassPageWidget({super.key});
@override
State<FastPassPageWidget> createState() => _FastPassPageWidgetState();
}
class _FastPassPageWidgetState extends State<FastPassPageWidget> {
late FastPassPageModel _model;
final scaffoldKey = GlobalKey<ScaffoldState>();
@override
void initState() {
super.initState();
_model = createModel(context, () => FastPassPageModel());
}
@override
void dispose() {
_model.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () => _model.unfocusNode.canRequestFocus
? FocusScope.of(context).requestFocus(_model.unfocusNode)
: FocusScope.of(context).unfocus(),
child: Scaffold(
key: scaffoldKey,
backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
),
);
}
}

View File

@ -52,7 +52,7 @@ class _ForgotPasswordPageWidgetState extends State<ForgotPasswordPageWidget> {
children: [ children: [
if (isWeb == false) if (isWeb == false)
Align( Align(
alignment: const AlignmentDirectional(-1.0, 1.0), alignment: const AlignmentDirectional(-1.0, -1.0),
child: FlutterFlowIconButton( child: FlutterFlowIconButton(
borderColor: Colors.transparent, borderColor: Colors.transparent,
borderRadius: 30.0, borderRadius: 30.0,
@ -141,7 +141,7 @@ class _ForgotPasswordPageWidgetState extends State<ForgotPasswordPageWidget> {
padding: const EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0), padding: const EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0),
child: Text( child: Text(
FFLocalizations.of(context).getText( FFLocalizations.of(context).getText(
'gfvplb0h' /* ESQUECEU SUA SENHA? */, 'lpduiuif' /* ESQUECEU SUA SENHA? */,
), ),
style: FlutterFlowTheme.of(context).headlineMedium.override( style: FlutterFlowTheme.of(context).headlineMedium.override(
fontFamily: 'Outfit', fontFamily: 'Outfit',
@ -158,7 +158,7 @@ class _ForgotPasswordPageWidgetState extends State<ForgotPasswordPageWidget> {
padding: const EdgeInsetsDirectional.fromSTEB(16.0, 4.0, 16.0, 4.0), padding: const EdgeInsetsDirectional.fromSTEB(16.0, 4.0, 16.0, 4.0),
child: Text( child: Text(
FFLocalizations.of(context).getText( FFLocalizations.of(context).getText(
'azssgpdi' /* Não se preucupe nós vamos te a... */, '8t05j98w' /* Não se preucupe nós vamos te a... */,
), ),
style: FlutterFlowTheme.of(context).labelMedium.override( style: FlutterFlowTheme.of(context).labelMedium.override(
fontFamily: 'Plus Jakarta Sans', fontFamily: 'Plus Jakarta Sans',
@ -182,7 +182,7 @@ class _ForgotPasswordPageWidgetState extends State<ForgotPasswordPageWidget> {
obscureText: false, obscureText: false,
decoration: InputDecoration( decoration: InputDecoration(
labelText: FFLocalizations.of(context).getText( labelText: FFLocalizations.of(context).getText(
'0o139961' /* Email */, '4gcoci7a' /* Email */,
), ),
labelStyle: labelStyle:
FlutterFlowTheme.of(context).labelMedium.override( FlutterFlowTheme.of(context).labelMedium.override(
@ -195,7 +195,7 @@ class _ForgotPasswordPageWidgetState extends State<ForgotPasswordPageWidget> {
.containsKey('Plus Jakarta Sans'), .containsKey('Plus Jakarta Sans'),
), ),
hintText: FFLocalizations.of(context).getText( hintText: FFLocalizations.of(context).getText(
'aanw1fp3' /* digite o seu email..... */, 'a7p2iikz' /* digite o seu email..... */,
), ),
hintStyle: hintStyle:
FlutterFlowTheme.of(context).labelMedium.override( FlutterFlowTheme.of(context).labelMedium.override(
@ -296,7 +296,7 @@ class _ForgotPasswordPageWidgetState extends State<ForgotPasswordPageWidget> {
if (shouldSetState) setState(() {}); if (shouldSetState) setState(() {});
}, },
text: FFLocalizations.of(context).getText( text: FFLocalizations.of(context).getText(
'e7hdgc4q' /* Enviar */, 'z9ghb8dz' /* Enviar */,
), ),
options: FFButtonOptions( options: FFButtonOptions(
width: 270.0, width: 270.0,

View File

@ -14,7 +14,14 @@ import 'home_page_model.dart';
export 'home_page_model.dart'; export 'home_page_model.dart';
class HomePageWidget extends StatefulWidget { class HomePageWidget extends StatefulWidget {
const HomePageWidget({super.key}); const HomePageWidget({
super.key,
required this.userUUID,
required this.devUUID,
});
final String? userUUID;
final String? devUUID;
@override @override
State<HomePageWidget> createState() => _HomePageWidgetState(); State<HomePageWidget> createState() => _HomePageWidgetState();
@ -829,16 +836,7 @@ class _HomePageWidgetState extends State<HomePageWidget> {
FFAppState().isLogged = false; FFAppState().isLogged = false;
setState(() {}); setState(() {});
context.goNamed( context.pushNamed('WelcomePage');
'onBoardingPage',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.scale,
alignment: Alignment.bottomCenter,
),
},
);
}, },
text: FFLocalizations.of(context).getText( text: FFLocalizations.of(context).getText(
'xx0db4wi' /* Sair */, 'xx0db4wi' /* Sair */,
@ -846,7 +844,7 @@ class _HomePageWidgetState extends State<HomePageWidget> {
options: FFButtonOptions( options: FFButtonOptions(
height: 40.0, height: 40.0,
padding: const EdgeInsetsDirectional.fromSTEB( padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 0.0), 24.0, 0.0, 24.0, 0.0),
iconPadding: const EdgeInsetsDirectional.fromSTEB( iconPadding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 0.0), 0.0, 0.0, 0.0, 0.0),
color: const Color(0x00D70000), color: const Color(0x00D70000),
@ -900,7 +898,7 @@ class _HomePageWidgetState extends State<HomePageWidget> {
Expanded( Expanded(
child: Container( child: Container(
width: 100.0, width: 100.0,
height: 100.0, height: 120.0,
decoration: const BoxDecoration( decoration: const BoxDecoration(
color: Color(0xFF1AAB5F), color: Color(0xFF1AAB5F),
), ),
@ -909,9 +907,8 @@ class _HomePageWidgetState extends State<HomePageWidget> {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Align( Align(
alignment: const AlignmentDirectional(0.0, 1.0), alignment: const AlignmentDirectional(0.0, 0.0),
child: Container( child: Container(
height: 50.0,
decoration: const BoxDecoration(), decoration: const BoxDecoration(),
child: Align( child: Align(
alignment: const AlignmentDirectional(0.0, 0.0), alignment: const AlignmentDirectional(0.0, 0.0),
@ -935,7 +932,7 @@ class _HomePageWidgetState extends State<HomePageWidget> {
icon: const Icon( icon: const Icon(
Icons.menu_rounded, Icons.menu_rounded,
color: Colors.white, color: Colors.white,
size: 28.0, size: 34.0,
), ),
onPressed: () async { onPressed: () async {
scaffoldKey.currentState! scaffoldKey.currentState!
@ -1002,35 +999,10 @@ class _HomePageWidgetState extends State<HomePageWidget> {
), ),
), ),
), ),
Align( Container(
alignment: const AlignmentDirectional(0.0, 1.0),
child: Container(
width: 100.0, width: 100.0,
height: 50.0, height: 100.0,
decoration: const BoxDecoration(), decoration: const BoxDecoration(),
child: Align(
alignment: const AlignmentDirectional(1.0, 1.0),
child: FlutterFlowIconButton(
borderColor:
FlutterFlowTheme.of(context)
.primary,
borderRadius: 20.0,
borderWidth: 1.0,
buttonSize: 40.0,
fillColor: FlutterFlowTheme.of(context)
.accent1,
icon: Icon(
Icons.notifications_sharp,
color:
FlutterFlowTheme.of(context).info,
size: 24.0,
),
onPressed: () {
print('IconButton pressed ...');
},
),
),
),
), ),
], ],
), ),

View File

@ -1,10 +1,12 @@
import '/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import 'sign_in_component_widget.dart' show SignInComponentWidget; import 'login_page_widget.dart' show LoginPageWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class SignInComponentModel extends FlutterFlowModel<SignInComponentWidget> { class LoginPageModel extends FlutterFlowModel<LoginPageWidget> {
/// State fields for stateful widgets in this component. /// State fields for stateful widgets in this page.
final unfocusNode = FocusNode();
// State field(s) for emailAddress widget. // State field(s) for emailAddress widget.
FocusNode? emailAddressFocusNode; FocusNode? emailAddressFocusNode;
TextEditingController? emailAddressTextController; TextEditingController? emailAddressTextController;
@ -14,6 +16,8 @@ class SignInComponentModel extends FlutterFlowModel<SignInComponentWidget> {
TextEditingController? passwordTextController; TextEditingController? passwordTextController;
late bool passwordVisibility; late bool passwordVisibility;
String? Function(BuildContext, String?)? passwordTextControllerValidator; String? Function(BuildContext, String?)? passwordTextControllerValidator;
// Stores action output result for [Backend Call - API (login)] action in signInButtonLoginForm widget.
ApiCallResponse? smallDisplayApi;
@override @override
void initState(BuildContext context) { void initState(BuildContext context) {
@ -22,6 +26,7 @@ class SignInComponentModel extends FlutterFlowModel<SignInComponentWidget> {
@override @override
void dispose() { void dispose() {
unfocusNode.dispose();
emailAddressFocusNode?.dispose(); emailAddressFocusNode?.dispose();
emailAddressTextController?.dispose(); emailAddressTextController?.dispose();

View File

@ -1,12 +1,15 @@
import '/application_components/molecular_components/throw_exception/throw_exception_widget.dart';
import '/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_animations.dart'; import '/flutter_flow/flutter_flow_animations.dart';
import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/flutter_flow_widgets.dart'; import '/flutter_flow/flutter_flow_widgets.dart';
import '/actions/actions.dart' as action_blocks; import '/flutter_flow/random_data_util.dart' as random_data;
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_animate/flutter_animate.dart'; import 'package:flutter_animate/flutter_animate.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart';
import 'login_page_model.dart'; import 'login_page_model.dart';
export 'login_page_model.dart'; export 'login_page_model.dart';
@ -88,6 +91,8 @@ class _LoginPageWidgetState extends State<LoginPageWidget>
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
context.watch<FFAppState>();
return GestureDetector( return GestureDetector(
onTap: () => _model.unfocusNode.canRequestFocus onTap: () => _model.unfocusNode.canRequestFocus
? FocusScope.of(context).requestFocus(_model.unfocusNode) ? FocusScope.of(context).requestFocus(_model.unfocusNode)
@ -141,21 +146,23 @@ class _LoginPageWidgetState extends State<LoginPageWidget>
child: Text( child: Text(
FFLocalizations.of(context) FFLocalizations.of(context)
.getText( .getText(
'0113wf5c' /* VAMOS LA! ENTRE COM A SUA CONT... */, 'uem0mca5' /* VAMOS LA! ENTRE COM A SUA CONT... */,
), ),
textAlign: TextAlign.start, textAlign: TextAlign.start,
style: FlutterFlowTheme.of( style:
context) FlutterFlowTheme.of(context)
.displaySmall .displaySmall
.override( .override(
fontFamily: fontFamily:
'Plus Jakarta Sans', 'Plus Jakarta Sans',
color: FlutterFlowTheme.of( color:
FlutterFlowTheme.of(
context) context)
.primaryText, .primaryText,
fontSize: 24.0, fontSize: 24.0,
letterSpacing: 0.0, letterSpacing: 0.0,
fontWeight: FontWeight.w500, fontWeight:
FontWeight.normal,
useGoogleFonts: GoogleFonts useGoogleFonts: GoogleFonts
.asMap() .asMap()
.containsKey( .containsKey(
@ -236,7 +243,7 @@ class _LoginPageWidgetState extends State<LoginPageWidget>
FFLocalizations.of( FFLocalizations.of(
context) context)
.getText( .getText(
'f2go5a71' /* Email */, '90ls8ppo' /* Email */,
), ),
labelStyle: labelStyle:
FlutterFlowTheme.of( FlutterFlowTheme.of(
@ -364,7 +371,7 @@ class _LoginPageWidgetState extends State<LoginPageWidget>
FFLocalizations.of( FFLocalizations.of(
context) context)
.getText( .getText(
'paon3y0v' /* Senha */, 'rvlumyaw' /* Senha */,
), ),
labelStyle: labelStyle:
FlutterFlowTheme.of( FlutterFlowTheme.of(
@ -507,21 +514,182 @@ class _LoginPageWidgetState extends State<LoginPageWidget>
child: FFButtonWidget( child: FFButtonWidget(
onPressed: onPressed:
() async { () async {
await action_blocks var shouldSetState =
.singInActionApp( false;
context, await Future
emailAdress: _model .wait([
Future(
() async {
FFAppState()
.email =
_model
.emailAddressTextController .emailAddressTextController
.text, .text;
password: _model setState(
() {});
}),
Future(
() async {
FFAppState()
.passwd =
_model
.passwordTextController .passwordTextController
.text, .text;
setState(
() {});
}),
]);
if ((FFAppState()
.email !=
'') &&
(FFAppState()
.passwd !=
'')) {
FFAppState()
.devUUID =
random_data
.randomString(
36,
36,
false,
false,
true,
); );
setState(() {});
_model.smallDisplayApi =
await PhpGroup
.loginCall
.call(
email:
FFAppState()
.email,
password:
FFAppState()
.passwd,
uuid: FFAppState()
.devUUID,
type: FFAppState()
.device,
description:
'',
);
shouldSetState =
true;
FFAppState()
.userUUID =
PhpGroup
.loginCall
.userUUID(
(_model.smallDisplayApi
?.jsonBody ??
''),
)!;
setState(() {});
if (PhpGroup
.loginCall
.error(
(_model.smallDisplayApi
?.jsonBody ??
''),
) ==
false) {
FFAppState()
.isLogged =
true;
setState(
() {});
context
.goNamed(
'homePage',
queryParameters:
{
'userUUID':
serializeParam(
FFAppState()
.userUUID,
ParamType
.String,
),
'devUUID':
serializeParam(
FFAppState()
.devUUID,
ParamType
.String,
),
}.withoutNulls,
extra: <String,
dynamic>{
kTransitionInfoKey:
const TransitionInfo(
hasTransition:
true,
transitionType:
PageTransitionType.fade,
),
},
);
} 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:
PhpGroup.loginCall.msg(
(_model.smallDisplayApi?.jsonBody ?? ''),
)!,
),
),
);
},
).then((value) =>
safeSetState(
() {}));
setState(() {
_model
.emailAddressTextController
?.clear();
_model
.passwordTextController
?.clear();
});
}
} else {
if (shouldSetState) {
setState(
() {});
}
return;
}
if (shouldSetState) {
setState(() {});
}
}, },
text: FFLocalizations text: FFLocalizations
.of(context) .of(context)
.getText( .getText(
'wmbzwstw' /* Entrar */, '2d3903lt' /* Entrar */,
), ),
options: options:
FFButtonOptions( FFButtonOptions(
@ -596,7 +764,7 @@ class _LoginPageWidgetState extends State<LoginPageWidget>
text: FFLocalizations text: FFLocalizations
.of(context) .of(context)
.getText( .getText(
'j8567afe' /* Cadastrar */, 'zj6pyujp' /* Cadastrar */,
), ),
options: options:
FFButtonOptions( FFButtonOptions(
@ -682,7 +850,7 @@ class _LoginPageWidgetState extends State<LoginPageWidget>
text: FFLocalizations text: FFLocalizations
.of(context) .of(context)
.getText( .getText(
'y3wd9q18' /* Entrar */, 'iqhyif1d' /* Entrar */,
), ),
options: options:
FFButtonOptions( FFButtonOptions(
@ -763,7 +931,7 @@ class _LoginPageWidgetState extends State<LoginPageWidget>
text: FFLocalizations text: FFLocalizations
.of(context) .of(context)
.getText( .getText(
'j6ufb6sq' /* Cadastrar */, '5x5bp2u1' /* Cadastrar */,
), ),
options: options:
FFButtonOptions( FFButtonOptions(
@ -860,7 +1028,7 @@ class _LoginPageWidgetState extends State<LoginPageWidget>
text: FFLocalizations text: FFLocalizations
.of(context) .of(context)
.getText( .getText(
'h85112qs' /* Você esqueceu a sua senha? */, '1fqjz9q7' /* Você esqueceu a sua senha? */,
), ),
style: TextStyle( style: TextStyle(
color: FlutterFlowTheme color: FlutterFlowTheme
@ -872,7 +1040,7 @@ class _LoginPageWidgetState extends State<LoginPageWidget>
text: FFLocalizations text: FFLocalizations
.of(context) .of(context)
.getText( .getText(
'di48hdaj' /* Recupere aqui */, '7miyd406' /* Recupere aqui */,
), ),
style: FlutterFlowTheme style: FlutterFlowTheme
.of(context) .of(context)
@ -938,7 +1106,7 @@ class _LoginPageWidgetState extends State<LoginPageWidget>
), ),
Text( Text(
FFLocalizations.of(context).getText( FFLocalizations.of(context).getText(
'gx2fp6zq' /* Termo de Uso */, '63xv5ewj' /* Termo de Uso */,
), ),
style: FlutterFlowTheme.of(context) style: FlutterFlowTheme.of(context)
.bodyMedium .bodyMedium

View File

@ -1,3 +1,4 @@
import '/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import 'register_page_widget.dart' show RegisterPageWidget; import 'register_page_widget.dart' show RegisterPageWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -32,6 +33,8 @@ class RegisterPageModel extends FlutterFlowModel<RegisterPageWidget> {
late bool passwordRegisterFormVisibility; late bool passwordRegisterFormVisibility;
String? Function(BuildContext, String?)? String? Function(BuildContext, String?)?
passwordRegisterFormTextControllerValidator; passwordRegisterFormTextControllerValidator;
// Stores action output result for [Backend Call - API (register)] action in SignUpButtonRegisterForm widget.
ApiCallResponse? registerCall;
@override @override
void initState(BuildContext context) { void initState(BuildContext context) {

View File

@ -1,15 +1,15 @@
import '/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_animations.dart'; import '/flutter_flow/flutter_flow_animations.dart';
import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/flutter_flow_widgets.dart'; import '/flutter_flow/flutter_flow_widgets.dart';
import '/actions/actions.dart' as action_blocks; import '/flutter_flow/random_data_util.dart' as random_data;
import 'package:easy_debounce/easy_debounce.dart'; import 'package:easy_debounce/easy_debounce.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart'; import 'package:flutter/scheduler.dart';
import 'package:flutter_animate/flutter_animate.dart'; import 'package:flutter_animate/flutter_animate.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart';
import 'register_page_model.dart'; import 'register_page_model.dart';
export 'register_page_model.dart'; export 'register_page_model.dart';
@ -108,8 +108,6 @@ class _RegisterPageWidgetState extends State<RegisterPageWidget>
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
context.watch<FFAppState>();
return GestureDetector( return GestureDetector(
onTap: () => _model.unfocusNode.canRequestFocus onTap: () => _model.unfocusNode.canRequestFocus
? FocusScope.of(context).requestFocus(_model.unfocusNode) ? FocusScope.of(context).requestFocus(_model.unfocusNode)
@ -160,7 +158,7 @@ class _RegisterPageWidgetState extends State<RegisterPageWidget>
padding: const EdgeInsets.all(4.0), padding: const EdgeInsets.all(4.0),
child: Text( child: Text(
FFLocalizations.of(context).getText( FFLocalizations.of(context).getText(
'2d8uulm3' /* INSIRA SEU EMAIL E SENHA, VAMO... */, 'oxy0n1p4' /* INSIRA SEU EMAIL E SENHA, VAMO... */,
), ),
textAlign: TextAlign.start, textAlign: TextAlign.start,
style: FlutterFlowTheme.of(context) style: FlutterFlowTheme.of(context)
@ -173,7 +171,7 @@ class _RegisterPageWidgetState extends State<RegisterPageWidget>
.primaryText, .primaryText,
fontSize: 24.0, fontSize: 24.0,
letterSpacing: 0.0, letterSpacing: 0.0,
fontWeight: FontWeight.w500, fontWeight: FontWeight.normal,
useGoogleFonts: GoogleFonts useGoogleFonts: GoogleFonts
.asMap() .asMap()
.containsKey( .containsKey(
@ -256,7 +254,7 @@ class _RegisterPageWidgetState extends State<RegisterPageWidget>
FFLocalizations.of( FFLocalizations.of(
context) context)
.getText( .getText(
'8kjhi406' /* Nome */, 'w0y3fz89' /* Nome */,
), ),
labelStyle: FlutterFlowTheme labelStyle: FlutterFlowTheme
.of(context) .of(context)
@ -398,7 +396,7 @@ class _RegisterPageWidgetState extends State<RegisterPageWidget>
FFLocalizations.of( FFLocalizations.of(
context) context)
.getText( .getText(
'ro4zkkxp' /* Email */, '4bfdpd0o' /* Email */,
), ),
labelStyle: FlutterFlowTheme labelStyle: FlutterFlowTheme
.of(context) .of(context)
@ -541,7 +539,7 @@ class _RegisterPageWidgetState extends State<RegisterPageWidget>
FFLocalizations.of( FFLocalizations.of(
context) context)
.getText( .getText(
'lzgobioa' /* Senha */, 'byjglkpk' /* Senha */,
), ),
labelStyle: FlutterFlowTheme labelStyle: FlutterFlowTheme
.of(context) .of(context)
@ -667,25 +665,171 @@ class _RegisterPageWidgetState extends State<RegisterPageWidget>
0.0, 0.0, 0.0, 16.0), 0.0, 0.0, 0.0, 16.0),
child: FFButtonWidget( child: FFButtonWidget(
onPressed: () async { onPressed: () async {
await action_blocks await Future.wait([
.signUpActionApp( Future(() async {
context, setState(() {
_model.emailRegisterFormTextController
?.text =
_model
.emailRegisterFormTextController
.text;
});
}),
Future(() async {
setState(() {
_model.passwordRegisterFormTextController
?.text =
_model
.passwordRegisterFormTextController
.text;
});
}),
Future(() async {
setState(() {
_model.nameRegisterFormTextController
?.text =
_model
.nameRegisterFormTextController
.text;
});
}),
]);
if ((_model.emailRegisterFormTextController.text != '') &&
(_model.passwordRegisterFormTextController
.text !=
'') &&
(_model.nameRegisterFormTextController
.text !=
'')) {
_model.registerCall =
await PhpGroup
.registerCall
.call(
name: _model name: _model
.nameRegisterFormTextController .nameRegisterFormTextController
.text, .text,
passwd: _model password: _model
.passwordRegisterFormTextController .passwordRegisterFormTextController
.text, .text,
email: _model email: _model
.emailRegisterFormTextController .emailRegisterFormTextController
.text, .text,
device: FFAppState().device, token: random_data
.randomString(
36,
36,
false,
false,
true,
),
uuid: random_data
.randomString(
36,
36,
false,
false,
true,
),
tipo: _model.device,
descricao: random_data
.randomString(
36,
36,
true,
false,
false,
),
); );
if (PhpGroup.registerCall
.error(
(_model.registerCall
?.jsonBody ??
''),
) ==
false) {
context.goNamed(
'LoginPage',
queryParameters: {
'device':
serializeParam(
'',
ParamType.String,
),
}.withoutNulls,
extra: <String,
dynamic>{
kTransitionInfoKey:
const TransitionInfo(
hasTransition: true,
transitionType:
PageTransitionType
.fade,
),
},
);
} else {
await showDialog(
context: context,
builder:
(alertDialogContext) {
return AlertDialog(
title:
const Text('ERROR2'),
content:
const Text('ERROR2'),
actions: [
TextButton(
onPressed: () =>
Navigator.pop(
alertDialogContext),
child: const Text(
'ERROR2 '),
),
],
);
},
);
setState(() {
_model
.passwordRegisterFormTextController
?.clear();
_model
.emailRegisterFormTextController
?.clear();
_model
.nameRegisterFormTextController
?.clear();
});
}
} else {
await showDialog(
context: context,
builder:
(alertDialogContext) {
return AlertDialog(
title: const Text('ERROR1'),
content:
const Text('ERROR1'),
actions: [
TextButton(
onPressed: () =>
Navigator.pop(
alertDialogContext),
child: const Text(
'ERROR1 '),
),
],
);
},
);
}
setState(() {});
}, },
text: text:
FFLocalizations.of(context) FFLocalizations.of(context)
.getText( .getText(
'c7sfyeh8' /* Cadastrar-se */, 'w9vrsnmf' /* Cadastrar-se */,
), ),
options: FFButtonOptions( options: FFButtonOptions(
width: double.infinity, width: double.infinity,
@ -765,7 +909,7 @@ class _RegisterPageWidgetState extends State<RegisterPageWidget>
FFLocalizations.of( FFLocalizations.of(
context) context)
.getText( .getText(
'jglpa1tr' /* Você já tem uma conta? */, 'zep60lcd' /* Você já tem uma conta? */,
), ),
style: TextStyle( style: TextStyle(
color: FlutterFlowTheme color: FlutterFlowTheme
@ -778,7 +922,7 @@ class _RegisterPageWidgetState extends State<RegisterPageWidget>
FFLocalizations.of( FFLocalizations.of(
context) context)
.getText( .getText(
'hfcm0td9' /* Clique aqui */, 'tl8k1ld9' /* Clique aqui */,
), ),
style: style:
FlutterFlowTheme.of( FlutterFlowTheme.of(
@ -836,7 +980,7 @@ class _RegisterPageWidgetState extends State<RegisterPageWidget>
), ),
Text( Text(
FFLocalizations.of(context).getText( FFLocalizations.of(context).getText(
'c3kno4t9' /* Termo de Uso */, 'dbtzii7i' /* Termo de Uso */,
), ),
style: FlutterFlowTheme.of(context) style: FlutterFlowTheme.of(context)
.bodyMedium .bodyMedium

View File

@ -14,7 +14,14 @@ import 'register_visitor_page_model.dart';
export 'register_visitor_page_model.dart'; export 'register_visitor_page_model.dart';
class RegisterVisitorPageWidget extends StatefulWidget { class RegisterVisitorPageWidget extends StatefulWidget {
const RegisterVisitorPageWidget({super.key}); const RegisterVisitorPageWidget({
super.key,
required this.userUUID,
required this.devUUID,
});
final String? userUUID;
final String? devUUID;
@override @override
State<RegisterVisitorPageWidget> createState() => State<RegisterVisitorPageWidget> createState() =>

View File

@ -1,14 +1,16 @@
import '/components/select_header_component_widget.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/form_field_controller.dart'; import '/flutter_flow/form_field_controller.dart';
import 'schedule_complete_visit_page_widget.dart' import 'schedule_complete_visit_page_widget.dart'
show ScheduleCompleteVisitPageWidget; show ScheduleCompleteVisitPageWidget;
import 'package:carousel_slider/carousel_slider.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class ScheduleCompleteVisitPageModel class ScheduleCompleteVisitPageModel
extends FlutterFlowModel<ScheduleCompleteVisitPageWidget> { extends FlutterFlowModel<ScheduleCompleteVisitPageWidget> {
/// Local state fields for this page. /// Local state fields for this page.
bool toggleIdx = true;
List<dynamic> visitorJsonList = []; List<dynamic> visitorJsonList = [];
void addToVisitorJsonList(dynamic item) => visitorJsonList.add(item); void addToVisitorJsonList(dynamic item) => visitorJsonList.add(item);
void removeFromVisitorJsonList(dynamic item) => visitorJsonList.remove(item); void removeFromVisitorJsonList(dynamic item) => visitorJsonList.remove(item);
@ -24,10 +26,11 @@ class ScheduleCompleteVisitPageModel
/// State fields for stateful widgets in this page. /// State fields for stateful widgets in this page.
final unfocusNode = FocusNode(); final unfocusNode = FocusNode();
// Model for selectHeaderComponent component. // State field(s) for Carousel widget.
late SelectHeaderComponentModel selectHeaderComponentModel; CarouselController? carouselController;
// Stores action output result for [Action Block - toggleCurrentSelectionHeader] action in selectHeaderComponent widget.
bool? toggleIndexValue; int carouselCurrentIndex = 1;
// State field(s) for TextField widget. // State field(s) for TextField widget.
FocusNode? textFieldFocusNode1; FocusNode? textFieldFocusNode1;
TextEditingController? textController1; TextEditingController? textController1;
@ -52,15 +55,11 @@ class ScheduleCompleteVisitPageModel
String? Function(BuildContext, String?)? textController3Validator; String? Function(BuildContext, String?)? textController3Validator;
@override @override
void initState(BuildContext context) { void initState(BuildContext context) {}
selectHeaderComponentModel =
createModel(context, () => SelectHeaderComponentModel());
}
@override @override
void dispose() { void dispose() {
unfocusNode.dispose(); unfocusNode.dispose();
selectHeaderComponentModel.dispose();
textFieldFocusNode1?.dispose(); textFieldFocusNode1?.dispose();
textController1?.dispose(); textController1?.dispose();
@ -70,23 +69,4 @@ class ScheduleCompleteVisitPageModel
textFieldFocusNode3?.dispose(); textFieldFocusNode3?.dispose();
textController3?.dispose(); textController3?.dispose();
} }
/// Action blocks.
Future getVisitorsActionPage(
BuildContext context, {
List<dynamic>? visitorsJsonList,
}) async {
visitorJsonList = visitorsJsonList!.toList().cast<dynamic>();
}
Future<bool> toggleCurrentSelectionHeader(
BuildContext context, {
required bool? toggleIndexValue,
}) async {
if (toggleIndexValue == true) {
return true;
}
return false;
}
} }

View File

@ -3,8 +3,6 @@ import '/application_components/organism_components/bottom_arrow_linked_locals_c
import '/backend/api_requests/api_calls.dart'; import '/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/flutter_flow_widgets.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -191,10 +189,15 @@ class _ScheduleProvisionalVisitPageWidgetState
), ),
), ),
), ),
Stack( Padding(
children: [ padding: const EdgeInsetsDirectional.fromSTEB(
FFButtonWidget( 25.0, 0.0, 25.0, 0.0),
onPressed: () async { child: InkWell(
splashColor: Colors.transparent,
focusColor: Colors.transparent,
hoverColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () async {
await showModalBottomSheet( await showModalBottomSheet(
isScrollControlled: true, isScrollControlled: true,
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
@ -219,65 +222,61 @@ class _ScheduleProvisionalVisitPageWidgetState
}, },
).then((value) => safeSetState(() {})); ).then((value) => safeSetState(() {}));
}, },
text: FFAppState().local, child: Container(
options: FFButtonOptions( width: double.infinity,
width: 320.0,
height: 51.0, height: 51.0,
padding: const EdgeInsetsDirectional.fromSTEB( decoration: BoxDecoration(
24.0, 0.0, 24.0, 0.0),
iconPadding:
const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 0.0),
color: FlutterFlowTheme.of(context) color: FlutterFlowTheme.of(context)
.primaryBackground, .secondaryBackground,
textStyle: FlutterFlowTheme.of(context) borderRadius: BorderRadius.circular(24.0),
.titleSmall border: Border.all(
.override(
fontFamily:
FlutterFlowTheme.of(context)
.titleSmallFamily,
color: FlutterFlowTheme.of(context)
.primaryText,
fontSize: 14.0,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.titleSmallFamily),
),
borderSide: BorderSide(
color: FlutterFlowTheme.of(context) color: FlutterFlowTheme.of(context)
.primaryText, .primaryText,
width: 0.3, width: 0.3,
), ),
borderRadius: BorderRadius.circular(24.0),
), ),
), child: Row(
Padding( mainAxisSize: MainAxisSize.max,
padding: const EdgeInsetsDirectional.fromSTEB( mainAxisAlignment:
20.0, 10.0, 0.0, 0.0), MainAxisAlignment.spaceEvenly,
child: Container( children: [
Container(
width: 35.0, width: 35.0,
height: 35.0, height: 35.0,
clipBehavior: Clip.antiAlias, clipBehavior: Clip.antiAlias,
decoration: const BoxDecoration( decoration: const BoxDecoration(
shape: BoxShape.circle, shape: BoxShape.circle,
), ),
child: CachedNetworkImage( child: Image.network(
fadeInDuration: valueOrDefault<String>(
const Duration(milliseconds: 100),
fadeOutDuration:
const Duration(milliseconds: 100),
imageUrl: valueOrDefault<String>(
'https://freaccess.com.br/freaccess/Images/Clients/${FFAppState().cliUUID}.png', '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', 'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/7ftdetkzc3s0/360_F_64676383_LdbmhiNM6Ypzb3FM4PPuFP9rHe7ri8Ju.jpg',
), ),
fit: BoxFit.cover, fit: BoxFit.cover,
), ),
), ),
Text(
FFAppState().local,
style: FlutterFlowTheme.of(context)
.bodyMedium
.override(
fontFamily:
FlutterFlowTheme.of(context)
.bodyMediumFamily,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
FlutterFlowTheme.of(
context)
.bodyMediumFamily),
),
), ),
], ],
), ),
),
),
),
].addToEnd(const SizedBox(height: 20.0)), ].addToEnd(const SizedBox(height: 20.0)),
), ),
Divider( Divider(

View File

@ -36,13 +36,16 @@ class _WelcomePageWidgetState extends State<WelcomePageWidget>
if (FFAppState().isLogged == true) { if (FFAppState().isLogged == true) {
context.pushNamed( context.pushNamed(
'homePage', 'homePage',
extra: <String, dynamic>{ queryParameters: {
kTransitionInfoKey: const TransitionInfo( 'userUUID': serializeParam(
hasTransition: true, FFAppState().userUUID,
transitionType: PageTransitionType.fade, ParamType.String,
duration: Duration(milliseconds: 0),
), ),
}, 'devUUID': serializeParam(
FFAppState().devUUID,
ParamType.String,
),
}.withoutNulls,
); );
} else { } else {
if (isAndroid == true) { if (isAndroid == true) {
@ -144,7 +147,7 @@ class _WelcomePageWidgetState extends State<WelcomePageWidget>
children: [ children: [
Text( Text(
FFLocalizations.of(context).getText( FFLocalizations.of(context).getText(
'xflxvs9y' /* UMA EXPERIÊCIA COMPLETA */, '3pl41wkq' /* UMA EXPERIÊCIA COMPLETA */,
), ),
textAlign: TextAlign.start, textAlign: TextAlign.start,
style: FlutterFlowTheme.of(context) style: FlutterFlowTheme.of(context)
@ -164,7 +167,7 @@ class _WelcomePageWidgetState extends State<WelcomePageWidget>
alignment: const AlignmentDirectional(0.0, -1.0), alignment: const AlignmentDirectional(0.0, -1.0),
child: Text( child: Text(
FFLocalizations.of(context).getText( FFLocalizations.of(context).getText(
'5a86wzd1' /* COM CONFORTO ONDE VOCÊ ESTIVER... */, '13nhoxpg' /* COM CONFORTO ONDE VOCÊ ESTIVER... */,
), ),
textAlign: TextAlign.start, textAlign: TextAlign.start,
style: FlutterFlowTheme.of(context) style: FlutterFlowTheme.of(context)
@ -262,7 +265,7 @@ class _WelcomePageWidgetState extends State<WelcomePageWidget>
text: text:
FFLocalizations.of(context) FFLocalizations.of(context)
.getText( .getText(
'65nuva6j' /* Entrar */, 'zt5uc5g5' /* Entrar */,
), ),
options: FFButtonOptions( options: FFButtonOptions(
width: double.infinity, width: double.infinity,
@ -320,7 +323,7 @@ class _WelcomePageWidgetState extends State<WelcomePageWidget>
text: text:
FFLocalizations.of(context) FFLocalizations.of(context)
.getText( .getText(
'9u6oaw01' /* Cadastrar */, 'jteakpo0' /* Cadastrar */,
), ),
options: FFButtonOptions( options: FFButtonOptions(
width: double.infinity, width: double.infinity,
@ -395,7 +398,7 @@ class _WelcomePageWidgetState extends State<WelcomePageWidget>
text: FFLocalizations.of( text: FFLocalizations.of(
context) context)
.getText( .getText(
'd1qem43w' /* Entrar */, 'qoc86gvo' /* Entrar */,
), ),
options: FFButtonOptions( options: FFButtonOptions(
width: double.infinity, width: double.infinity,
@ -456,7 +459,7 @@ class _WelcomePageWidgetState extends State<WelcomePageWidget>
text: FFLocalizations.of( text: FFLocalizations.of(
context) context)
.getText( .getText(
'bhowzv2u' /* Cadastrar */, 'p5tgmj0c' /* Cadastrar */,
), ),
options: FFButtonOptions( options: FFButtonOptions(
width: double.infinity, width: double.infinity,

View File

@ -21,7 +21,6 @@ class PhpGroup {
static PostScheduleVisitorCall postScheduleVisitorCall = static PostScheduleVisitorCall postScheduleVisitorCall =
PostScheduleVisitorCall(); PostScheduleVisitorCall();
static PostScheduleVisitCall postScheduleVisitCall = PostScheduleVisitCall(); static PostScheduleVisitCall postScheduleVisitCall = PostScheduleVisitCall();
static DebugCallCall debugCallCall = DebugCallCall();
static GetScheduleVisitCall getScheduleVisitCall = GetScheduleVisitCall(); static GetScheduleVisitCall getScheduleVisitCall = GetScheduleVisitCall();
static GetDadosCall getDadosCall = GetDadosCall(); static GetDadosCall getDadosCall = GetDadosCall();
static GetVisitorByDocCall getVisitorByDocCall = GetVisitorByDocCall(); static GetVisitorByDocCall getVisitorByDocCall = GetVisitorByDocCall();
@ -30,6 +29,7 @@ class PhpGroup {
PostProvVisitSchedulingCall(); PostProvVisitSchedulingCall();
static GetVisitsCall getVisitsCall = GetVisitsCall(); static GetVisitsCall getVisitsCall = GetVisitsCall();
static DeleteVisitCall deleteVisitCall = DeleteVisitCall(); static DeleteVisitCall deleteVisitCall = DeleteVisitCall();
static DebugCall debugCall = DebugCall();
} }
class LoginCall { class LoginCall {
@ -341,7 +341,7 @@ class PostScheduleVisitCall {
Future<ApiCallResponse> call({ Future<ApiCallResponse> call({
String? devUUID = '', String? devUUID = '',
String? userUUID = '', String? userUUID = '',
String? cliID = '', String? cliUUID = '',
String? atividade = '', String? atividade = '',
String? devDesc = '', String? devDesc = '',
String? idVisitante = '', String? idVisitante = '',
@ -364,64 +364,7 @@ class PostScheduleVisitCall {
params: { params: {
'devUUID': devUUID, 'devUUID': devUUID,
'userUUID': userUUID, 'userUUID': userUUID,
'cliID': cliID, 'cliID': cliUUID,
'atividade': atividade,
'idVisitante': idVisitante,
'dtInicio': dtInicio,
'dtFim': dtFim,
'unica': unica,
'idMotivo': idMotivo,
'idNAC': idNAC,
'obs': obs,
'DevDesc': devDesc,
},
bodyType: BodyType.X_WWW_FORM_URL_ENCODED,
returnBody: true,
encodeBodyUtf8: false,
decodeUtf8: false,
cache: false,
alwaysAllowBody: false,
);
}
bool? error(dynamic response) => castToType<bool>(getJsonField(
response,
r'''$.error''',
));
String? errorMsg(dynamic response) => castToType<String>(getJsonField(
response,
r'''$.error_msg''',
));
}
class DebugCallCall {
Future<ApiCallResponse> call({
String? devUUID = '',
String? userUUID = '',
String? cliID = '',
String? atividade = '',
String? devDesc = '',
String? idVisitante = '',
String? dtInicio = '',
String? dtFim = '',
String? unica = '',
int? idMotivo,
int? idNAC,
String? obs = '',
}) async {
final baseUrl = PhpGroup.getBaseUrl();
return ApiManager.instance.makeApiCall(
callName: 'debugCall',
apiUrl: '$baseUrl/jonh.php',
callType: ApiCallType.POST,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
params: {
'devUUID': devUUID,
'userUUID': userUUID,
'cliID': cliID,
'atividade': atividade, 'atividade': atividade,
'DevDesc': devDesc, 'DevDesc': devDesc,
'idVisitante': idVisitante, 'idVisitante': idVisitante,
@ -1420,6 +1363,26 @@ class DeleteVisitCall {
)); ));
} }
class DebugCall {
Future<ApiCallResponse> call() async {
final baseUrl = PhpGroup.getBaseUrl();
return ApiManager.instance.makeApiCall(
callName: 'debug',
apiUrl: '$baseUrl/jonh.php',
callType: ApiCallType.POST,
headers: {},
params: {},
bodyType: BodyType.JSON,
returnBody: true,
encodeBodyUtf8: false,
decodeUtf8: false,
cache: false,
alwaysAllowBody: false,
);
}
}
/// End PHP Group Code /// End PHP Group Code
class ApiPagingParams { class ApiPagingParams {

View File

@ -0,0 +1,23 @@
import 'package:cloud_functions/cloud_functions.dart';
Future<Map<String, dynamic>> makeCloudCall(
String callName,
Map<String, dynamic> input,
) async {
try {
final response = await FirebaseFunctions.instance
.httpsCallable(callName, options: HttpsCallableOptions())
.call(input);
return response.data is Map
? Map<String, dynamic>.from(response.data as Map)
: {};
} on FirebaseFunctionsException catch (e) {
print(
'Cloud call error!\n'
'Code: ${e.code}\n'
'Details: ${e.details}\n'
'Message: ${e.message}',
);
return {};
}
}

View File

@ -0,0 +1,154 @@
import 'dart:async';
import 'serialization_util.dart';
import '../backend.dart';
import '../../flutter_flow/flutter_flow_theme.dart';
import '../../flutter_flow/flutter_flow_util.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
final _handledMessageIds = <String?>{};
class PushNotificationsHandler extends StatefulWidget {
const PushNotificationsHandler({super.key, required this.child});
final Widget child;
@override
_PushNotificationsHandlerState createState() =>
_PushNotificationsHandlerState();
}
class _PushNotificationsHandlerState extends State<PushNotificationsHandler> {
bool _loading = false;
Future handleOpenedPushNotification() async {
if (isWeb) {
return;
}
final notification = await FirebaseMessaging.instance.getInitialMessage();
if (notification != null) {
await _handlePushNotification(notification);
}
FirebaseMessaging.onMessageOpenedApp.listen(_handlePushNotification);
}
Future _handlePushNotification(RemoteMessage message) async {
if (_handledMessageIds.contains(message.messageId)) {
return;
}
_handledMessageIds.add(message.messageId);
if (mounted) {
setState(() => _loading = true);
}
try {
final initialPageName = message.data['initialPageName'] as String;
final initialParameterData = getInitialParameterData(message.data);
final parametersBuilder = parametersBuilderMap[initialPageName];
if (parametersBuilder != null) {
final parameterData = await parametersBuilder(initialParameterData);
context.pushNamed(
initialPageName,
pathParameters: parameterData.pathParameters,
extra: parameterData.extra,
);
}
} catch (e) {
print('Error: $e');
} finally {
if (mounted) {
setState(() => _loading = false);
}
}
}
@override
void initState() {
super.initState();
handleOpenedPushNotification();
}
@override
Widget build(BuildContext context) => _loading
? Container(
color: FlutterFlowTheme.of(context).primary,
child: Image.asset(
'assets/images/logo.svg',
fit: BoxFit.cover,
),
)
: widget.child;
}
class ParameterData {
const ParameterData(
{this.requiredParams = const {}, this.allParams = const {}});
final Map<String, String?> requiredParams;
final Map<String, dynamic> allParams;
Map<String, String> get pathParameters => Map.fromEntries(
requiredParams.entries
.where((e) => e.value != null)
.map((e) => MapEntry(e.key, e.value!)),
);
Map<String, dynamic> get extra => Map.fromEntries(
allParams.entries.where((e) => e.value != null),
);
static Future<ParameterData> Function(Map<String, dynamic>) none() =>
(data) async => const ParameterData();
}
final parametersBuilderMap =
<String, Future<ParameterData> Function(Map<String, dynamic>)>{
'LoginPage': (data) async => ParameterData(
allParams: {
'device': getParameter<String>(data, 'device'),
},
),
'ForgotPasswordPage': ParameterData.none(),
'homePage': (data) async => ParameterData(
allParams: {
'userUUID': getParameter<String>(data, 'userUUID'),
'devUUID': getParameter<String>(data, 'devUUID'),
},
),
'RegisterPage': ParameterData.none(),
'WelcomePage': ParameterData.none(),
'registerVisitorPage': (data) async => ParameterData(
allParams: {
'userUUID': getParameter<String>(data, 'userUUID'),
'devUUID': getParameter<String>(data, 'devUUID'),
},
),
'scheduleCompleteVisitPage': (data) async => ParameterData(
allParams: {
'visitorStrList': getParameter<String>(data, 'visitorStrList'),
'visitStartDateStr': getParameter<String>(data, 'visitStartDateStr'),
'visitEndDateStr': getParameter<String>(data, 'visitEndDateStr'),
'visitReasonStr': getParameter<String>(data, 'visitReasonStr'),
'visitLevelStr': getParameter<String>(data, 'visitLevelStr'),
'visitTempBol': getParameter<bool>(data, 'visitTempBol'),
'visitObsStr': getParameter<String>(data, 'visitObsStr'),
},
),
'scheduleProvisionalVisitPage': ParameterData.none(),
};
Map<String, dynamic> getInitialParameterData(Map<String, dynamic> data) {
try {
final parameterDataStr = data['parameterData'];
if (parameterDataStr == null ||
parameterDataStr is! String ||
parameterDataStr.isEmpty) {
return {};
}
return jsonDecode(parameterDataStr) as Map<String, dynamic>;
} catch (e) {
print('Error parsing parameter data: $e');
return {};
}
}

View File

@ -0,0 +1,49 @@
import 'dart:io' show Platform;
import 'package:cloud_firestore/cloud_firestore.dart';
import '../../auth/firebase_auth/auth_util.dart';
import '../cloud_functions/cloud_functions.dart';
import 'package:flutter/foundation.dart';
import 'package:stream_transform/stream_transform.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
export 'push_notifications_handler.dart';
export 'serialization_util.dart';
class UserTokenInfo {
const UserTokenInfo(this.userPath, this.fcmToken);
final String userPath;
final String fcmToken;
}
Stream<UserTokenInfo> getFcmTokenStream(String userPath) =>
Stream.value(!kIsWeb && (Platform.isIOS || Platform.isAndroid))
.where((shouldGetToken) => shouldGetToken)
.asyncMap<String?>(
(_) => FirebaseMessaging.instance.requestPermission().then(
(settings) => settings.authorizationStatus ==
AuthorizationStatus.authorized
? FirebaseMessaging.instance.getToken()
: null,
))
.switchMap((fcmToken) => Stream.value(fcmToken)
.merge(FirebaseMessaging.instance.onTokenRefresh))
.where((fcmToken) => fcmToken != null && fcmToken.isNotEmpty)
.map((token) => UserTokenInfo(userPath, token!));
final fcmTokenUserStream = authenticatedUserStream
.where((user) => user != null)
.map((user) => user!.reference.path)
.distinct()
.switchMap(getFcmTokenStream)
.map(
(userTokenInfo) => makeCloudCall(
'addFcmToken',
{
'userDocPath': userTokenInfo.userPath,
'fcmToken': userTokenInfo.fcmToken,
'deviceType': Platform.isIOS ? 'iOS' : 'Android',
},
),
);

View File

@ -0,0 +1,172 @@
import 'dart:convert';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import '/backend/backend.dart';
import '/backend/schema/structs/index.dart';
import '../../flutter_flow/lat_lng.dart';
import '../../flutter_flow/place.dart';
import '../../flutter_flow/uploaded_file.dart';
/// SERIALIZATION HELPERS
String dateTimeRangeToString(DateTimeRange dateTimeRange) {
final startStr = dateTimeRange.start.millisecondsSinceEpoch.toString();
final endStr = dateTimeRange.end.millisecondsSinceEpoch.toString();
return '$startStr|$endStr';
}
String placeToString(FFPlace place) => jsonEncode({
'latLng': place.latLng.serialize(),
'name': place.name,
'address': place.address,
'city': place.city,
'state': place.state,
'country': place.country,
'zipCode': place.zipCode,
});
String uploadedFileToString(FFUploadedFile uploadedFile) =>
uploadedFile.serialize();
/// Converts the input value into a value that can be JSON encoded.
dynamic serializeParameter(dynamic value) {
switch (value.runtimeType) {
case DateTime:
return (value as DateTime).millisecondsSinceEpoch;
case DateTimeRange:
return dateTimeRangeToString(value as DateTimeRange);
case LatLng:
return (value as LatLng).serialize();
case Color:
return (value as Color).toCssString();
case FFPlace:
return placeToString(value as FFPlace);
case FFUploadedFile:
return uploadedFileToString(value as FFUploadedFile);
}
if (value is DocumentReference) {
return value.path;
}
if (value is FirestoreRecord) {
return (value as dynamic).reference.path;
}
return value;
}
String serializeParameterData(Map<String, dynamic> parameterData) => jsonEncode(
parameterData.map(
(key, value) => MapEntry(
key,
serializeParameter(value),
),
)..removeWhere((k, v) => v == null),
);
/// END SERIALIZATION HELPERS
/// DESERIALIZATION HELPERS
DateTimeRange? dateTimeRangeFromString(String dateTimeRangeStr) {
final pieces = dateTimeRangeStr.split('|');
if (pieces.length != 2) {
return null;
}
return DateTimeRange(
start: DateTime.fromMillisecondsSinceEpoch(int.parse(pieces.first)),
end: DateTime.fromMillisecondsSinceEpoch(int.parse(pieces.last)),
);
}
LatLng? latLngFromString(String? latLngStr) {
final pieces = latLngStr?.split(',');
if (pieces == null || pieces.length != 2) {
return null;
}
return LatLng(
double.parse(pieces.first.trim()),
double.parse(pieces.last.trim()),
);
}
FFPlace placeFromString(String placeStr) {
final serializedData = jsonDecode(placeStr) as Map<String, dynamic>;
final data = {
'latLng': serializedData.containsKey('latLng')
? latLngFromString(serializedData['latLng'] as String)
: const LatLng(0.0, 0.0),
'name': serializedData['name'] ?? '',
'address': serializedData['address'] ?? '',
'city': serializedData['city'] ?? '',
'state': serializedData['state'] ?? '',
'country': serializedData['country'] ?? '',
'zipCode': serializedData['zipCode'] ?? '',
};
return FFPlace(
latLng: data['latLng'] as LatLng,
name: data['name'] as String,
address: data['address'] as String,
city: data['city'] as String,
state: data['state'] as String,
country: data['country'] as String,
zipCode: data['zipCode'] as String,
);
}
FFUploadedFile uploadedFileFromString(String uploadedFileStr) =>
FFUploadedFile.deserialize(uploadedFileStr);
T? getParameter<T>(Map<String, dynamic> data, String paramName) {
try {
if (!data.containsKey(paramName)) {
return null;
}
final param = data[paramName];
switch (T) {
case String:
return param;
case double:
return param.toDouble();
case DateTime:
return DateTime.fromMillisecondsSinceEpoch(param) as T;
case DateTimeRange:
return dateTimeRangeFromString(param) as T;
case LatLng:
return latLngFromString(param) as T;
case Color:
return fromCssColor(param) as T;
case FFPlace:
return placeFromString(param) as T;
case FFUploadedFile:
return uploadedFileFromString(param) as T;
}
if (param is String) {
return FirebaseFirestore.instance.doc(param) as T;
}
return param;
} catch (e) {
print('Error parsing parameter "$paramName": $e');
return null;
}
}
Future<T?> getDocumentParameter<T>(
Map<String, dynamic> data,
String paramName,
RecordBuilder<T> recordBuilder,
) {
if (!data.containsKey(paramName)) {
return Future.value(null);
}
return FirebaseFirestore.instance
.doc(data[paramName])
.get()
.then((s) => recordBuilder(s));
}
/// END DESERIALIZATION HELPERS

View File

@ -1,110 +0,0 @@
// ignore_for_file: unnecessary_getters_setters
import '/backend/schema/util/schema_util.dart';
import 'index.dart';
import '/flutter_flow/flutter_flow_util.dart';
class DeviceStruct extends BaseStruct {
DeviceStruct({
String? devUUID,
String? version,
String? description,
}) : _devUUID = devUUID,
_version = version,
_description = description;
// "devUUID" field.
String? _devUUID;
String get devUUID => _devUUID ?? '';
set devUUID(String? val) => _devUUID = val;
bool hasDevUUID() => _devUUID != null;
// "version" field.
String? _version;
String get version => _version ?? '';
set version(String? val) => _version = val;
bool hasVersion() => _version != null;
// "description" field.
String? _description;
String get description => _description ?? '';
set description(String? val) => _description = val;
bool hasDescription() => _description != null;
static DeviceStruct fromMap(Map<String, dynamic> data) => DeviceStruct(
devUUID: data['devUUID'] as String?,
version: data['version'] as String?,
description: data['description'] as String?,
);
static DeviceStruct? maybeFromMap(dynamic data) =>
data is Map ? DeviceStruct.fromMap(data.cast<String, dynamic>()) : null;
Map<String, dynamic> toMap() => {
'devUUID': _devUUID,
'version': _version,
'description': _description,
}.withoutNulls;
@override
Map<String, dynamic> toSerializableMap() => {
'devUUID': serializeParam(
_devUUID,
ParamType.String,
),
'version': serializeParam(
_version,
ParamType.String,
),
'description': serializeParam(
_description,
ParamType.String,
),
}.withoutNulls;
static DeviceStruct fromSerializableMap(Map<String, dynamic> data) =>
DeviceStruct(
devUUID: deserializeParam(
data['devUUID'],
ParamType.String,
false,
),
version: deserializeParam(
data['version'],
ParamType.String,
false,
),
description: deserializeParam(
data['description'],
ParamType.String,
false,
),
);
@override
String toString() => 'DeviceStruct(${toMap()})';
@override
bool operator ==(Object other) {
return other is DeviceStruct &&
devUUID == other.devUUID &&
version == other.version &&
description == other.description;
}
@override
int get hashCode =>
const ListEquality().hash([devUUID, version, description]);
}
DeviceStruct createDeviceStruct({
String? devUUID,
String? version,
String? description,
}) =>
DeviceStruct(
devUUID: devUUID,
version: version,
description: description,
);

View File

@ -1,4 +1,3 @@
export '/backend/schema/util/schema_util.dart'; export '/backend/schema/util/schema_util.dart';
export 'action_struct.dart'; export 'action_struct.dart';
export 'device_struct.dart';

View File

@ -1,11 +0,0 @@
import '/flutter_flow/flutter_flow_util.dart';
import 'image_cropper_widget.dart' show ImageCropperWidget;
import 'package:flutter/material.dart';
class ImageCropperModel extends FlutterFlowModel<ImageCropperWidget> {
@override
void initState(BuildContext context) {}
@override
void dispose() {}
}

View File

@ -1,64 +0,0 @@
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/custom_code/widgets/index.dart' as custom_widgets;
import 'package:flutter/material.dart';
import 'image_cropper_model.dart';
export 'image_cropper_model.dart';
class ImageCropperWidget extends StatefulWidget {
const ImageCropperWidget({
super.key,
required this.uploadImageFile,
});
final FFUploadedFile? uploadImageFile;
@override
State<ImageCropperWidget> createState() => _ImageCropperWidgetState();
}
class _ImageCropperWidgetState extends State<ImageCropperWidget> {
late ImageCropperModel _model;
@override
void setState(VoidCallback callback) {
super.setState(callback);
_model.onUpdate();
}
@override
void initState() {
super.initState();
_model = createModel(context, () => ImageCropperModel());
}
@override
void dispose() {
_model.maybeDispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container(
width: 500.0,
height: 500.0,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).secondaryBackground,
),
child: SizedBox(
width: double.infinity,
height: double.infinity,
child: custom_widgets.ImageCropper(
width: double.infinity,
height: double.infinity,
imageFile: widget.uploadImageFile,
callBackAction: (url) async {
Navigator.pop(context, url);
},
),
),
);
}
}

View File

@ -1,12 +0,0 @@
import '/flutter_flow/flutter_flow_util.dart';
import 'legacy_local_component_widget.dart' show LegacyLocalComponentWidget;
import 'package:flutter/material.dart';
class LegacyLocalComponentModel
extends FlutterFlowModel<LegacyLocalComponentWidget> {
@override
void initState(BuildContext context) {}
@override
void dispose() {}
}

View File

@ -1,167 +0,0 @@
import '/application_components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/custom_functions.dart' as functions;
import '/flutter_flow/random_data_util.dart' as random_data;
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart';
import 'legacy_local_component_model.dart';
export 'legacy_local_component_model.dart';
class LegacyLocalComponentWidget extends StatefulWidget {
const LegacyLocalComponentWidget({super.key});
@override
State<LegacyLocalComponentWidget> createState() =>
_LegacyLocalComponentWidgetState();
}
class _LegacyLocalComponentWidgetState
extends State<LegacyLocalComponentWidget> {
late LegacyLocalComponentModel _model;
@override
void setState(VoidCallback callback) {
super.setState(callback);
_model.onUpdate();
}
@override
void initState() {
super.initState();
_model = createModel(context, () => LegacyLocalComponentModel());
}
@override
void dispose() {
_model.maybeDispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
context.watch<FFAppState>();
return Visibility(
visible: random_data.randomInteger(0, 10) != null,
child: Container(
height: 284.0,
decoration: const BoxDecoration(),
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
Stack(
children: [
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Material(
color: Colors.transparent,
elevation: 0.0,
child: Container(
width: double.infinity,
height: 119.0,
decoration: BoxDecoration(
color: const Color(0xFF1AAB5F),
border: Border.all(
color: const Color(0xFF1AAB5F),
),
),
),
),
),
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding(
padding: const EdgeInsets.all(24.0),
child: Container(
width: 200.0,
height: 200.0,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground,
shape: BoxShape.circle,
),
alignment: const AlignmentDirectional(0.0, 0.0),
child: Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding(
padding: const EdgeInsets.all(2.0),
child: InkWell(
splashColor: Colors.transparent,
focusColor: Colors.transparent,
hoverColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () async {
showModalBottomSheet(
isScrollControlled: true,
backgroundColor: const Color(0x00FFFFFF),
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: const SizedBox(
height: double.infinity,
child:
BottomArrowLinkedLocalsComponentWidget(),
),
);
},
).then((value) => safeSetState(() {}));
},
child: ClipRRect(
borderRadius: BorderRadius.circular(200.0),
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',
),
width: 300.0,
height: 200.0,
fit: BoxFit.cover,
alignment: const Alignment(0.0, 0.0),
errorBuilder: (context, error, stackTrace) =>
Image.asset(
'assets/images/error_image.svg',
width: 300.0,
height: 200.0,
fit: BoxFit.cover,
alignment: const Alignment(0.0, 0.0),
),
),
),
),
),
),
),
),
),
],
),
Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
valueOrDefault<String>(
functions.convertToUppercase(FFAppState().local),
'NOME DO LOCAL',
),
style: FlutterFlowTheme.of(context).labelMedium.override(
fontFamily: 'Nunito',
color: FlutterFlowTheme.of(context).primaryText,
fontSize: 20.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts:
GoogleFonts.asMap().containsKey('Nunito'),
),
),
],
),
],
),
),
);
}
}

View File

@ -1,12 +0,0 @@
import '/flutter_flow/flutter_flow_util.dart';
import 'select_header_component_widget.dart' show SelectHeaderComponentWidget;
import 'package:flutter/material.dart';
class SelectHeaderComponentModel
extends FlutterFlowModel<SelectHeaderComponentWidget> {
@override
void initState(BuildContext context) {}
@override
void dispose() {}
}

View File

@ -1,185 +0,0 @@
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'select_header_component_model.dart';
export 'select_header_component_model.dart';
class SelectHeaderComponentWidget extends StatefulWidget {
const SelectHeaderComponentWidget({
super.key,
required this.selectToggle,
bool? toggleIndexValue,
}) : toggleIndexValue = toggleIndexValue ?? true;
final Future Function(bool toggleIndex)? selectToggle;
final bool toggleIndexValue;
@override
State<SelectHeaderComponentWidget> createState() =>
_SelectHeaderComponentWidgetState();
}
class _SelectHeaderComponentWidgetState
extends State<SelectHeaderComponentWidget> {
late SelectHeaderComponentModel _model;
@override
void setState(VoidCallback callback) {
super.setState(callback);
_model.onUpdate();
}
@override
void initState() {
super.initState();
_model = createModel(context, () => SelectHeaderComponentModel());
}
@override
void dispose() {
_model.maybeDispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Container(
height: 55.0,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground,
),
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
InkWell(
splashColor: Colors.transparent,
focusColor: Colors.transparent,
hoverColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () async {
await widget.selectToggle?.call(
true,
);
},
child: Container(
width: double.infinity,
height: 50.0,
decoration: const BoxDecoration(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(0.0),
bottomRight: Radius.circular(0.0),
topLeft: Radius.circular(0.0),
topRight: Radius.circular(0.0),
),
),
child: Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Text(
FFLocalizations.of(context).getText(
'1gr8ztd5' /* Criar Agendamento */,
),
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),
),
),
),
),
),
if (widget.toggleIndexValue == true)
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 2.0, 0.0, 0.0),
child: Container(
width: double.infinity,
height: 2.0,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primary,
borderRadius: BorderRadius.circular(100.0),
),
),
),
],
),
),
),
Expanded(
child: Container(
height: 55.0,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground,
),
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
InkWell(
splashColor: Colors.transparent,
focusColor: Colors.transparent,
hoverColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () async {
await widget.selectToggle?.call(
false,
);
},
child: Container(
width: double.infinity,
height: 50.0,
decoration: const BoxDecoration(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(0.0),
bottomRight: Radius.circular(0.0),
topLeft: Radius.circular(0.0),
topRight: Radius.circular(0.0),
),
),
child: Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Text(
FFLocalizations.of(context).getText(
'xjahsbjw' /* Histórico de Visitas */,
),
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),
),
),
),
),
),
if (widget.toggleIndexValue == false)
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 2.0, 0.0, 0.0),
child: Container(
width: double.infinity,
height: 2.0,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primary,
borderRadius: BorderRadius.circular(100.0),
),
),
),
],
),
),
),
],
);
}
}

View File

@ -1,28 +0,0 @@
// Automatic FlutterFlow imports
import '/backend/schema/structs/index.dart';
import '/backend/schema/enums/enums.dart';
import '/actions/actions.dart' as action_blocks;
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import 'index.dart'; // Imports other custom actions
import '/flutter_flow/custom_functions.dart'; // Imports custom functions
import 'package:flutter/material.dart';
// Begin custom action code
// DO NOT REMOVE OR MODIFY THE CODE ABOVE!
import 'dart:io';
import 'package:device_info_plus/device_info_plus.dart';
Future<String?> getDevUUID() async {
var deviceInfo = DeviceInfoPlugin();
if (Platform.isIOS) {
// import 'dart:io'
var iosDeviceInfo = await deviceInfo.iosInfo;
return iosDeviceInfo.identifierForVendor; // unique ID on iOS
} else if (Platform.isAndroid) {
var androidDeviceInfo = await deviceInfo.androidInfo;
print(AndroidDeviceInfo);
return androidDeviceInfo.serialNumber; // unique ID on Android
}
}

View File

@ -1,3 +1,2 @@
export 'convert_image_file_to_base64.dart' show convertImageFileToBase64; export 'convert_image_file_to_base64.dart' show convertImageFileToBase64;
export 'convert_to_upload_file.dart' show convertToUploadFile; export 'convert_to_upload_file.dart' show convertToUploadFile;
export 'get_dev_u_u_i_d.dart' show getDevUUID;

View File

@ -1,179 +0,0 @@
// Automatic FlutterFlow imports
import '/backend/schema/structs/index.dart';
import '/backend/schema/enums/enums.dart';
import '/actions/actions.dart' as action_blocks;
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import 'index.dart'; // Imports other custom widgets
import '/custom_code/actions/index.dart'; // Imports custom actions
import '/flutter_flow/custom_functions.dart'; // Imports custom functions
import 'package:flutter/material.dart';
// Begin custom widget code
// DO NOT REMOVE OR MODIFY THE CODE ABOVE!
import 'package:crop_your_image/crop_your_image.dart';
import 'package:google_fonts/google_fonts.dart';
import '/backend/firebase_storage/storage.dart';
class ImageCropper extends StatefulWidget {
const ImageCropper({
super.key,
this.width,
this.height,
this.imageFile,
this.callBackAction,
this.currentUserId,
});
final double? width;
final double? height;
final FFUploadedFile? imageFile;
final Future Function(String? url)? callBackAction;
final String? currentUserId;
@override
State<ImageCropper> createState() => _ImageCropperState();
}
class _ImageCropperState extends State<ImageCropper> {
bool loading = false;
final _crop_controller = CropController();
@override
Widget build(BuildContext context) {
return Stack(
children: [
Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: widget.width ?? double.infinity,
height: (widget.height ?? 555) - 80,
child: Center(
child: Crop(
image: Uint8List.fromList(widget.imageFile!.bytes!),
controller: _crop_controller,
onCropped: (image) async {
final path = _getStoragePath(_firebasePathPrefix(),
widget.imageFile!.name!, false, 0);
uploadData(path, image).then((value) {
print('image cropped');
widget.callBackAction!.call(value!);
loading = false;
});
// add error handling here
},
aspectRatio: 1 / 1,
initialSize: 0.5,
// initialArea: Rect.fromLTWH(240, 212, 800, 600),\
//initialAreaBuilder: (rect) => Rect.fromLTRB(rect.left + 80, rect.top + 80, rect.right - 80, rect.bottom - 80),
withCircleUi: true,
baseColor: Color.fromARGB(255, 0, 3, 22),
maskColor: Colors.white.withAlpha(100),
radius: 20,
onMoved: (newRect) {
// do something with current cropping area.
},
onStatusChanged: (status) {
// do something with current CropStatus
},
cornerDotBuilder: (size, edgeAlignment) =>
const DotControl(color: Colors.white),
interactive: true,
// fixArea: true,
))),
Padding(
padding: EdgeInsetsDirectional.fromSTEB(8, 5, 8, 5),
child: ElevatedButton(
onPressed: () async {
if (!loading) {
setState(() {
loading = true;
});
print('Button pressed ...');
_crop_controller.crop();
//widget.loading = true;
}
},
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all<Color>(
FlutterFlowTheme.of(context).primaryColor,
),
padding: MaterialStateProperty.all<EdgeInsetsGeometry>(
EdgeInsets.zero,
),
shape: MaterialStateProperty.all<RoundedRectangleBorder>(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(100),
side: BorderSide.none,
),
),
),
child: Container(
width: 250,
height: 50,
alignment: Alignment.center,
child: loading
? CircularProgressIndicator(
valueColor:
AlwaysStoppedAnimation<Color>(Colors.white),
)
: Text(
'Crop',
style: FlutterFlowTheme.of(context)
.subtitle2
.override(
fontFamily: 'Lexend',
color: Colors.white,
fontSize: 16,
fontWeight: FontWeight.normal,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.subtitle2Family),
),
),
),
)),
]),
Positioned(
top: 4,
right: 4,
child: IconButton(
icon: Icon(Icons.close),
onPressed: () => Navigator.pop(context),
))
],
);
}
String _getStoragePath(
String? pathPrefix,
String filePath,
bool isVideo, [
int? index,
]) {
pathPrefix ??= _firebasePathPrefix();
pathPrefix = _removeTrailingSlash(pathPrefix);
final timestamp = DateTime.now().microsecondsSinceEpoch;
final prefix = 'cropped-';
// Workaround fixed by https://github.com/flutter/plugins/pull/3685
// (not yet in stable).
final ext = isVideo ? 'mp4' : filePath.split('.').last;
final indexStr = index != null ? '_$index' : '';
return '$pathPrefix/$prefix$timestamp$indexStr.$ext';
}
String? _removeTrailingSlash(String? path) =>
path != null && path.endsWith('/')
? path.substring(0, path.length - 1)
: path;
String _firebasePathPrefix() => 'users/${widget.currentUserId}/uploads';
}
// Set your widget name, define your parameter, and then add the
// boilerplate code using the green button on the right!

View File

@ -1 +0,0 @@
export 'image_cropper.dart' show ImageCropper;

View File

@ -66,8 +66,6 @@ abstract class FlutterFlowTheme {
late Color customColor1; late Color customColor1;
late Color customColor2; late Color customColor2;
late Color customColor3; late Color customColor3;
late Color customColor4;
late Color customColor5;
@Deprecated('Use displaySmallFamily instead') @Deprecated('Use displaySmallFamily instead')
String get title1Family => displaySmallFamily; String get title1Family => displaySmallFamily;
@ -166,7 +164,7 @@ class LightModeTheme extends FlutterFlowTheme {
late Color accent1 = const Color(0xFF1AAB5F); late Color accent1 = const Color(0xFF1AAB5F);
late Color accent2 = const Color(0x4D000000); late Color accent2 = const Color(0x4D000000);
late Color accent3 = const Color(0xFFFFFFFF); late Color accent3 = const Color(0xFFFFFFFF);
late Color accent4 = const Color(0xFF1AAB5F); late Color accent4 = const Color(0xFFFFFFFF);
late Color success = const Color(0xFF1AAB5F); late Color success = const Color(0xFF1AAB5F);
late Color warning = const Color(0xFFF3C344); late Color warning = const Color(0xFFF3C344);
late Color error = const Color(0xFFD70000); late Color error = const Color(0xFFD70000);
@ -175,8 +173,6 @@ class LightModeTheme extends FlutterFlowTheme {
late Color customColor1 = const Color(0xFF000000); late Color customColor1 = const Color(0xFF000000);
late Color customColor2 = const Color(0xFF1AAB5F); late Color customColor2 = const Color(0xFF1AAB5F);
late Color customColor3 = const Color(0xFFFFFFFF); late Color customColor3 = const Color(0xFFFFFFFF);
late Color customColor4 = const Color(0xFFCFCFCF);
late Color customColor5 = const Color(0xFF979595);
} }
abstract class Typography { abstract class Typography {
@ -573,8 +569,6 @@ class DarkModeTheme extends FlutterFlowTheme {
late Color customColor1 = const Color(0xFFFFFFFF); late Color customColor1 = const Color(0xFFFFFFFF);
late Color customColor2 = const Color(0xFFFFFFFF); late Color customColor2 = const Color(0xFFFFFFFF);
late Color customColor3 = const Color(0xFF1AAB5F); late Color customColor3 = const Color(0xFF1AAB5F);
late Color customColor4 = const Color(0xFF232323);
late Color customColor5 = const Color(0xFF232323);
} }
extension TextStyleHelper on TextStyle { extension TextStyleHelper on TextStyle {

View File

@ -107,43 +107,43 @@ Locale createLocale(String language) => language.contains('_')
final kTranslationsMap = <Map<String, Map<String, String>>>[ final kTranslationsMap = <Map<String, Map<String, String>>>[
// LoginPage // LoginPage
{ {
'0113wf5c': { 'uem0mca5': {
'pt': 'VAMOS LA! ENTRE COM A SUA CONTA', 'pt': 'VAMOS LA! ENTRE COM A SUA CONTA',
'en': 'LET\'S GO! SIGN IN WITH YOUR ACCOUNT', 'en': 'LET\'S GO! SIGN IN WITH YOUR ACCOUNT',
}, },
'f2go5a71': { '90ls8ppo': {
'pt': 'Email', 'pt': 'Email',
'en': 'Email', 'en': 'Email',
}, },
'paon3y0v': { 'rvlumyaw': {
'pt': 'Senha', 'pt': 'Senha',
'en': 'Password', 'en': 'Password',
}, },
'wmbzwstw': { '2d3903lt': {
'pt': 'Entrar', 'pt': 'Entrar',
'en': 'Sign-In', 'en': 'Sign-In',
}, },
'j8567afe': { 'zj6pyujp': {
'pt': 'Cadastrar', 'pt': 'Cadastrar',
'en': 'Sign-Up', 'en': 'Sign-Up',
}, },
'y3wd9q18': { 'iqhyif1d': {
'pt': 'Entrar', 'pt': 'Entrar',
'en': 'Sign-In', 'en': 'Sign-In',
}, },
'j6ufb6sq': { '5x5bp2u1': {
'pt': 'Cadastrar', 'pt': 'Cadastrar',
'en': 'Sign-Up', 'en': 'Sign-Up',
}, },
'h85112qs': { '1fqjz9q7': {
'pt': 'Você esqueceu a sua senha?', 'pt': 'Você esqueceu a sua senha?',
'en': 'Have you forgotten your password?', 'en': 'Have you forgotten your password?',
}, },
'di48hdaj': { '7miyd406': {
'pt': ' Recupere aqui', 'pt': ' Recupere aqui',
'en': 'recover here', 'en': 'recover here',
}, },
'gx2fp6zq': { '63xv5ewj': {
'pt': 'Termo de Uso', 'pt': 'Termo de Uso',
'en': 'Terms of use', 'en': 'Terms of use',
}, },
@ -154,25 +154,25 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
}, },
// ForgotPasswordPage // ForgotPasswordPage
{ {
'gfvplb0h': { 'lpduiuif': {
'pt': 'ESQUECEU SUA SENHA?', 'pt': 'ESQUECEU SUA SENHA?',
'en': 'FORGOT YOUR PASSWORD?', 'en': 'FORGOT YOUR PASSWORD?',
}, },
'azssgpdi': { '8t05j98w': {
'pt': 'pt':
'Não se preucupe nós vamos te ajudar, digite o email cadastrado no aplicativo e clique em enviar.', 'Não se preucupe nós vamos te ajudar, digite o email cadastrado no aplicativo e clique em enviar.',
'en': 'en':
'Don\'t worry, we will help you, enter the email registered in the application and click send.', 'Don\'t worry, we will help you, enter the email registered in the application and click send.',
}, },
'0o139961': { '4gcoci7a': {
'pt': 'Email', 'pt': 'Email',
'en': 'Email', 'en': 'Email',
}, },
'aanw1fp3': { 'a7p2iikz': {
'pt': 'digite o seu email.....', 'pt': 'digite o seu email.....',
'en': 'enter your email.....', 'en': 'enter your email.....',
}, },
'e7hdgc4q': { 'z9ghb8dz': {
'pt': 'Enviar', 'pt': 'Enviar',
'en': 'To send', 'en': 'To send',
}, },
@ -234,39 +234,39 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
}, },
// RegisterPage // RegisterPage
{ {
'2d8uulm3': { 'oxy0n1p4': {
'pt': 'INSIRA SEU EMAIL E SENHA, VAMOS TE CADASTRAR!', 'pt': 'INSIRA SEU EMAIL E SENHA, VAMOS TE CADASTRAR!',
'en': 'ENTER YOUR EMAIL AND PASSWORD, LET\'S REGISTER YOU!', 'en': 'ENTER YOUR EMAIL AND PASSWORD, LET\'S REGISTER YOU!',
}, },
'8kjhi406': { 'w0y3fz89': {
'pt': 'Nome', 'pt': 'Nome',
'en': 'Name', 'en': 'Name',
}, },
'ro4zkkxp': { '4bfdpd0o': {
'pt': 'Email', 'pt': 'Email',
'en': 'Email', 'en': 'Email',
}, },
'j5yny8ee': { 'v0iobs5a': {
'pt': '', 'pt': '',
'en': '', 'en': '',
}, },
'lzgobioa': { 'byjglkpk': {
'pt': 'Senha', 'pt': 'Senha',
'en': 'Password', 'en': 'Password',
}, },
'c7sfyeh8': { 'w9vrsnmf': {
'pt': 'Cadastrar-se', 'pt': 'Cadastrar-se',
'en': 'Sign-Up', 'en': 'Sign-Up',
}, },
'jglpa1tr': { 'zep60lcd': {
'pt': 'Você já tem uma conta? ', 'pt': 'Você já tem uma conta? ',
'en': 'You already have an account?', 'en': 'You already have an account?',
}, },
'hfcm0td9': { 'tl8k1ld9': {
'pt': 'Clique aqui', 'pt': 'Clique aqui',
'en': 'Click here', 'en': 'Click here',
}, },
'c3kno4t9': { 'dbtzii7i': {
'pt': 'Termo de Uso', 'pt': 'Termo de Uso',
'en': '', 'en': '',
}, },
@ -277,27 +277,27 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
}, },
// WelcomePage // WelcomePage
{ {
'xflxvs9y': { '3pl41wkq': {
'pt': 'UMA EXPERIÊCIA COMPLETA', 'pt': 'UMA EXPERIÊCIA COMPLETA',
'en': 'A COMPLETE EXPERIENCE', 'en': 'A COMPLETE EXPERIENCE',
}, },
'5a86wzd1': { '13nhoxpg': {
'pt': 'COM CONFORTO ONDE VOCÊ ESTIVER.', 'pt': 'COM CONFORTO ONDE VOCÊ ESTIVER.',
'en': 'WITH COMFORT WHEREVER YOU ARE.', 'en': 'WITH COMFORT WHEREVER YOU ARE.',
}, },
'65nuva6j': { 'zt5uc5g5': {
'pt': 'Entrar', 'pt': 'Entrar',
'en': 'Sign-In', 'en': 'Sign-In',
}, },
'9u6oaw01': { 'jteakpo0': {
'pt': 'Cadastrar', 'pt': 'Cadastrar',
'en': 'Sign-Up', 'en': 'Sign-Up',
}, },
'd1qem43w': { 'qoc86gvo': {
'pt': 'Entrar', 'pt': 'Entrar',
'en': 'Sign-In', 'en': 'Sign-In',
}, },
'bhowzv2u': { 'p5tgmj0c': {
'pt': 'Cadastrar', 'pt': 'Cadastrar',
'en': 'Sign-Up', 'en': 'Sign-Up',
}, },
@ -371,39 +371,43 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
}, },
// scheduleCompleteVisitPage // scheduleCompleteVisitPage
{ {
'e4w9lbke': {
'pt': 'Criar Agendamento',
'en': 'Create Schedule',
},
'47bsumoy': {
'pt': 'Histórico de Visitas',
'en': 'Visit History',
},
'15ekd1ge': {
'pt': 'Agendar Visita',
'en': 'Schedule Visit',
},
'qo0pg2at': { 'qo0pg2at': {
'pt': 'Quais visitantes você deseja cadastrar?', 'pt': 'Quais visitantes você deseja cadastrar?',
'en': 'Which visitors do you want to register?', 'en': 'Which visitors do you want to register?',
}, },
'i0jhuu3e': { 'i0jhuu3e': {
'pt': 'Clique para adicionar um visitante', 'pt': 'Clique para adicionar um visitante',
'en': 'Click to add a visitor', 'en': 'Click to add photo for visitor',
}, },
'z4ry3tge': { 'z4ry3tge': {
'pt': 'Qual o período de validade da visita?', 'pt': 'Qual o período de validade da visita?',
'en': 'Visit Validity Period', 'en': 'Visit Validity Period',
}, },
'hjp5mzbd': { '9mg9nv2j': {
'pt': 'Inicio da Visita', 'pt': 'Ínicio da Visita',
'en': 'Start of Visit', 'en': 'Start of the Visit',
}, },
'2in5sljf': { 'y5s85khj': {
'pt': '', 'pt': 'Quando a visitas se inicia?',
'en': 'When does the visit start?',
},
'4o0cbb70': {
'pt': 'Término da Visita',
'en': 'End of Visit', 'en': 'End of Visit',
}, },
'ce6xryf4': { 'bhmgddc4': {
'pt': 'Quando você inicia a visita?',
'en': 'When do you start the visit?',
},
'jwsbk0xu': {
'pt': 'Fim da Visita',
'en': 'End of Visit',
},
'87rlxmbk': {
'pt': '',
'en': 'End of Visit',
},
'lyfe46f6': {
'pt': 'Quando a visita terminá?', 'pt': 'Quando a visita terminá?',
'en': 'When will the visit end?', 'en': 'When will the visit end?',
}, },
@ -411,10 +415,6 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
'pt': 'Quais são os motivos da visita?', 'pt': 'Quais são os motivos da visita?',
'en': 'What are the reasons for the visit?', 'en': 'What are the reasons for the visit?',
}, },
'bbauep0b': {
'pt': 'Motivo da Visita',
'en': 'End of Visit',
},
'x1ij847i': { 'x1ij847i': {
'pt': 'Escolha um motivo aqui', 'pt': 'Escolha um motivo aqui',
'en': 'Choose a reason here', 'en': 'Choose a reason here',
@ -423,10 +423,6 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
'pt': 'Search for an item...', 'pt': 'Search for an item...',
'en': '', 'en': '',
}, },
'etzbm8l5': {
'pt': 'Nível de Acesso',
'en': 'End of Visit',
},
'kmgv5j7x': { 'kmgv5j7x': {
'pt': 'Escolha um nível de acesso aqui', 'pt': 'Escolha um nível de acesso aqui',
'en': 'Choose an access level here', 'en': 'Choose an access level here',
@ -455,50 +451,6 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
'pt': 'Escreva as suas observações aqui', 'pt': 'Escreva as suas observações aqui',
'en': 'Write your observations here', 'en': 'Write your observations here',
}, },
'bvioevav': {
'pt': 'Ativo',
'en': 'Active',
},
'295oz5is': {
'pt': '16/10/2024',
'en': '16/10/2024',
},
'07h0w8ki': {
'pt': '16/10/2024',
'en': '16/10/2024',
},
'd34nuw4w': {
'pt': 'Visitante:',
'en': 'Visitor:',
},
'y8geteyc': {
'pt': ' Lucas Martin Mota',
'en': 'Lucas Martin Mota',
},
'gxdykms1': {
'pt': 'Morador:',
'en': 'Resident:',
},
'ue7wkm9r': {
'pt': ' Lucas Martin Mota',
'en': 'Lucas Martin Mota',
},
'zs8s0wd3': {
'pt': 'Validade:',
'en': 'Validity:',
},
'z7fset9r': {
'pt': ' 16/10/2024 a 16/10/2024',
'en': ' 16/10/2024 a 16/10/2024',
},
'fcb5avae': {
'pt': 'Agendamento Ativo',
'en': 'Active Scheduling',
},
'61lcxdgm': {
'pt': 'Agendar Visita',
'en': 'Schedule Visit',
},
'v3mpyspm': { 'v3mpyspm': {
'pt': 'scheduleVisit', 'pt': 'scheduleVisit',
'en': '', 'en': '',
@ -559,20 +511,6 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
'en': '', 'en': '',
}, },
}, },
// onBoardingPage
{
'6exl3e75': {
'pt': 'Home',
'en': '',
},
},
// fastPassPage
{
'koh6s96f': {
'pt': 'Home',
'en': '',
},
},
// visitorDetailsModal // visitorDetailsModal
{ {
'kqzf7nx2': { 'kqzf7nx2': {
@ -821,31 +759,47 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
'pt': 'Cadastrar \nPet', 'pt': 'Cadastrar \nPet',
'en': 'Register\npet', 'en': 'Register\npet',
}, },
'xlp8dyn6': {
'pt': 'Agendar \nVisita',
'en': 'To schedule\nVisit',
},
'l6b9o7yn': { 'l6b9o7yn': {
'pt': 'QR Code \nde Acesso', 'pt': 'QR Code \nde Acesso',
'en': 'QR Code\nAccess', 'en': 'QR Code\nAccess',
}, },
'45gqx8e0': {
'pt': 'Agenda \nAuto-Visita',
'en': 'Schedule\nSelf-Visit',
},
}, },
// menuStaggeredViewComponent // menuStaggeredViewComponent
{ {
'ee33l0ms': { 'jn7p6pj6': {
'pt': 'Agendar \nVisita', 'pt': 'Agenda \nAuto-Visita',
'en': 'Schedule \nVisit', 'en': 'Schedule\nSelf-Visit',
}, },
'ya37l3jt': { 'yymmdtyv': {
'pt': 'Cadastrar\n Visitante', 'pt': 'Cadastrar\nVisitante',
'en': 'Register\n Visitor', 'en': 'Register\nVisitor',
}, },
'h8s3adu8': { 'f2jbm9jz': {
'pt': 'Vincular\nCondomínio', 'pt': 'Vincular \nCondomínio',
'en': 'Link\nCondominium', 'en': 'Link\nCondominium',
}, },
'j6tfixen': { 'rs5a7h6m': {
'pt': 'Cadastrar\nPet', 'pt': 'Cadastrar \nPet',
'en': 'Register\npet', 'en': 'Register\npet',
}, },
'9tli4i2x': { 'if2zuaok': {
'pt': 'QR Code\nde Acesso', 'pt': 'Agendar \nVisita',
'en': 'To schedule\nVisit',
},
'r4mjqq6s': {
'pt': 'Agendar \nVisita',
'en': 'To schedule\nVisit',
},
'cilu7ief': {
'pt': 'QR Code \nde Acesso',
'en': 'QR Code\nAccess', 'en': 'QR Code\nAccess',
}, },
}, },
@ -860,151 +814,6 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
'en': 'All', 'en': 'All',
}, },
}, },
// signInComponent
{
'9hbdjxrz': {
'pt': 'VAMOS LA! ENTRE COM A SUA CONTA',
'en': 'LET\'S GO! SIGN IN WITH YOUR ACCOUNT',
},
'1ltg0ylb': {
'pt': 'Email',
'en': 'Email',
},
'2x19ce8k': {
'pt': 'Senha',
'en': 'Password',
},
'k44tm7wo': {
'pt': 'Entrar',
'en': 'Sign-In',
},
'14u7ipws': {
'pt': 'Cadastrar',
'en': 'Sign-Up',
},
'1x926nsn': {
'pt': 'Entrar',
'en': 'Sign-In',
},
'jwvd4ai1': {
'pt': 'Cadastrar',
'en': 'Sign-Up',
},
'05dx91ku': {
'pt': 'Você esqueceu a sua senha?',
'en': 'Have you forgotten your password?',
},
'p5c6d54y': {
'pt': ' Recupere aqui',
'en': 'recover here',
},
'olf967cj': {
'pt': 'Termo de Uso',
'en': 'Terms of use',
},
},
// signUpComponent
{
'49609olv': {
'pt': 'INSIRA SEU EMAIL E SENHA, VAMOS TE CADASTRAR!',
'en': 'ENTER YOUR EMAIL AND PASSWORD, LET\'S REGISTER YOU!',
},
'3corpwhd': {
'pt': 'Nome',
'en': 'Name',
},
'80wonb69': {
'pt': 'Email',
'en': 'Email',
},
'ws143wf4': {
'pt': '',
'en': '',
},
'0firji8l': {
'pt': 'Senha',
'en': 'Password',
},
'rnvdwzei': {
'pt': 'Cadastrar-se',
'en': 'Sign-Up',
},
'a9smhn5b': {
'pt': 'Você já tem uma conta? ',
'en': 'You already have an account?',
},
'09xv5ctc': {
'pt': 'Clique aqui',
'en': 'Click here',
},
'huygnka2': {
'pt': 'Termo de Uso',
'en': '',
},
},
// welcomeComponent
{
'dsc9tuc8': {
'pt': 'UMA EXPERIÊCIA COMPLETA',
'en': 'A COMPLETE EXPERIENCE',
},
'5bgqn16z': {
'pt': 'COM CONFORTO ONDE VOCÊ ESTIVER.',
'en': 'WITH COMFORT WHEREVER YOU ARE.',
},
'dynet730': {
'pt': 'Entrar',
'en': 'Sign-In',
},
'hha60cg7': {
'pt': 'Cadastrar',
'en': 'Sign-Up',
},
'zvtay8ee': {
'pt': 'Entrar',
'en': 'Sign-In',
},
'o6zob50a': {
'pt': 'Cadastrar',
'en': 'Sign-Up',
},
},
// forgotPasswordComponent
{
'xxm3ajsy': {
'pt': 'ESQUECEU SUA SENHA?',
'en': 'FORGOT YOUR PASSWORD?',
},
'wu2f7yzo': {
'pt':
'Não se preucupe nós vamos te ajudar, digite o email cadastrado no aplicativo e clique em enviar.',
'en':
'Don\'t worry, we will help you, enter the email registered in the application and click send.',
},
'mtz8l7ft': {
'pt': 'Email',
'en': 'Email',
},
'w7y5wlnv': {
'pt': 'digite o seu email.....',
'en': 'enter your email.....',
},
'74rnd5bu': {
'pt': 'Enviar',
'en': 'To send',
},
},
// selectHeaderComponent
{
'1gr8ztd5': {
'pt': 'Criar Agendamento',
'en': 'Create Schedule',
},
'xjahsbjw': {
'pt': 'Histórico de Visitas',
'en': 'Visit History',
},
},
// Miscellaneous // Miscellaneous
{ {
'i5smty81': { 'i5smty81': {
@ -1015,14 +824,6 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
'pt': '', 'pt': '',
'en': '', 'en': '',
}, },
'7zjyxhuq': {
'pt': '',
'en': '',
},
'd86ioepz': {
'pt': '',
'en': '',
},
'lt3ssl76': { 'lt3ssl76': {
'pt': '', 'pt': '',
'en': '', 'en': '',

View File

@ -42,7 +42,7 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) => GoRouter(
), ),
), ),
) )
: const OnBoardingPageWidget(), : const WelcomePageWidget(),
routes: [ routes: [
FFRoute( FFRoute(
name: '_initialize', name: '_initialize',
@ -57,7 +57,7 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) => GoRouter(
), ),
), ),
) )
: const OnBoardingPageWidget(), : const WelcomePageWidget(),
), ),
FFRoute( FFRoute(
name: 'LoginPage', name: 'LoginPage',
@ -77,7 +77,16 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) => GoRouter(
FFRoute( FFRoute(
name: 'homePage', name: 'homePage',
path: '/homePage', path: '/homePage',
builder: (context, params) => const HomePageWidget(), builder: (context, params) => HomePageWidget(
userUUID: params.getParam(
'userUUID',
ParamType.String,
),
devUUID: params.getParam(
'devUUID',
ParamType.String,
),
),
), ),
FFRoute( FFRoute(
name: 'RegisterPage', name: 'RegisterPage',
@ -92,7 +101,16 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) => GoRouter(
FFRoute( FFRoute(
name: 'registerVisitorPage', name: 'registerVisitorPage',
path: '/registerVisitorPage', path: '/registerVisitorPage',
builder: (context, params) => const RegisterVisitorPageWidget(), builder: (context, params) => RegisterVisitorPageWidget(
userUUID: params.getParam(
'userUUID',
ParamType.String,
),
devUUID: params.getParam(
'devUUID',
ParamType.String,
),
),
), ),
FFRoute( FFRoute(
name: 'scheduleCompleteVisitPage', name: 'scheduleCompleteVisitPage',
@ -137,16 +155,6 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) => GoRouter(
name: 'scheduleProvisionalVisitPage', name: 'scheduleProvisionalVisitPage',
path: '/scheduleProvisionalVisitPage', path: '/scheduleProvisionalVisitPage',
builder: (context, params) => const ScheduleProvisionalVisitPageWidget(), builder: (context, params) => const ScheduleProvisionalVisitPageWidget(),
),
FFRoute(
name: 'onBoardingPage',
path: '/onBoardingPage',
builder: (context, params) => const OnBoardingPageWidget(),
),
FFRoute(
name: 'fastPassPage',
path: '/fastPassPage',
builder: (context, params) => const FastPassPageWidget(),
) )
].map((r) => r.toRoute(appStateNotifier)).toList(), ].map((r) => r.toRoute(appStateNotifier)).toList(),
); );

View File

@ -1,12 +1,12 @@
// Export pages // Export pages
export '/on_boarding/on_boarding_legacy/login_page/login_page_widget.dart' export '/application_pages/login_page/login_page_widget.dart'
show LoginPageWidget; show LoginPageWidget;
export '/on_boarding/on_boarding_legacy/forgot_password_page/forgot_password_page_widget.dart' export '/application_pages/forgot_password_page/forgot_password_page_widget.dart'
show ForgotPasswordPageWidget; show ForgotPasswordPageWidget;
export '/application_pages/home_page/home_page_widget.dart' show HomePageWidget; export '/application_pages/home_page/home_page_widget.dart' show HomePageWidget;
export '/on_boarding/on_boarding_legacy/register_page/register_page_widget.dart' export '/application_pages/register_page/register_page_widget.dart'
show RegisterPageWidget; show RegisterPageWidget;
export '/on_boarding/on_boarding_legacy/welcome_page/welcome_page_widget.dart' export '/application_pages/welcome_page/welcome_page_widget.dart'
show WelcomePageWidget; show WelcomePageWidget;
export '/application_pages/register_visitor_page/register_visitor_page_widget.dart' export '/application_pages/register_visitor_page/register_visitor_page_widget.dart'
show RegisterVisitorPageWidget; show RegisterVisitorPageWidget;
@ -14,7 +14,3 @@ export '/application_pages/schedule_complete_visit_page/schedule_complete_visit_
show ScheduleCompleteVisitPageWidget; show ScheduleCompleteVisitPageWidget;
export '/application_pages/schedule_provisional_visit_page/schedule_provisional_visit_page_widget.dart' export '/application_pages/schedule_provisional_visit_page/schedule_provisional_visit_page_widget.dart'
show ScheduleProvisionalVisitPageWidget; show ScheduleProvisionalVisitPageWidget;
export '/on_boarding/on_boarding_beta/on_boarding_page/on_boarding_page_widget.dart'
show OnBoardingPageWidget;
export '/application_pages/fast_pass_page/fast_pass_page_widget.dart'
show FastPassPageWidget;

View File

@ -1,26 +0,0 @@
import '/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_util.dart';
import 'forgot_password_component_widget.dart'
show ForgotPasswordComponentWidget;
import 'package:flutter/material.dart';
class ForgotPasswordComponentModel
extends FlutterFlowModel<ForgotPasswordComponentWidget> {
/// State fields for stateful widgets in this component.
// State field(s) for emailAddress widget.
FocusNode? emailAddressFocusNode;
TextEditingController? emailAddressTextController;
String? Function(BuildContext, String?)? emailAddressTextControllerValidator;
// Stores action output result for [Backend Call - API (forgotPassword)] action in Button-Login widget.
ApiCallResponse? req;
@override
void initState(BuildContext context) {}
@override
void dispose() {
emailAddressFocusNode?.dispose();
emailAddressTextController?.dispose();
}
}

View File

@ -1,292 +0,0 @@
import '/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/flutter_flow_widgets.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'forgot_password_component_model.dart';
export 'forgot_password_component_model.dart';
class ForgotPasswordComponentWidget extends StatefulWidget {
const ForgotPasswordComponentWidget({super.key});
@override
State<ForgotPasswordComponentWidget> createState() =>
_ForgotPasswordComponentWidgetState();
}
class _ForgotPasswordComponentWidgetState
extends State<ForgotPasswordComponentWidget> {
late ForgotPasswordComponentModel _model;
@override
void setState(VoidCallback callback) {
super.setState(callback);
_model.onUpdate();
}
@override
void initState() {
super.initState();
_model = createModel(context, () => ForgotPasswordComponentModel());
_model.emailAddressTextController ??= TextEditingController();
_model.emailAddressFocusNode ??= FocusNode();
}
@override
void dispose() {
_model.maybeDispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Align(
alignment: const AlignmentDirectional(0.0, 1.0),
child: Container(
width: double.infinity,
height: 300.0,
constraints: const BoxConstraints(
maxWidth: 570.0,
),
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground,
),
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// This row exists for when the "app bar" is hidden on desktop, having a way back for the user can work well.
if (responsiveVisibility(
context: context,
phone: false,
tablet: false,
))
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 16.0, 8.0),
child: InkWell(
splashColor: Colors.transparent,
focusColor: Colors.transparent,
hoverColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () async {
context.safePop();
},
child: Row(
mainAxisSize: MainAxisSize.max,
children: [
const Padding(
padding: EdgeInsetsDirectional.fromSTEB(
0.0, 12.0, 0.0, 12.0),
child: Icon(
Icons.arrow_back_rounded,
color: Color(0xFF15161E),
size: 24.0,
),
),
Padding(
padding:
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'),
),
),
),
],
),
),
),
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0),
child: Text(
FFLocalizations.of(context).getText(
'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'),
),
),
),
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(16.0, 4.0, 16.0, 4.0),
child: Text(
FFLocalizations.of(context).getText(
'wu2f7yzo' /* Não se preucupe nós vamos te a... */,
),
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'),
),
),
),
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(
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,
),
),
style: FlutterFlowTheme.of(context).bodyMedium.override(
fontFamily: 'Plus Jakarta Sans',
color: FlutterFlowTheme.of(context).secondaryText,
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),
),
),
),
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 24.0, 0.0, 0.0),
child: FFButtonWidget(
onPressed: () async {
var shouldSetState = false;
_model.req = await PhpGroup.forgotPasswordCall.call(
email: _model.emailAddressTextController.text,
);
shouldSetState = true;
if (PhpGroup.forgotPasswordCall.error(
(_model.req?.jsonBody ?? ''),
) ==
false) {
Navigator.pop(context);
} else {
if (shouldSetState) setState(() {});
return;
}
if (shouldSetState) setState(() {});
},
text: FFLocalizations.of(context).getText(
'74rnd5bu' /* Enviar */,
),
options: FFButtonOptions(
width: 270.0,
height: 50.0,
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
iconPadding:
const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0),
color: const Color(0xFF1AAB5F),
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'),
),
elevation: 3.0,
borderSide: const BorderSide(
color: Colors.transparent,
width: 1.0,
),
),
showLoadingIndicator: false,
),
),
),
],
),
),
);
}
}

View File

@ -1,45 +0,0 @@
import '/flutter_flow/flutter_flow_util.dart';
import '/on_boarding/on_boarding_beta/sign_in_component/sign_in_component_widget.dart';
import '/on_boarding/on_boarding_beta/sign_up_component/sign_up_component_widget.dart';
import '/on_boarding/on_boarding_beta/welcome_component/welcome_component_widget.dart';
import 'on_boarding_page_widget.dart' show OnBoardingPageWidget;
import 'package:flutter/material.dart';
class OnBoardingPageModel extends FlutterFlowModel<OnBoardingPageWidget> {
/// Local state fields for this page.
String toggleIdx = 'welcome';
/// State fields for stateful widgets in this page.
final unfocusNode = FocusNode();
// Model for signInComponent component.
late SignInComponentModel signInComponentModel;
// Model for signUpComponent component.
late SignUpComponentModel signUpComponentModel;
// Model for welcomeComponent component.
late WelcomeComponentModel welcomeComponentModel;
@override
void initState(BuildContext context) {
signInComponentModel = createModel(context, () => SignInComponentModel());
signUpComponentModel = createModel(context, () => SignUpComponentModel());
welcomeComponentModel = createModel(context, () => WelcomeComponentModel());
}
@override
void dispose() {
unfocusNode.dispose();
signInComponentModel.dispose();
signUpComponentModel.dispose();
welcomeComponentModel.dispose();
}
/// Action blocks.
Future toggleOnBoardingActionPage(
BuildContext context, {
required String? toggleValue,
}) async {
toggleIdx = toggleValue!;
}
}

View File

@ -1,131 +0,0 @@
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/on_boarding/on_boarding_beta/sign_in_component/sign_in_component_widget.dart';
import '/on_boarding/on_boarding_beta/sign_up_component/sign_up_component_widget.dart';
import '/on_boarding/on_boarding_beta/welcome_component/welcome_component_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:provider/provider.dart';
import 'on_boarding_page_model.dart';
export 'on_boarding_page_model.dart';
class OnBoardingPageWidget extends StatefulWidget {
const OnBoardingPageWidget({super.key});
@override
State<OnBoardingPageWidget> createState() => _OnBoardingPageWidgetState();
}
class _OnBoardingPageWidgetState extends State<OnBoardingPageWidget> {
late OnBoardingPageModel _model;
final scaffoldKey = GlobalKey<ScaffoldState>();
@override
void initState() {
super.initState();
_model = createModel(context, () => OnBoardingPageModel());
// On page load action.
SchedulerBinding.instance.addPostFrameCallback((_) async {
if (FFAppState().isLogged == true) {
context.pushNamed(
'homePage',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.fade,
duration: Duration(milliseconds: 0),
),
},
);
} else {
if (isAndroid == true) {
FFAppState().device = 'Android';
setState(() {});
} else if (isiOS == true) {
FFAppState().device = 'iOS';
setState(() {});
} else {
FFAppState().device = 'Web';
setState(() {});
}
}
});
}
@override
void dispose() {
_model.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
context.watch<FFAppState>();
return GestureDetector(
onTap: () => _model.unfocusNode.canRequestFocus
? FocusScope.of(context).requestFocus(_model.unfocusNode)
: FocusScope.of(context).unfocus(),
child: Scaffold(
key: scaffoldKey,
backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
body: SafeArea(
top: true,
child: Stack(
children: [
if (_model.toggleIdx == 'SignIn')
wrapWithModel(
model: _model.signInComponentModel,
updateCallback: () => setState(() {}),
updateOnChange: true,
child: SignInComponentWidget(
toggleOnBoardingPageAction: (toggleValueSignInParam) async {
await _model.toggleOnBoardingActionPage(
context,
toggleValue: toggleValueSignInParam,
);
setState(() {});
},
),
),
if (_model.toggleIdx == 'SignUp')
wrapWithModel(
model: _model.signUpComponentModel,
updateCallback: () => setState(() {}),
updateOnChange: true,
child: SignUpComponentWidget(
toggleOnBoardingPageAction: (toggleValueSignUpParam) async {
await _model.toggleOnBoardingActionPage(
context,
toggleValue: toggleValueSignUpParam,
);
setState(() {});
},
),
),
if (_model.toggleIdx == 'welcome')
wrapWithModel(
model: _model.welcomeComponentModel,
updateCallback: () => setState(() {}),
updateOnChange: true,
child: WelcomeComponentWidget(
toggleOnboardingPageAction:
(toggleValueWelcomeParam) async {
await _model.toggleOnBoardingActionPage(
context,
toggleValue: toggleValueWelcomeParam,
);
setState(() {});
},
),
),
],
),
),
),
);
}
}

View File

@ -1,899 +0,0 @@
import '/flutter_flow/flutter_flow_animations.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/flutter_flow_widgets.dart';
import '/on_boarding/on_boarding_beta/forgot_password_component/forgot_password_component_widget.dart';
import '/actions/actions.dart' as action_blocks;
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_animate/flutter_animate.dart';
import 'package:google_fonts/google_fonts.dart';
import 'sign_in_component_model.dart';
export 'sign_in_component_model.dart';
class SignInComponentWidget extends StatefulWidget {
const SignInComponentWidget({
super.key,
required this.toggleOnBoardingPageAction,
});
final Future Function(String toggleValueSignInParam)?
toggleOnBoardingPageAction;
@override
State<SignInComponentWidget> createState() => _SignInComponentWidgetState();
}
class _SignInComponentWidgetState extends State<SignInComponentWidget>
with TickerProviderStateMixin {
late SignInComponentModel _model;
final animationsMap = <String, AnimationInfo>{};
@override
void setState(VoidCallback callback) {
super.setState(callback);
_model.onUpdate();
}
@override
void initState() {
super.initState();
_model = createModel(context, () => SignInComponentModel());
_model.emailAddressTextController ??= TextEditingController();
_model.emailAddressFocusNode ??= FocusNode();
_model.passwordTextController ??= TextEditingController();
_model.passwordFocusNode ??= FocusNode();
animationsMap.addAll({
'containerOnPageLoadAnimation': AnimationInfo(
trigger: AnimationTrigger.onPageLoad,
effectsBuilder: () => [
VisibilityEffect(duration: 1.ms),
FadeEffect(
curve: Curves.easeInOut,
delay: 0.0.ms,
duration: 300.0.ms,
begin: 0.0,
end: 1.0,
),
MoveEffect(
curve: Curves.easeInOut,
delay: 0.0.ms,
duration: 300.0.ms,
begin: const Offset(0.0, 140.0),
end: const Offset(0.0, 0.0),
),
ScaleEffect(
curve: Curves.easeInOut,
delay: 0.0.ms,
duration: 300.0.ms,
begin: const Offset(0.9, 0.9),
end: const Offset(1.0, 1.0),
),
TiltEffect(
curve: Curves.easeInOut,
delay: 0.0.ms,
duration: 300.0.ms,
begin: const Offset(-0.349, 0),
end: const Offset(0, 0),
),
],
),
});
}
@override
void dispose() {
_model.maybeDispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Row(
mainAxisSize: MainAxisSize.max,
children: [
Expanded(
flex: 6,
child: Container(
width: 100.0,
height: double.infinity,
decoration: const BoxDecoration(),
alignment: const AlignmentDirectional(0.0, -1.0),
child: Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding:
const EdgeInsetsDirectional.fromSTEB(0.0, 35.0, 0.0, 35.0),
child: Container(
width: 548.0,
height: 112.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16.0),
),
alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Align(
alignment: const AlignmentDirectional(0.0, 1.0),
child: Padding(
padding: const EdgeInsets.all(3.0),
child: Text(
FFLocalizations.of(context).getText(
'9hbdjxrz' /* VAMOS LA! ENTRE COM A SUA CONT... */,
),
textAlign: TextAlign.start,
style: FlutterFlowTheme.of(context)
.displaySmall
.override(
fontFamily: 'Plus Jakarta Sans',
color: FlutterFlowTheme.of(context)
.primaryText,
fontSize: 24.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(
'Plus Jakarta Sans'),
),
),
),
),
),
],
),
),
),
),
Container(
width: 291.0,
height: 167.0,
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,
),
),
),
Column(
mainAxisSize: MainAxisSize.max,
children: [
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
34.0, 0.0, 34.0, 0.0),
child: Container(
width: double.infinity,
constraints: const BoxConstraints(
maxWidth: 570.0,
),
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context)
.primaryBackground,
borderRadius: BorderRadius.circular(12.0),
shape: BoxShape.rectangle,
),
child: Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding(
padding: const EdgeInsets.all(32.0),
child: Column(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 16.0),
child: SizedBox(
width: double.infinity,
child: TextFormField(
controller: _model
.emailAddressTextController,
focusNode:
_model.emailAddressFocusNode,
autofocus: false,
textCapitalization:
TextCapitalization.none,
textInputAction:
TextInputAction.next,
obscureText: false,
decoration: InputDecoration(
labelText:
FFLocalizations.of(context)
.getText(
'1ltg0ylb' /* Email */,
),
labelStyle: FlutterFlowTheme.of(
context)
.labelLarge
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme.of(
context)
.primaryText,
fontSize: 16.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
'Plus Jakarta Sans'),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(
context)
.customColor1,
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(
context)
.success,
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(
context)
.error,
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
focusedErrorBorder:
OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(
context)
.error,
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
suffixIcon: Icon(
Icons.email,
color:
FlutterFlowTheme.of(context)
.accent1,
size: 22.0,
),
),
style: FlutterFlowTheme.of(context)
.bodyLarge
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme.of(
context)
.primaryText,
fontSize: 16.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
'Plus Jakarta Sans'),
),
keyboardType:
TextInputType.emailAddress,
validator: _model
.emailAddressTextControllerValidator
.asValidator(context),
),
),
),
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 16.0),
child: SizedBox(
width: double.infinity,
child: TextFormField(
controller:
_model.passwordTextController,
focusNode: _model.passwordFocusNode,
autofocus: false,
textInputAction:
TextInputAction.send,
obscureText:
!_model.passwordVisibility,
decoration: InputDecoration(
labelText:
FFLocalizations.of(context)
.getText(
'2x19ce8k' /* Senha */,
),
labelStyle: FlutterFlowTheme.of(
context)
.labelLarge
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme.of(
context)
.primaryText,
fontSize: 16.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
'Plus Jakarta Sans'),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(
context)
.customColor1,
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(
color: Color(0xFF1AAB5F),
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
errorBorder: OutlineInputBorder(
borderSide: const BorderSide(
color: Color(0xFFFF5963),
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
focusedErrorBorder:
OutlineInputBorder(
borderSide: const BorderSide(
color: Color(0xFFFF5963),
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
filled: true,
fillColor:
FlutterFlowTheme.of(context)
.primaryBackground,
suffixIcon: InkWell(
onTap: () => setState(
() => _model
.passwordVisibility =
!_model
.passwordVisibility,
),
focusNode: FocusNode(
skipTraversal: true),
child: Icon(
_model.passwordVisibility
? Icons
.visibility_outlined
: Icons
.visibility_off_outlined,
color: FlutterFlowTheme.of(
context)
.accent1,
size: 24.0,
),
),
),
style: FlutterFlowTheme.of(context)
.bodyLarge
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme.of(
context)
.primaryText,
fontSize: 16.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
'Plus Jakarta Sans'),
),
validator: _model
.passwordTextControllerValidator
.asValidator(context),
),
),
),
Builder(
builder: (context) {
if (MediaQuery.sizeOf(context).width <
kBreakpointSmall
? true
: false) {
return Column(
mainAxisSize: MainAxisSize.max,
children: [
Padding(
padding: const EdgeInsetsDirectional
.fromSTEB(
0.0, 0.0, 0.0, 16.0),
child: FFButtonWidget(
onPressed: ((_model.emailAddressTextController
.text ==
'') &&
(_model.passwordTextController
.text ==
''))
? null
: () async {
await action_blocks
.singInActionApp(
context,
emailAdress: _model
.emailAddressTextController
.text,
password: _model
.passwordTextController
.text,
);
setState(() {});
},
text: FFLocalizations.of(
context)
.getText(
'k44tm7wo' /* Entrar */,
),
options: FFButtonOptions(
width: double.infinity,
height: 44.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:
FlutterFlowTheme.of(
context)
.primary,
textStyle:
FlutterFlowTheme.of(
context)
.titleSmall
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme.of(
context)
.info,
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,
),
borderRadius:
BorderRadius.circular(
12.0),
disabledColor:
const Color(0x951AAB5F),
),
showLoadingIndicator: false,
),
),
Padding(
padding: const EdgeInsetsDirectional
.fromSTEB(
0.0, 0.0, 0.0, 16.0),
child: FFButtonWidget(
onPressed: () async {
await widget
.toggleOnBoardingPageAction
?.call(
'SignUp',
);
},
text: FFLocalizations.of(
context)
.getText(
'14u7ipws' /* Cadastrar */,
),
options: FFButtonOptions(
width: double.infinity,
height: 44.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:
FlutterFlowTheme.of(
context)
.customColor1,
textStyle:
FlutterFlowTheme.of(
context)
.titleSmall
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme.of(
context)
.secondaryText,
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,
),
borderRadius:
BorderRadius.circular(
12.0),
),
showLoadingIndicator: false,
),
),
],
);
} else {
return Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
children: [
Expanded(
child: Padding(
padding:
const EdgeInsetsDirectional
.fromSTEB(0.0, 0.0,
0.0, 16.0),
child: FFButtonWidget(
onPressed: () {
print(
'signInButtonLoginForm pressed ...');
},
text: FFLocalizations.of(
context)
.getText(
'1x926nsn' /* Entrar */,
),
options: FFButtonOptions(
width: double.infinity,
height: 44.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:
FlutterFlowTheme.of(
context)
.accent1,
textStyle:
FlutterFlowTheme.of(
context)
.titleSmall
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme.of(
context)
.secondaryText,
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,
),
borderRadius:
BorderRadius
.circular(12.0),
),
showLoadingIndicator:
false,
),
),
),
Expanded(
child: Padding(
padding:
const EdgeInsetsDirectional
.fromSTEB(0.0, 0.0,
0.0, 16.0),
child: FFButtonWidget(
onPressed: () async {
context.pushNamed(
'RegisterPage');
},
text: FFLocalizations.of(
context)
.getText(
'jwvd4ai1' /* Cadastrar */,
),
options: FFButtonOptions(
width: double.infinity,
height: 44.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:
FlutterFlowTheme.of(
context)
.customColor1,
textStyle:
FlutterFlowTheme.of(
context)
.titleSmall
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme.of(
context)
.secondaryText,
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,
),
borderRadius:
BorderRadius
.circular(12.0),
),
showLoadingIndicator:
false,
),
),
),
].divide(const SizedBox(width: 7.0)),
);
}
},
),
// 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),
child: RichText(
textScaler:
MediaQuery.of(context).textScaler,
text: TextSpan(
children: [
TextSpan(
text:
FFLocalizations.of(context)
.getText(
'05dx91ku' /* Você esqueceu a sua senha? */,
),
style: TextStyle(
color: FlutterFlowTheme.of(
context)
.primaryText,
),
),
TextSpan(
text:
FFLocalizations.of(context)
.getText(
'p5c6d54y' /* Recupere aqui */,
),
style:
FlutterFlowTheme.of(context)
.bodyMedium
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme
.of(context)
.primary,
fontSize: 14.0,
letterSpacing: 0.0,
fontWeight:
FontWeight.normal,
useGoogleFonts:
GoogleFonts
.asMap()
.containsKey(
'Plus Jakarta Sans'),
),
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 ForgotPasswordComponentWidget(),
);
},
).then((value) =>
safeSetState(
() {}));
},
)
],
style: FlutterFlowTheme.of(context)
.bodyMedium
.override(
fontFamily:
FlutterFlowTheme.of(
context)
.bodyMediumFamily,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
FlutterFlowTheme.of(
context)
.bodyMediumFamily),
),
),
),
),
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),
),
),
],
),
),
),
).animateOnPageLoad(
animationsMap['containerOnPageLoadAnimation']!),
),
),
],
),
],
),
),
),
),
),
],
);
}
}

View File

@ -1,43 +0,0 @@
import '/flutter_flow/flutter_flow_util.dart';
import 'sign_up_component_widget.dart' show SignUpComponentWidget;
import 'package:flutter/material.dart';
class SignUpComponentModel extends FlutterFlowModel<SignUpComponentWidget> {
/// State fields for stateful widgets in this component.
// State field(s) for nameRegisterForm widget.
FocusNode? nameRegisterFormFocusNode;
TextEditingController? nameRegisterFormTextController;
String? Function(BuildContext, String?)?
nameRegisterFormTextControllerValidator;
// State field(s) for emailRegisterForm widget.
FocusNode? emailRegisterFormFocusNode;
TextEditingController? emailRegisterFormTextController;
String? Function(BuildContext, String?)?
emailRegisterFormTextControllerValidator;
// State field(s) for passwordRegisterForm widget.
FocusNode? passwordRegisterFormFocusNode;
TextEditingController? passwordRegisterFormTextController;
late bool passwordRegisterFormVisibility;
String? Function(BuildContext, String?)?
passwordRegisterFormTextControllerValidator;
// Stores action output result for [Action Block - signUpActionApp] action in SignUpButtonRegisterForm widget.
bool? signUp;
@override
void initState(BuildContext context) {
passwordRegisterFormVisibility = false;
}
@override
void dispose() {
nameRegisterFormFocusNode?.dispose();
nameRegisterFormTextController?.dispose();
emailRegisterFormFocusNode?.dispose();
emailRegisterFormTextController?.dispose();
passwordRegisterFormFocusNode?.dispose();
passwordRegisterFormTextController?.dispose();
}
}

View File

@ -1,770 +0,0 @@
import '/flutter_flow/flutter_flow_animations.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/flutter_flow_widgets.dart';
import '/actions/actions.dart' as action_blocks;
import 'package:easy_debounce/easy_debounce.dart';
import 'package:flutter/material.dart';
import 'package:flutter_animate/flutter_animate.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart';
import 'sign_up_component_model.dart';
export 'sign_up_component_model.dart';
class SignUpComponentWidget extends StatefulWidget {
const SignUpComponentWidget({
super.key,
required this.toggleOnBoardingPageAction,
});
final Future Function(String toggleValueSignUpParam)?
toggleOnBoardingPageAction;
@override
State<SignUpComponentWidget> createState() => _SignUpComponentWidgetState();
}
class _SignUpComponentWidgetState extends State<SignUpComponentWidget>
with TickerProviderStateMixin {
late SignUpComponentModel _model;
final animationsMap = <String, AnimationInfo>{};
@override
void setState(VoidCallback callback) {
super.setState(callback);
_model.onUpdate();
}
@override
void initState() {
super.initState();
_model = createModel(context, () => SignUpComponentModel());
_model.nameRegisterFormTextController ??= TextEditingController();
_model.nameRegisterFormFocusNode ??= FocusNode();
_model.nameRegisterFormFocusNode!.addListener(() => setState(() {}));
_model.emailRegisterFormTextController ??= TextEditingController();
_model.emailRegisterFormFocusNode ??= FocusNode();
_model.emailRegisterFormFocusNode!.addListener(() => setState(() {}));
_model.passwordRegisterFormTextController ??= TextEditingController();
_model.passwordRegisterFormFocusNode ??= FocusNode();
_model.passwordRegisterFormFocusNode!.addListener(() => setState(() {}));
animationsMap.addAll({
'containerOnPageLoadAnimation': AnimationInfo(
trigger: AnimationTrigger.onPageLoad,
effectsBuilder: () => [
VisibilityEffect(duration: 1.ms),
FadeEffect(
curve: Curves.easeInOut,
delay: 0.0.ms,
duration: 300.0.ms,
begin: 0.0,
end: 1.0,
),
MoveEffect(
curve: Curves.easeInOut,
delay: 0.0.ms,
duration: 300.0.ms,
begin: const Offset(0.0, 140.0),
end: const Offset(0.0, 0.0),
),
ScaleEffect(
curve: Curves.easeInOut,
delay: 0.0.ms,
duration: 300.0.ms,
begin: const Offset(0.9, 0.9),
end: const Offset(1.0, 1.0),
),
TiltEffect(
curve: Curves.easeInOut,
delay: 0.0.ms,
duration: 300.0.ms,
begin: const Offset(-0.349, 0),
end: const Offset(0, 0),
),
],
),
});
}
@override
void dispose() {
_model.maybeDispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
context.watch<FFAppState>();
return Row(
mainAxisSize: MainAxisSize.max,
children: [
Expanded(
flex: 6,
child: Container(
width: 100.0,
height: double.infinity,
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground,
),
alignment: const AlignmentDirectional(0.0, -1.0),
child: Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.all(4.0),
child: Container(
width: 669.0,
height: 112.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16.0),
),
alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
Expanded(
child: Align(
alignment: const AlignmentDirectional(0.0, -1.0),
child: Padding(
padding: const EdgeInsets.all(4.0),
child: Text(
FFLocalizations.of(context).getText(
'49609olv' /* INSIRA SEU EMAIL E SENHA, VAMO... */,
),
textAlign: TextAlign.start,
style: FlutterFlowTheme.of(context)
.displaySmall
.override(
fontFamily: 'Plus Jakarta Sans',
color: FlutterFlowTheme.of(context)
.primaryText,
fontSize: 24.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(
'Plus Jakarta Sans'),
),
),
),
),
),
],
),
),
),
),
Container(
width: 291.0,
height: 167.0,
decoration: const BoxDecoration(),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.0),
child: SvgPicture.network(
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/ug2zlyhca2sh/Frame_5.svg',
width: 603.0,
height: 155.0,
fit: BoxFit.contain,
),
),
),
Column(
mainAxisSize: MainAxisSize.max,
children: [
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding(
padding: const EdgeInsets.all(34.0),
child: Container(
width: double.infinity,
constraints: const BoxConstraints(
maxWidth: 570.0,
),
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context)
.primaryBackground,
borderRadius: BorderRadius.circular(12.0),
),
child: Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding(
padding: const EdgeInsets.all(32.0),
child: Column(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 16.0),
child: SizedBox(
width: double.infinity,
child: TextFormField(
controller: _model
.nameRegisterFormTextController,
focusNode: _model
.nameRegisterFormFocusNode,
onChanged: (_) =>
EasyDebounce.debounce(
'_model.nameRegisterFormTextController',
const Duration(milliseconds: 2000),
() => setState(() {}),
),
autofocus: false,
autofillHints: const [AutofillHints.name],
obscureText: false,
decoration: InputDecoration(
labelText:
FFLocalizations.of(context)
.getText(
'3corpwhd' /* Nome */,
),
labelStyle: FlutterFlowTheme.of(
context)
.labelLarge
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme.of(
context)
.primaryText,
fontSize: 16.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
'Plus Jakarta Sans'),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(
context)
.customColor1,
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(
context)
.success,
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(
context)
.error,
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
focusedErrorBorder:
OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(
context)
.error,
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
filled: true,
fillColor:
FlutterFlowTheme.of(context)
.primaryBackground,
suffixIcon: Icon(
Icons.person,
color:
FlutterFlowTheme.of(context)
.accent1,
size: 22.0,
),
),
style: FlutterFlowTheme.of(context)
.bodyLarge
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme.of(
context)
.primaryText,
fontSize: 16.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
'Plus Jakarta Sans'),
),
keyboardType: TextInputType.name,
validator: _model
.nameRegisterFormTextControllerValidator
.asValidator(context),
),
),
),
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 16.0),
child: SizedBox(
width: double.infinity,
child: TextFormField(
controller: _model
.emailRegisterFormTextController,
focusNode: _model
.emailRegisterFormFocusNode,
onChanged: (_) =>
EasyDebounce.debounce(
'_model.emailRegisterFormTextController',
const Duration(milliseconds: 2000),
() => setState(() {}),
),
autofocus: false,
autofillHints: const [
AutofillHints.email
],
obscureText: false,
decoration: InputDecoration(
labelText:
FFLocalizations.of(context)
.getText(
'80wonb69' /* Email */,
),
labelStyle: FlutterFlowTheme.of(
context)
.labelLarge
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme.of(
context)
.primaryText,
fontSize: 16.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
'Plus Jakarta Sans'),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(
context)
.primaryText,
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(
context)
.success,
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(
context)
.error,
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
focusedErrorBorder:
OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(
context)
.error,
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
filled: true,
fillColor:
FlutterFlowTheme.of(context)
.primaryBackground,
suffixIcon: Icon(
Icons.email,
color:
FlutterFlowTheme.of(context)
.accent1,
size: 22.0,
),
),
style: FlutterFlowTheme.of(context)
.bodyLarge
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme.of(
context)
.customColor1,
fontSize: 16.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
'Plus Jakarta Sans'),
),
keyboardType:
TextInputType.emailAddress,
validator: _model
.emailRegisterFormTextControllerValidator
.asValidator(context),
),
),
),
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 16.0),
child: SizedBox(
width: double.infinity,
child: TextFormField(
controller: _model
.passwordRegisterFormTextController,
focusNode: _model
.passwordRegisterFormFocusNode,
onChanged: (_) =>
EasyDebounce.debounce(
'_model.passwordRegisterFormTextController',
const Duration(milliseconds: 2000),
() => setState(() {}),
),
autofocus: false,
autofillHints: const [
AutofillHints.password
],
obscureText: !_model
.passwordRegisterFormVisibility,
decoration: InputDecoration(
labelText:
FFLocalizations.of(context)
.getText(
'0firji8l' /* Senha */,
),
labelStyle: FlutterFlowTheme.of(
context)
.labelLarge
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme.of(
context)
.primaryText,
fontSize: 16.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
'Plus Jakarta Sans'),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(
context)
.customColor1,
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(
color: Color(0xFF1AAB5F),
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
errorBorder: OutlineInputBorder(
borderSide: const BorderSide(
color: Color(0xFFFF5963),
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
focusedErrorBorder:
OutlineInputBorder(
borderSide: const BorderSide(
color: Color(0xFFFF5963),
width: 0.5,
),
borderRadius:
BorderRadius.circular(12.0),
),
filled: true,
fillColor:
FlutterFlowTheme.of(context)
.primaryBackground,
suffixIcon: InkWell(
onTap: () => setState(
() => _model
.passwordRegisterFormVisibility =
!_model
.passwordRegisterFormVisibility,
),
focusNode: FocusNode(
skipTraversal: true),
child: Icon(
_model.passwordRegisterFormVisibility
? Icons
.visibility_outlined
: Icons
.visibility_off_outlined,
color: FlutterFlowTheme.of(
context)
.accent1,
size: 24.0,
),
),
),
style: FlutterFlowTheme.of(context)
.bodyLarge
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme.of(
context)
.primaryText,
fontSize: 16.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
'Plus Jakarta Sans'),
),
validator: _model
.passwordRegisterFormTextControllerValidator
.asValidator(context),
),
),
),
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 16.0),
child: FFButtonWidget(
onPressed: () async {
var shouldSetState = false;
_model.signUp = await action_blocks
.signUpActionApp(
context,
name: _model
.nameRegisterFormTextController
.text,
passwd: _model
.passwordRegisterFormTextController
.text,
email: _model
.emailRegisterFormTextController
.text,
device: FFAppState().device,
);
shouldSetState = true;
if (_model.signUp == true) {
await widget
.toggleOnBoardingPageAction
?.call(
'SignIn',
);
} else {
if (shouldSetState) {
setState(() {});
}
return;
}
if (shouldSetState) {
setState(() {});
}
},
text: FFLocalizations.of(context)
.getText(
'rnvdwzei' /* Cadastrar-se */,
),
options: FFButtonOptions(
width: double.infinity,
height: 44.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: FlutterFlowTheme.of(context)
.accent1,
textStyle: FlutterFlowTheme.of(
context)
.titleSmall
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme.of(
context)
.secondaryText,
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,
),
borderRadius:
BorderRadius.circular(12.0),
),
showLoadingIndicator: false,
),
),
// 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),
child: InkWell(
splashColor: Colors.transparent,
focusColor: Colors.transparent,
hoverColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () async {
await widget
.toggleOnBoardingPageAction
?.call(
'SignIn',
);
},
child: RichText(
textScaler: MediaQuery.of(context)
.textScaler,
text: TextSpan(
children: [
TextSpan(
text: FFLocalizations.of(
context)
.getText(
'a9smhn5b' /* Você já tem uma conta? */,
),
style: TextStyle(
color: FlutterFlowTheme.of(
context)
.primaryText,
),
),
TextSpan(
text: FFLocalizations.of(
context)
.getText(
'09xv5ctc' /* Clique aqui */,
),
style: FlutterFlowTheme.of(
context)
.bodyMedium
.override(
fontFamily:
'Plus Jakarta Sans',
color:
FlutterFlowTheme.of(
context)
.primary,
fontSize: 14.0,
letterSpacing: 0.0,
fontWeight:
FontWeight.w600,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
'Plus Jakarta Sans'),
),
)
],
style:
FlutterFlowTheme.of(context)
.bodyMedium
.override(
fontFamily:
FlutterFlowTheme.of(
context)
.bodyMediumFamily,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts
.asMap()
.containsKey(
FlutterFlowTheme.of(
context)
.bodyMediumFamily),
),
),
),
),
),
],
),
),
),
).animateOnPageLoad(
animationsMap['containerOnPageLoadAnimation']!),
),
),
],
),
Text(
FFLocalizations.of(context).getText(
'huygnka2' /* Termo de Uso */,
),
style: FlutterFlowTheme.of(context).bodyMedium.override(
fontFamily:
FlutterFlowTheme.of(context).bodyMediumFamily,
color: FlutterFlowTheme.of(context).secondaryText,
fontSize: 14.0,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).bodyMediumFamily),
),
),
],
),
),
),
),
),
],
);
}
}

View File

@ -1,11 +0,0 @@
import '/flutter_flow/flutter_flow_util.dart';
import 'welcome_component_widget.dart' show WelcomeComponentWidget;
import 'package:flutter/material.dart';
class WelcomeComponentModel extends FlutterFlowModel<WelcomeComponentWidget> {
@override
void initState(BuildContext context) {}
@override
void dispose() {}
}

View File

@ -1,456 +0,0 @@
import '/flutter_flow/flutter_flow_animations.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/flutter_flow_widgets.dart';
import 'package:flutter/material.dart';
import 'package:flutter_animate/flutter_animate.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:google_fonts/google_fonts.dart';
import 'welcome_component_model.dart';
export 'welcome_component_model.dart';
class WelcomeComponentWidget extends StatefulWidget {
const WelcomeComponentWidget({
super.key,
required this.toggleOnboardingPageAction,
});
final Future Function(String toggleValueWelcomeParam)?
toggleOnboardingPageAction;
@override
State<WelcomeComponentWidget> createState() => _WelcomeComponentWidgetState();
}
class _WelcomeComponentWidgetState extends State<WelcomeComponentWidget>
with TickerProviderStateMixin {
late WelcomeComponentModel _model;
final animationsMap = <String, AnimationInfo>{};
@override
void setState(VoidCallback callback) {
super.setState(callback);
_model.onUpdate();
}
@override
void initState() {
super.initState();
_model = createModel(context, () => WelcomeComponentModel());
animationsMap.addAll({
'containerOnPageLoadAnimation': AnimationInfo(
trigger: AnimationTrigger.onPageLoad,
effectsBuilder: () => [
VisibilityEffect(duration: 1.ms),
FadeEffect(
curve: Curves.easeInOut,
delay: 0.0.ms,
duration: 300.0.ms,
begin: 0.0,
end: 1.0,
),
MoveEffect(
curve: Curves.easeInOut,
delay: 0.0.ms,
duration: 300.0.ms,
begin: const Offset(0.0, 140.0),
end: const Offset(0.0, 0.0),
),
ScaleEffect(
curve: Curves.easeInOut,
delay: 0.0.ms,
duration: 300.0.ms,
begin: const Offset(0.9, 0.9),
end: const Offset(1.0, 1.0),
),
TiltEffect(
curve: Curves.easeInOut,
delay: 0.0.ms,
duration: 300.0.ms,
begin: const Offset(-0.349, 0),
end: const Offset(0, 0),
),
],
),
});
}
@override
void dispose() {
_model.maybeDispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: SafeArea(
child: Container(
width: 648.0,
height: 208.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16.0),
),
alignment: const AlignmentDirectional(0.0, 0.0),
child: Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding(
padding: const EdgeInsets.all(14.0),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
FFLocalizations.of(context).getText(
'dsc9tuc8' /* UMA EXPERIÊCIA COMPLETA */,
),
textAlign: TextAlign.start,
style: FlutterFlowTheme.of(context)
.displaySmall
.override(
fontFamily: 'Plus Jakarta Sans',
color: FlutterFlowTheme.of(context).accent1,
fontSize: 24.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w600,
useGoogleFonts: GoogleFonts.asMap()
.containsKey('Plus Jakarta Sans'),
),
),
Align(
alignment: const AlignmentDirectional(0.0, -1.0),
child: Text(
FFLocalizations.of(context).getText(
'5bgqn16z' /* COM CONFORTO ONDE VOCÊ ESTIVER... */,
),
textAlign: TextAlign.start,
style: FlutterFlowTheme.of(context)
.displaySmall
.override(
fontFamily: 'Plus Jakarta Sans',
color: FlutterFlowTheme.of(context)
.primaryText,
fontSize: 15.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w600,
useGoogleFonts: GoogleFonts.asMap()
.containsKey('Plus Jakarta Sans'),
),
),
),
],
),
),
),
),
),
),
Container(
width: 284.0,
height: 200.0,
decoration: const BoxDecoration(),
child: ClipRRect(
borderRadius: BorderRadius.circular(0.0),
child: SvgPicture.network(
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/lv1waa0etd3j/undraw_appreciate_it_re_yc8h_(1)_1.svg',
width: 603.0,
height: double.infinity,
fit: BoxFit.contain,
),
),
),
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding(
padding: const EdgeInsets.all(34.0),
child: Container(
width: double.infinity,
constraints: const BoxConstraints(
maxWidth: 570.0,
),
decoration: BoxDecoration(
boxShadow: const [
BoxShadow(
blurRadius: 0.0,
color: Colors.transparent,
offset: Offset(
0.0,
0.0,
),
)
],
borderRadius: BorderRadius.circular(12.0),
),
child: Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding(
padding: const EdgeInsets.all(32.0),
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Builder(
builder: (context) {
if (MediaQuery.sizeOf(context).width <
kBreakpointSmall
? true
: false) {
return Column(
mainAxisSize: MainAxisSize.max,
children: [
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 16.0),
child: FFButtonWidget(
onPressed: () async {
await widget
.toggleOnboardingPageAction
?.call(
'SignIn',
);
},
text:
FFLocalizations.of(context).getText(
'dynet730' /* Entrar */,
),
options: FFButtonOptions(
width: double.infinity,
height: 44.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: FlutterFlowTheme.of(context)
.primary,
textStyle: FlutterFlowTheme.of(
context)
.titleSmall
.override(
fontFamily: 'Plus Jakarta Sans',
color:
FlutterFlowTheme.of(context)
.info,
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,
),
borderRadius:
BorderRadius.circular(12.0),
),
showLoadingIndicator: false,
),
),
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 16.0),
child: FFButtonWidget(
onPressed: () async {
await widget
.toggleOnboardingPageAction
?.call(
'SignUp',
);
},
text:
FFLocalizations.of(context).getText(
'hha60cg7' /* Cadastrar */,
),
options: FFButtonOptions(
width: double.infinity,
height: 44.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: FlutterFlowTheme.of(context)
.customColor1,
textStyle: FlutterFlowTheme.of(
context)
.titleSmall
.override(
fontFamily: 'Plus Jakarta Sans',
color:
FlutterFlowTheme.of(context)
.customColor3,
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,
),
borderRadius:
BorderRadius.circular(12.0),
),
showLoadingIndicator: false,
),
),
],
);
} else {
return Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
children: [
Expanded(
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 16.0),
child: FFButtonWidget(
onPressed: () async {
context.pushNamed(
'LoginPage',
queryParameters: {
'device': serializeParam(
'',
ParamType.String,
),
}.withoutNulls,
);
},
text: FFLocalizations.of(context)
.getText(
'zvtay8ee' /* Entrar */,
),
options: FFButtonOptions(
width: double.infinity,
height: 44.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: FlutterFlowTheme.of(context)
.primary,
textStyle: FlutterFlowTheme.of(
context)
.titleSmall
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme.of(
context)
.secondaryText,
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,
),
borderRadius:
BorderRadius.circular(12.0),
),
showLoadingIndicator: false,
),
),
),
Expanded(
child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0, 0.0, 0.0, 16.0),
child: FFButtonWidget(
onPressed: () async {
context.pushNamed('RegisterPage');
},
text: FFLocalizations.of(context)
.getText(
'o6zob50a' /* Cadastrar */,
),
options: FFButtonOptions(
width: double.infinity,
height: 44.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: FlutterFlowTheme.of(context)
.primary,
textStyle: FlutterFlowTheme.of(
context)
.titleSmall
.override(
fontFamily:
'Plus Jakarta Sans',
color: FlutterFlowTheme.of(
context)
.secondaryText,
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,
),
borderRadius:
BorderRadius.circular(12.0),
),
showLoadingIndicator: false,
),
),
),
].divide(const SizedBox(width: 7.0)),
);
}
},
),
],
),
),
),
).animateOnPageLoad(
animationsMap['containerOnPageLoadAnimation']!),
),
),
],
),
),
);
}
}

View File

@ -1,113 +0,0 @@
import '/application_components/molecular_components/throw_exception/throw_exception_widget.dart';
import '/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/custom_code/actions/index.dart' as actions;
import 'login_page_widget.dart' show LoginPageWidget;
import 'package:flutter/material.dart';
class LoginPageModel extends FlutterFlowModel<LoginPageWidget> {
/// State fields for stateful widgets in this page.
final unfocusNode = FocusNode();
// State field(s) for emailAddress widget.
FocusNode? emailAddressFocusNode;
TextEditingController? emailAddressTextController;
String? Function(BuildContext, String?)? emailAddressTextControllerValidator;
// State field(s) for password widget.
FocusNode? passwordFocusNode;
TextEditingController? passwordTextController;
late bool passwordVisibility;
String? Function(BuildContext, String?)? passwordTextControllerValidator;
@override
void initState(BuildContext context) {
passwordVisibility = false;
}
@override
void dispose() {
unfocusNode.dispose();
emailAddressFocusNode?.dispose();
emailAddressTextController?.dispose();
passwordFocusNode?.dispose();
passwordTextController?.dispose();
}
/// Action blocks.
Future signInActionPage(
BuildContext context, {
required String? emailAdress,
required String? passwd,
}) async {
String? devUUID;
ApiCallResponse? loginCall;
await Future.wait([
Future(() async {
FFAppState().email = emailAdress!;
}),
Future(() async {
FFAppState().passwd = passwd!;
}),
]);
if ((FFAppState().email != '') &&
(FFAppState().passwd != '')) {
devUUID = await actions.getDevUUID();
FFAppState().devUUID = devUUID!;
loginCall = await PhpGroup.loginCall.call(
email: FFAppState().email,
password: FFAppState().passwd,
uuid: FFAppState().devUUID,
type: FFAppState().device,
description: '',
);
FFAppState().userUUID = FFAppState().userUUID;
if (PhpGroup.loginCall.error(
(loginCall.jsonBody ?? ''),
) ==
false) {
FFAppState().isLogged = true;
context.goNamed(
'homePage',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.fade,
),
},
);
} else {
await showModalBottomSheet(
isScrollControlled: true,
backgroundColor: Colors.transparent,
enableDrag: false,
context: context,
builder: (context) {
return GestureDetector(
onTap: () => unfocusNode.canRequestFocus
? FocusScope.of(context).requestFocus(unfocusNode)
: FocusScope.of(context).unfocus(),
child: Padding(
padding: MediaQuery.viewInsetsOf(context),
child: ThrowExceptionWidget(
msg: PhpGroup.loginCall.msg(
(loginCall?.jsonBody ?? ''),
)!,
),
),
);
},
);
FFAppState().email = '';
FFAppState().passwd = '';
FFAppState().update(() {});
}
} else {
FFAppState().email = '';
FFAppState().passwd = '';
}
}
}

View File

@ -27,13 +27,21 @@ dependencies:
sdk: flutter sdk: flutter
auto_size_text: 3.0.0 auto_size_text: 3.0.0
cached_network_image: 3.3.1 cached_network_image: 3.3.1
carousel_slider: 4.2.1
cloud_functions: 4.6.7
cloud_functions_platform_interface: 5.5.18
cloud_functions_web: 4.7.1
collection: 1.18.0 collection: 1.18.0
crop_your_image: 1.0.0
device_info_plus: 9.1.2
dropdown_button2: 2.3.9 dropdown_button2: 2.3.9
easy_debounce: 2.0.1 easy_debounce: 2.0.1
equatable: 2.0.5 equatable: 2.0.5
file_picker: 6.1.1 file_picker: 6.1.1
firebase_core: 2.26.0
firebase_core_platform_interface: 5.0.0
firebase_core_web: 2.11.5
firebase_messaging: 14.7.18
firebase_messaging_platform_interface: 4.5.26
firebase_messaging_web: 3.6.7
flutter_animate: 4.1.1+1 flutter_animate: 4.1.1+1
flutter_cache_manager: 3.3.1 flutter_cache_manager: 3.3.1
flutter_plugin_android_lifecycle: 2.0.17 flutter_plugin_android_lifecycle: 2.0.17