diff --git a/devtools_options.yaml b/devtools_options.yaml index 7e7e7f6..5c27c3e 100644 --- a/devtools_options.yaml +++ b/devtools_options.yaml @@ -1 +1,2 @@ extensions: + - provider: true \ No newline at end of file diff --git a/lib/features/auth/bloc/auth_cubit.dart b/lib/features/auth/bloc/auth_cubit.dart index 0a72d66..38271c7 100644 --- a/lib/features/auth/bloc/auth_cubit.dart +++ b/lib/features/auth/bloc/auth_cubit.dart @@ -243,7 +243,7 @@ class AuthCubit extends Cubit { } } - verifyOtp() async { + verifyOtp(bool isForgotPass ) async { emit(AuthLoginLoading()); try { final response = await AuthenticationAPI.verifyPassCode( @@ -251,7 +251,7 @@ class AuthCubit extends Cubit { if (response['statusCode'] == 200) { emailController.text = email; passwordController.text = signUpPassword; - await login(); + isForgotPass?(){}: await login(); emit(AuthOtpSuccess()); } else { emit(AuthLoginError(message: 'Something went wrong')); diff --git a/lib/features/auth/view/check_email_page.dart b/lib/features/auth/view/check_email_page.dart index 0ded8d1..0812bb8 100644 --- a/lib/features/auth/view/check_email_page.dart +++ b/lib/features/auth/view/check_email_page.dart @@ -2,18 +2,17 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; +import 'package:syncrow_app/features/auth/bloc/auth_cubit.dart'; import 'package:syncrow_app/features/auth/view/otp_view.dart'; +import 'package:syncrow_app/features/shared_widgets/default_button.dart'; +import 'package:syncrow_app/features/shared_widgets/text_widgets/body_large.dart'; +import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart'; +import 'package:syncrow_app/features/shared_widgets/text_widgets/title_medium.dart'; +import 'package:syncrow_app/generated/assets.dart'; import 'package:syncrow_app/utils/context_extension.dart'; - -import '../../../generated/assets.dart'; -import '../../../navigation/routing_constants.dart'; -import '../../../utils/resource_manager/constants.dart'; -import '../../../utils/resource_manager/font_manager.dart'; -import '../../../utils/resource_manager/styles_manager.dart'; -import '../../shared_widgets/default_button.dart'; -import '../../shared_widgets/text_widgets/body_medium.dart'; -import '../../shared_widgets/text_widgets/title_medium.dart'; -import '../bloc/auth_cubit.dart'; +import 'package:syncrow_app/utils/resource_manager/constants.dart'; +import 'package:syncrow_app/utils/resource_manager/font_manager.dart'; +import 'package:syncrow_app/utils/resource_manager/styles_manager.dart'; class checkEmailPage extends StatelessWidget { @@ -23,25 +22,26 @@ class checkEmailPage extends StatelessWidget { final formKey = AuthCubit.get(context).checkemailFormKey; SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle( - statusBarBrightness: Brightness.light, statusBarIconBrightness: Brightness.light)); + statusBarBrightness: Brightness.light, + statusBarIconBrightness: Brightness.light)); return BlocConsumer( listener: (context, state) { if (state is AuthError) { - // ScaffoldMessenger.of(context).showSnackBar( - // SnackBar( - // content: Text(state.message), - // ), - // ); - } - else if (state is AuthSignUpSuccess) { - Navigator.push(context, MaterialPageRoute(builder: (context) => const OtpView( - isForgetPage: true,), - )); - - // Navigator.popAndPushNamed(context, Routes.otpRoute); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(state.message), + ), + ); + } else if (state is AuthSignUpSuccess) { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const OtpView( + isForgetPage: true, + ), + )); } }, - builder: (context, state) { return Scaffold( body: Stack( @@ -71,103 +71,143 @@ class checkEmailPage extends StatelessWidget { ), SafeArea( child: Padding( - padding: const EdgeInsets.only( - right: Constants.defaultPadding, - left: Constants.defaultPadding, - top: Constants.defaultPadding, - ), - child: Form(key: formKey,child: SingleChildScrollView( - child: Center( - child: Column( - children: [ - Center( - child: SvgPicture.asset( - Assets.assetsImagesLogo, - width: 160, - ), - ), - Center( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox(height: MediaQuery.sizeOf(context).height/5.5,), - TitleMedium( - text: 'Forgot password?', - style: context.titleMedium.copyWith( - fontWeight: FontsManager.extraBold, - color: Colors.white, - ), + padding: const EdgeInsets.only( + right: Constants.defaultPadding, + left: Constants.defaultPadding, + top: Constants.defaultPadding, + ), + child: Form( + key: formKey, + child: SingleChildScrollView( + child: Center( + child: Column( + children: [ + Center( + child: SvgPicture.asset( + Assets.assetsImagesLogo, + width: 160, ), - const SizedBox( - height: 20, - ), - const BodyMedium( - text: "Enter email address", - fontColor: Colors.white, - ), - TextFormField( - // autovalidateMode: AutovalidateMode.disabled, - textInputAction: TextInputAction.done, - keyboardType: TextInputType.text, - scrollPadding: EdgeInsets.zero, - autocorrect: false, - enableSuggestions: false, - autofillHints: const [AutofillHints.email], - validator: AuthCubit.get(context).emailAddressValidator, - onTapOutside: (event) { - FocusScope.of(context).unfocus(); - }, - onChanged: (value) { - AuthCubit.get(context).email = value; - }, - decoration: - defaultInputDecoration(context, hint: "Example@email.com"), - ), - SizedBox(height: 50,), - Row( - mainAxisAlignment: MainAxisAlignment.center, + ), + Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Expanded( - child: DefaultButton( - isDone: state is AuthLoginSuccess, - isLoading: state is AuthLoading, - customButtonStyle: ButtonStyle( - backgroundColor: MaterialStateProperty.all( - Colors.black.withOpacity(.25), - ), - foregroundColor: MaterialStateProperty.all( - Colors.white, + SizedBox( + height: + MediaQuery.sizeOf(context).height / + 5.5, + ), + TitleMedium( + text: 'Forgot password?', + style: context.titleMedium.copyWith( + fontWeight: FontsManager.extraBold, + color: Colors.white, + ), + ), + const SizedBox( + height: 20, + ), + const BodyMedium( + text: "Enter email address", + fontColor: Colors.white, + ), + TextFormField( + textInputAction: TextInputAction.done, + keyboardType: TextInputType.text, + scrollPadding: EdgeInsets.zero, + autocorrect: false, + enableSuggestions: false, + autofillHints: const [ + AutofillHints.email + ], + validator: AuthCubit.get(context) + .emailAddressValidator, + onTapOutside: (event) { + FocusScope.of(context).unfocus(); + }, + onChanged: (value) { + AuthCubit.get(context).email = value; + }, + decoration: defaultInputDecoration( + context, + hint: "Example@email.com"), + ), + const SizedBox( + height: 20, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + Expanded( + child: DefaultButton( + isDone: state is AuthLoginSuccess, + isLoading: state is AuthLoading, + customButtonStyle: ButtonStyle( + backgroundColor: + MaterialStateProperty.all( + Colors.black.withOpacity(.25), + ), + foregroundColor: + MaterialStateProperty.all( + Colors.white, + ), + ), + child: const Text( + 'Send Code', + ), + onPressed: () { + AuthCubit.get(context) + .showValidationMessage = true; + if (formKey.currentState! + .validate()) { + if ((state is! AuthLoading)) { + AuthCubit.get(context) + .sendOtp(); + FocusScope.of(context) + .unfocus(); + } + } + }, ), ), - child: const Text( - 'Send Code', - ), - onPressed: () { - AuthCubit.get(context).showValidationMessage = true; - if (formKey.currentState!.validate()) { - if ((state is! AuthLoading)) { - AuthCubit.get(context).sendOtp(); - FocusScope.of(context).unfocus(); - } - } - }, + ], + ), + Padding( + padding: EdgeInsets.only(top: MediaQuery.sizeOf(context).height/5.5), + child: Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + BodyLarge( + text: "Do you have an account? ", + style: context.displaySmall + .copyWith(color: Colors.white), + ), + TextButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: BodyLarge( + text: "Sign in", + style: + context.displaySmall.copyWith( + color: Colors.black, + fontWeight: FontsManager.bold, + ), + ), + ), + ], ), ), ], - ) - - // const LoginForm(), - // const LoginDivider(), - // const LoginWithGoogleFacebook(), - // const DontHaveAnAccount(), - ], - ), + ), + ), + ], ), - ], + ), ), - ), - ),) - ), + )), ) ], ), @@ -176,5 +216,3 @@ class checkEmailPage extends StatelessWidget { ); } } - - diff --git a/lib/features/auth/view/create_new_password.dart b/lib/features/auth/view/create_new_password.dart index 0588bb3..3c30521 100644 --- a/lib/features/auth/view/create_new_password.dart +++ b/lib/features/auth/view/create_new_password.dart @@ -2,18 +2,17 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; +import 'package:syncrow_app/features/auth/bloc/auth_cubit.dart'; import 'package:syncrow_app/features/auth/view/login_view.dart'; +import 'package:syncrow_app/features/shared_widgets/default_button.dart'; +import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart'; +import 'package:syncrow_app/features/shared_widgets/text_widgets/title_medium.dart'; +import 'package:syncrow_app/generated/assets.dart'; import 'package:syncrow_app/utils/context_extension.dart'; -import '../../../generated/assets.dart'; -import '../../../utils/helpers/custom_page_route.dart'; -import '../../../utils/resource_manager/constants.dart'; -import '../../../utils/resource_manager/font_manager.dart'; -import '../../../utils/resource_manager/styles_manager.dart'; -import '../../shared_widgets/default_button.dart'; -import '../../shared_widgets/text_widgets/body_medium.dart'; -import '../../shared_widgets/text_widgets/title_medium.dart'; -import '../bloc/auth_cubit.dart'; - +import 'package:syncrow_app/utils/helpers/custom_page_route.dart'; +import 'package:syncrow_app/utils/resource_manager/constants.dart'; +import 'package:syncrow_app/utils/resource_manager/font_manager.dart'; +import 'package:syncrow_app/utils/resource_manager/styles_manager.dart'; class CreateNewPasswordPage extends StatefulWidget { const CreateNewPasswordPage({super.key,}); @@ -30,12 +29,7 @@ class _CreateNewPasswordPageState extends State { return BlocConsumer( listener: (context, state) { if (state is AuthForgetPassSuccess) { - Future.delayed(const Duration(seconds: 2), () { - Navigator.pushReplacement( - context, - CustomPageRoute(builder: (context) => const LoginView()), - ); - }); + Navigator.of(context).pop(); } }, builder: (context, state) { @@ -89,7 +83,7 @@ class _CreateNewPasswordPageState extends State { height: 40, ), TitleMedium( - text: 'Create new account', + text: 'Create new password', style: context.titleMedium.copyWith( fontWeight: FontsManager.extraBold, color: Colors.white, @@ -100,7 +94,6 @@ class _CreateNewPasswordPageState extends State { ), Form( key: createNewPasswordKey, - // autovalidateMode: AutovalidateMode.disabled, child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -111,7 +104,6 @@ class _CreateNewPasswordPageState extends State { fontColor: Colors.white, ), TextFormField( - // autovalidateMode: AutovalidateMode.disabled, textInputAction: TextInputAction.done, keyboardType: TextInputType.text, scrollPadding: EdgeInsets.zero, diff --git a/lib/features/auth/view/otp_view.dart b/lib/features/auth/view/otp_view.dart index 7199854..8d3e7c7 100644 --- a/lib/features/auth/view/otp_view.dart +++ b/lib/features/auth/view/otp_view.dart @@ -18,8 +18,8 @@ import 'package:syncrow_app/utils/resource_manager/constants.dart'; import 'package:syncrow_app/utils/resource_manager/font_manager.dart'; class OtpView extends StatefulWidget { - final bool? isForgetPage; - const OtpView({super.key,this.isForgetPage}); + final bool isForgetPage; + const OtpView({super.key,this.isForgetPage=false}); @override State createState() => _OtpViewState(); @@ -121,7 +121,7 @@ class _OtpViewState extends State { if (state is AuthOtpSuccess) { Navigator.of(context).pop(); Navigator.of(context).pop(); - widget.isForgetPage==true? + widget.isForgetPage? Navigator.push(context, MaterialPageRoute(builder: (context) => const CreateNewPasswordPage(),)): Navigator.popAndPushNamed(context, Routes.homeRoute); } @@ -304,7 +304,7 @@ class _OtpViewState extends State { ), onPressed: () { if ((state is! AuthLoading)) { - AuthCubit.get(context).verifyOtp(); + AuthCubit.get(context).verifyOtp(widget.isForgetPage); FocusScope.of(context).unfocus(); } }, diff --git a/lib/features/auth/view/widgets/forget_password.dart b/lib/features/auth/view/widgets/forget_password.dart index e66e82c..0b0f31e 100644 --- a/lib/features/auth/view/widgets/forget_password.dart +++ b/lib/features/auth/view/widgets/forget_password.dart @@ -1,10 +1,8 @@ import 'package:flutter/material.dart'; +import 'package:syncrow_app/features/auth/view/check_email_page.dart'; import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart'; -import 'package:syncrow_app/navigation/routing_constants.dart'; import 'package:syncrow_app/utils/context_extension.dart'; -import '../check_email_page.dart'; - class ForgetPassword extends StatelessWidget { const ForgetPassword({ super.key, @@ -17,7 +15,6 @@ class ForgetPassword extends StatelessWidget { const Spacer(), TextButton( onPressed: () { - // Navigator.popAndPushNamed(context, Routes.otpRoute); Navigator.push(context, MaterialPageRoute(builder: (context) => const checkEmailPage(),)); }, child: BodyMedium(