From a92a34062c20baec264c338d6fbf97a9bd6b8082 Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Thu, 10 Oct 2024 10:37:31 -0300 Subject: [PATCH] WIP --- lib/main.dart | 10 +- .../forgot_password_model.dart | 8 +- .../forgot_password_screen.dart | 231 +++++++++--------- 3 files changed, 125 insertions(+), 124 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index ced0e349..2f3bb210 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -191,20 +191,20 @@ class _AppState extends State { if (isNotEmpty ) { final BuildContext context = StorageUtil().context!; final MediaQueryData mediaQuery = MediaQuery.of(context); - final double height = mediaQuery.size.height * 0.8; + final double height = mediaQuery.size.height * 0.6; final FlutterFlowTheme theme = FlutterFlowTheme.of(context); final Widget screen = ForgotPasswordScreen(email: email, token: token); builder(context) => screen; showModalBottomSheet( context: context, - builder: (context) => SizedBox(height: height, child: builder(context)), + builder: (context) => Padding(padding: MediaQuery.viewInsetsOf(context), child: builder(context)), isScrollControlled: true, - barrierColor: theme.primaryBackground.withOpacity(0.2), + // barrierColor: theme.primaryBackground.withOpacity(0.2), backgroundColor: theme.primaryBackground, useSafeArea: true, enableDrag: true, - isDismissible: true, - ).then((_) => StorageUtil().isRecovered = false); + // isDismissible: true, + ).whenComplete(() => StorageUtil().isRecovered = false); } } diff --git a/lib/pages/forgot_password_page/forgot_password_model.dart b/lib/pages/forgot_password_page/forgot_password_model.dart index 8d1e3572..e3df2c9d 100644 --- a/lib/pages/forgot_password_page/forgot_password_model.dart +++ b/lib/pages/forgot_password_page/forgot_password_model.dart @@ -13,8 +13,14 @@ class ForgotPasswordScreenModel extends FlutterFlowModel { String? Function(BuildContext, String?)? passwordRegisterFormTextControllerValidator; String? _passwordRegisterFormTextControllerValidator(BuildContext context, String? val) { if (val == null || val.isEmpty) { + return FFLocalizations.of(context).getVariableText( + ptText: 'Campo é necessário', + enText: 'Field is required', + ); + } + if (val.length < 8) { return FFLocalizations.of(context).getText( - '6nn79lmh' /* Campo é necessário */, + 'duq5gpp6' /* A senha deve ter pelo menos 8 ... */, ); } return null; diff --git a/lib/pages/forgot_password_page/forgot_password_screen.dart b/lib/pages/forgot_password_page/forgot_password_screen.dart index 8107d31f..2a65b77b 100644 --- a/lib/pages/forgot_password_page/forgot_password_screen.dart +++ b/lib/pages/forgot_password_page/forgot_password_screen.dart @@ -88,11 +88,7 @@ class _ForgotPasswordScreenState extends State with Ticker super.dispose(); } - @override Widget build(BuildContext context) => Scaffold( - appBar: buildAppBar(context), - body: buildBody(context), - backgroundColor: FlutterFlowTheme.of(context).primaryBackground, - ); + @override Widget build(BuildContext context) => buildBody(context); AppBar buildAppBar(BuildContext context) { @@ -130,130 +126,129 @@ class _ForgotPasswordScreenState extends State with Ticker elevation: 0.0, ); } - SafeArea buildBody(BuildContext context) { + Widget buildBody(BuildContext context) { + late final String title = FFLocalizations.of(context).getVariableText( + ptText: 'Recuperar Senha', + enText: 'Recover Password', + ); 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: 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), - ), + return SizedBox( + height: 400, + width: MediaQuery.of(context).size.width, + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.only(left: 15.0, right: 15.0, top: 10.0, bottom: 0.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.only(left: 20.0, right: 20.0, top: 10.0, bottom: 0.0), + child: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Center(child: Text(title, style: FlutterFlowTheme.of(context).title1.override( + fontFamily: 'Nunito', + color: FlutterFlowTheme.of(context).primaryText, + fontSize: 24.0, + fontWeight: FontWeight.bold, + letterSpacing: 0.0, + useGoogleFonts: GoogleFonts.asMap().containsKey('Nunito'), + ),)), + Align( + alignment: const AlignmentDirectional(-1.0, 0.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, - ), - ), - ], + 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), + ), ), ), - ).animateOnPageLoad(animationsMap['containerOnPageLoadAnimation']!), - ), + ), + 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'), + asValidator: _model.passwordRegisterFormTextControllerValidator.asValidator(context), + ), + _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'), + asValidator: _model.passwordConfirmFormTextControllerValidator.asValidator(context), + ), + ], + ), + ), + 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.passwordConfirmFormTextController!.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, required String hint, required String label,}) { + Widget _buildPasswordField(BuildContext context, {required TextEditingController? controller, required FocusNode? focusNode, required bool visibility, required VoidCallback onVisibilityToggle, required String hint, required String label, required String? Function(String?)? asValidator}) { return Padding( padding: const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 16.0), child: SizedBox( @@ -317,7 +312,7 @@ class _ForgotPasswordScreenState extends State with Ticker fontWeight: FontWeight.w500, useGoogleFonts: GoogleFonts.asMap().containsKey('Plus Jakarta Sans'), ), - validator: _model.passwordRegisterFormTextControllerValidator.asValidator(context), + validator: asValidator, ), ), );