diff --git a/lib/main.dart b/lib/main.dart index b40004f6..21550fc5 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -192,33 +192,35 @@ class _AppState extends State { } void openAppLink(Uri uri) { final bool isRecovered = StorageUtil().isRecovered; - if(isRecovered) return; + if (isRecovered) return; StorageUtil().isRecovered = true; final String email = uri.queryParameters['email'] ?? ''; final String token = uri.queryParameters['token'] ?? ''; - final BuildContext context = StorageUtil().context!; + final bool isNotEmpty = email.isNotEmpty && token.isNotEmpty; - final MediaQueryData mediaQuery = MediaQuery.of(context); - final double height = mediaQuery.size.height * 0.8; - final FlutterFlowTheme theme = FlutterFlowTheme.of(context); - final Widget screen = ForgotPasswordScreen(email: email, token: token); - final Widget Function(BuildContext) builder = (context) => screen; if (isNotEmpty) { - showModalBottomSheet( - context: context, - builder: (context) => SizedBox(height: height, child: builder(context)), - isScrollControlled: true, - showDragHandle: true, - barrierColor: theme.primaryText.withOpacity(0.2), - backgroundColor: theme.primaryBackground, - - - ).then((_) => StorageUtil().isRecovered = false); + final BuildContext context = StorageUtil().context!; + final MediaQueryData mediaQuery = MediaQuery.of(context); + final double height = mediaQuery.size.height * 0.8; + final FlutterFlowTheme theme = FlutterFlowTheme.of(context); + final Widget screen = ForgotPasswordScreen(email: email, token: token); + builder(context) => screen; + WidgetsBinding.instance.addPersistentFrameCallback((_) { + showModalBottomSheet( + context: context, + builder: (context) => + SizedBox(height: height, child: builder(context)), + isScrollControlled: true, + showDragHandle: true, + barrierColor: theme.primaryText.withOpacity(0.2), + backgroundColor: theme.primaryBackground, + useSafeArea: true, + enableDrag: true, + isDismissible: true, + ).then((_) => StorageUtil().isRecovered = false); + }); } - // Use the extracted email and token as needed - // navigatorKey.currentState?.pushNamed('/forgotPassword', arguments: {'email': email, 'token': token}); - } void _setupFirebaseMessaging() async { FirebaseMessaging messaging = FirebaseMessaging.instance; diff --git a/lib/pages/forgot_password_page/forgot_password_screen.dart b/lib/pages/forgot_password_page/forgot_password_screen.dart index 00c9509b..45c620e7 100644 --- a/lib/pages/forgot_password_page/forgot_password_screen.dart +++ b/lib/pages/forgot_password_page/forgot_password_screen.dart @@ -130,158 +130,138 @@ class _ForgotPasswordScreenState extends State with Ticker elevation: 0.0, ); } - SafeArea buildBody(BuildContext context) { late final String message = FFLocalizations.of(context).getVariableText( ptText: 'Qual será a sua nova senha? Insira abaixo e confirme.', enText: 'What will be your new password? Enter it below and confirm.', ); return SafeArea( - child: 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: [ - Container( - width: 291.0, - height: 167.0, - decoration: const BoxDecoration(), - child: ClipRRect( - borderRadius: BorderRadius.circular(8.0), - child: const AtomImageSvgTheme(filename: 'register', width: 600, height: 155), - ), - ), - Padding( - padding: const EdgeInsets.all(34.0), - child: Material( - child: Container( - width: double.infinity, - constraints: const BoxConstraints(maxWidth: 570.0), - decoration: BoxDecoration( - color: FlutterFlowTheme.of(context).primaryBackground, - borderRadius: BorderRadius.circular(12.0), - ), - child: Padding( - padding: const EdgeInsets.all(32.0), - child: Column( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Align( - alignment: const AlignmentDirectional(-1.0, 0.0), - child: Padding( - padding: const EdgeInsetsDirectional.fromSTEB(20.0, 24.0, 0.0, 30.0), - child: Text( - message, - textAlign: TextAlign.start, - style: FlutterFlowTheme.of(context).bodyMedium.override( - fontFamily: FlutterFlowTheme.of(context).bodyMediumFamily, - fontWeight: FontWeight.bold, - useGoogleFonts: GoogleFonts.asMap().containsKey( - FlutterFlowTheme.of(context).bodyMediumFamily), - ), - ), - ), - ), - Form( - key: _model.formKey, - autovalidateMode: AutovalidateMode.onUserInteraction, - child: Column( - mainAxisSize: MainAxisSize.max, - children: [ - _buildPasswordField( - context, - controller: _model.passwordRegisterFormTextController, - focusNode: _model.passwordRegisterFormFocusNode, - visibility: _model.passwordRegisterFormVisibility, - onVisibilityToggle: () => setState(() => _model.passwordRegisterFormVisibility = !_model.passwordRegisterFormVisibility), - ), - _buildPasswordField( - context, - controller: _model.passwordConfirmFormTextController, - focusNode: _model.passwordConfirmFormFocusNode, - visibility: _model.passwordConfirmFormVisibility, - onVisibilityToggle: () => setState(() => _model.passwordConfirmFormVisibility = !_model.passwordConfirmFormVisibility), - ), - ], - ), - ), - Padding( - padding: const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 16.0), - child: FFButtonWidget( - key: const ValueKey('SubmitButtonWidget'), - onPressed: _model.isFormInvalid() ? null : () async { - await AuthenticationService.changePassword(context, widget.email, _model.passwordRegisterFormTextController!.text, widget.token); - setState(() {}); - }, - text: FFLocalizations.of(context).getVariableText( - ptText: 'Enviar', - enText: 'Submit', - ), - options: FFButtonOptions( - width: double.infinity, - height: 44.0, - color: FlutterFlowTheme.of(context).accent1, - textStyle: FlutterFlowTheme.of(context).titleSmall.override( - fontFamily: 'Plus Jakarta Sans', - color: FlutterFlowTheme.of(context).secondaryText, - fontSize: 16.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: FlutterFlowTheme.of(context).customColor5, - disabledTextColor: Colors.white, - ), - showLoadingIndicator: true, - ), - ), - ], - ), - ), - ).animateOnPageLoad(animationsMap['containerOnPageLoadAnimation']!), - ), - ), - ], - ), + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.only(bottom: 20.0), // Adiciona espaçamento inferior + child: Column( + mainAxisSize: MainAxisSize.max, + children: [ + Container( + width: 291.0, + height: 167.0, + decoration: const BoxDecoration(), + child: ClipRRect( + borderRadius: BorderRadius.circular(8.0), + child: const AtomImageSvgTheme(filename: 'register', width: 600, height: 155), ), ), - ), + Padding( + padding: const EdgeInsets.all(34.0), + child: Material( + child: Container( + width: double.infinity, + constraints: const BoxConstraints(maxWidth: 570.0), + decoration: BoxDecoration( + color: FlutterFlowTheme.of(context).primaryBackground, + borderRadius: BorderRadius.circular(12.0), + ), + child: Padding( + padding: const EdgeInsets.all(32.0), + child: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Align( + alignment: const AlignmentDirectional(-1.0, 0.0), + child: Padding( + padding: const EdgeInsetsDirectional.fromSTEB(20.0, 24.0, 0.0, 30.0), + child: Text( + message, + textAlign: TextAlign.start, + style: FlutterFlowTheme.of(context).bodyMedium.override( + fontFamily: FlutterFlowTheme.of(context).bodyMediumFamily, + fontWeight: FontWeight.bold, + useGoogleFonts: GoogleFonts.asMap().containsKey( + FlutterFlowTheme.of(context).bodyMediumFamily), + ), + ), + ), + ), + Form( + key: _model.formKey, + autovalidateMode: AutovalidateMode.onUserInteraction, + child: Column( + mainAxisSize: MainAxisSize.max, + children: [ + _buildPasswordField( + context, + controller: _model.passwordRegisterFormTextController, + focusNode: _model.passwordRegisterFormFocusNode, + visibility: _model.passwordRegisterFormVisibility, + onVisibilityToggle: () => setState(() => _model.passwordRegisterFormVisibility = !_model.passwordRegisterFormVisibility), + label: FFLocalizations.of(context).getVariableText(ptText: 'Nova Senha', enText: 'New Password'), + hint: FFLocalizations.of(context).getVariableText(ptText: 'Insira sua senha', enText: 'Enter your password'), + ), + _buildPasswordField( + context, + controller: _model.passwordConfirmFormTextController, + focusNode: _model.passwordConfirmFormFocusNode, + visibility: _model.passwordConfirmFormVisibility, + onVisibilityToggle: () => setState(() => _model.passwordConfirmFormVisibility = !_model.passwordConfirmFormVisibility), + label: FFLocalizations.of(context).getVariableText(ptText: 'Confirme a Senha', enText: 'Confirm Password'), + hint: FFLocalizations.of(context).getVariableText(ptText: 'Confirme sua senha', enText: 'Confirm your password'), + ), + ], + ), + ), + Padding( + padding: const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 16.0), + child: FFButtonWidget( + key: const ValueKey('SubmitButtonWidget'), + onPressed: _model.isFormInvalid() ? null : () async { + await AuthenticationService.changePassword(context, widget.email, _model.passwordRegisterFormTextController!.text, widget.token); + setState(() {}); + }, + text: FFLocalizations.of(context).getVariableText( + ptText: 'Enviar', + enText: 'Submit', + ), + options: FFButtonOptions( + width: double.infinity, + height: 44.0, + color: FlutterFlowTheme.of(context).accent1, + textStyle: FlutterFlowTheme.of(context).titleSmall.override( + fontFamily: 'Plus Jakarta Sans', + color: FlutterFlowTheme.of(context).secondaryText, + fontSize: 16.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: FlutterFlowTheme.of(context).customColor5, + disabledTextColor: Colors.white, + ), + showLoadingIndicator: true, + ), + ), + ], + ), + ), + ).animateOnPageLoad(animationsMap['containerOnPageLoadAnimation']!), + ), + ), + ], ), - ], + ), ), ); } - - - Widget _buildPasswordField( - BuildContext context, { - required TextEditingController? controller, - required FocusNode? focusNode, - required bool visibility, - required VoidCallback onVisibilityToggle}){ - final label = FFLocalizations.of(context).getVariableText( - ptText: 'Senha', - enText: 'Password', - ); - final hint = FFLocalizations.of(context).getVariableText( - ptText: 'Insira sua senha', - enText: 'Enter your password', - ); - + Widget _buildPasswordField(BuildContext context, + { + required TextEditingController? controller, + required FocusNode? focusNode, + required bool visibility, + required VoidCallback onVisibilityToggle, + required String hint, + required String label, + }){ return Padding( padding: const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 16.0), child: SizedBox(