added api for forgot password

This commit is contained in:
llsajjad
2025-09-16 15:51:56 +03:30
parent 09ac79fd79
commit 69980925ad
13 changed files with 886 additions and 130 deletions
@@ -1,12 +1,11 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';
import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/views/forget_password_otp.dart/pages/forgot_password_otp_screen.dart';
import '../../../core/constants/assets.dart';
import '../../../core/theme/colors.dart';
import '../../../core/utils/app_toast.dart';
import '../../../view_models/auth_view_model.dart';
import '../../login/widgets/login_textfield.dart';
import '../../shared/base_button.dart';
@@ -22,6 +21,22 @@ class DesktopForgotPasswordPage extends StatelessWidget {
body: Center(
child: Consumer<AuthViewModel>(
builder: (context, viewModel, _) {
if (viewModel.successMessage != null) {
WidgetsBinding.instance.addPostFrameCallback((_) {
AppToast.success(context, viewModel.successMessage!);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ForgotPasswordOtpScreen(),
),
);
});
} else if (viewModel.errorMessage != null) {
WidgetsBinding.instance.addPostFrameCallback((_) {
AppToast.error(context, viewModel.errorMessage!);
});
}
return Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
@@ -60,55 +75,32 @@ class DesktopForgotPasswordPage extends StatelessWidget {
),
),
SizedBox(height: 40.0.h()),
// LoginTextField(
// controller: viewModel.emailController,
// focusNode: viewModel.emailFocus,
// label: ForgotPasswordStrings.usernameHint,
// iconPath: AssetsManager.userIcon,
// isPassword: false,
// ),
// SizedBox(height: 24.0.h()),
LoginTextField(
controller: viewModel.emailController,
focusNode: viewModel.emailFocus,
label: ForgotPasswordStrings.emailHint,
isPassword: false,
),
// SizedBox(height: 24.0.h()),
// LoginTextField(
// controller: viewModel.emailController,
// focusNode: viewModel.emailFocus,
// label: ForgotPasswordStrings.companyIdHint,
// isPassword: false,
// ),
SizedBox(height: 70.0.h()),
viewModel.isLoading
? const BaseButton(
isEnabled: false,
text: ForgotPasswordStrings.resetLink,
onPressed: null,
)
isEnabled: false,
text: ForgotPasswordStrings.resetLink,
onPressed: null,
)
: BaseButton(
isEnabled: viewModel.isEmailValid,
text: ForgotPasswordStrings.resetLink,
onPressed:
viewModel.isEmailValid
? () async {
Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
const ForgotPasswordOtpScreen(),
),
);
isEnabled: viewModel.isEmailValid,
text: ForgotPasswordStrings.resetLink,
onPressed: viewModel.isEmailValid
? () async {
await viewModel.forgotPassword(context);
}
: null,
),
: null,
),
const SizedBox(height: 12),
TextButton(
onPressed: () {
context.pop();
Navigator.pop(context);
},
child: Text(
ForgotPasswordStrings.backToSignInButton,
@@ -123,7 +115,6 @@ class DesktopForgotPasswordPage extends StatelessWidget {
),
),
),
Padding(
padding: EdgeInsets.symmetric(vertical: 20.0.h()),
child: ClipRRect(
@@ -1,13 +1,13 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';
import 'package:tm_app/core/constants/assets.dart';
import 'package:tm_app/core/theme/colors.dart';
import 'package:tm_app/core/utils/app_toast.dart';
import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/view_models/auth_view_model.dart';
import 'package:tm_app/views/forget_password_otp.dart/pages/forgot_password_otp_screen.dart';
import '../../../core/constants/assets.dart';
import '../../../core/theme/colors.dart';
import '../../../view_models/auth_view_model.dart';
import '../../login/widgets/login_textfield.dart';
import '../../shared/base_button.dart';
import '../strings/forgot_password_strings.dart';
@@ -24,6 +24,22 @@ class MobileForgotPasswordPage extends StatelessWidget {
padding: EdgeInsets.symmetric(horizontal: 24.0.w()),
child: Consumer<AuthViewModel>(
builder: (context, viewModel, _) {
if (viewModel.successMessage == null) {
WidgetsBinding.instance.addPostFrameCallback((_) {
AppToast.success(context, viewModel.successMessage!);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ForgotPasswordOtpScreen(),
),
);
});
} else if (viewModel.errorMessage != null) {
WidgetsBinding.instance.addPostFrameCallback((_) {
AppToast.error(context, viewModel.errorMessage!);
});
}
return Column(
mainAxisSize: MainAxisSize.min,
children: [
@@ -55,14 +71,6 @@ class MobileForgotPasswordPage extends StatelessWidget {
),
),
SizedBox(height: 40.0.h()),
// LoginTextField(
// controller: viewModel.emailController,
// focusNode: viewModel.emailFocus,
// label: ForgotPasswordStrings.usernameHint,
// iconPath: AssetsManager.userIcon,
// isPassword: false,
// ),
// SizedBox(height: 24.0.h()),
LoginTextField(
controller: viewModel.emailController,
focusNode: viewModel.emailFocus,
@@ -70,13 +78,6 @@ class MobileForgotPasswordPage extends StatelessWidget {
isPassword: false,
),
SizedBox(height: 24.0.h()),
// LoginTextField(
// controller: viewModel.emailController,
// focusNode: viewModel.emailFocus,
// label: ForgotPasswordStrings.companyIdHint,
// isPassword: false,
// ),
// SizedBox(height: 70.0.h()),
viewModel.isLoading
? const BaseButton(
isEnabled: false,
@@ -89,20 +90,13 @@ class MobileForgotPasswordPage extends StatelessWidget {
onPressed:
viewModel.isEmailValid
? () async {
Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
const ForgotPasswordOtpScreen(),
),
);
await viewModel.forgotPassword(context);
}
: null,
),
TextButton(
onPressed: () {
context.pop();
Navigator.pop(context);
},
child: Text(
ForgotPasswordStrings.backToSignInButton,
@@ -1,12 +1,12 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';
import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/views/forget_password_otp.dart/pages/forgot_password_otp_screen.dart';
import '../../../core/constants/assets.dart';
import '../../../core/theme/colors.dart';
import '../../../core/utils/app_toast.dart';
import '../../../view_models/auth_view_model.dart';
import '../../login/widgets/login_textfield.dart';
import '../../shared/base_button.dart';
@@ -20,6 +20,22 @@ class TabletForgotPasswordPage extends StatelessWidget {
return Scaffold(
body: Consumer<AuthViewModel>(
builder: (context, viewModel, _) {
if (viewModel.successMessage != null) {
WidgetsBinding.instance.addPostFrameCallback((_) {
AppToast.success(context, viewModel.successMessage!);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ForgotPasswordOtpScreen(),
),
);
});
} else if (viewModel.errorMessage != null) {
WidgetsBinding.instance.addPostFrameCallback((_) {
AppToast.error(context, viewModel.errorMessage!);
});
}
return Center(
child: SizedBox(
width: 364,
@@ -54,14 +70,6 @@ class TabletForgotPasswordPage extends StatelessWidget {
),
),
SizedBox(height: 40.0.h()),
// LoginTextField(
// controller: viewModel.emailController,
// focusNode: viewModel.emailFocus,
// label: ForgotPasswordStrings.usernameHint,
// iconPath: AssetsManager.userIcon,
// isPassword: false,
// ),
// SizedBox(height: 24.0.h()),
LoginTextField(
controller: viewModel.emailController,
focusNode: viewModel.emailFocus,
@@ -69,41 +77,25 @@ class TabletForgotPasswordPage extends StatelessWidget {
isPassword: false,
),
SizedBox(height: 24.0.h()),
// LoginTextField(
// controller: viewModel.emailController,
// focusNode: viewModel.emailFocus,
// label: ForgotPasswordStrings.companyIdHint,
// isPassword: false,
// ),
// SizedBox(height: 70.0.h()),
viewModel.isLoading
? const BaseButton(
isEnabled: false,
text: ForgotPasswordStrings.resetLink,
onPressed: null,
)
isEnabled: false,
text: ForgotPasswordStrings.resetLink,
onPressed: null,
)
: BaseButton(
isEnabled: viewModel.isEmailValid,
text: ForgotPasswordStrings.resetLink,
onPressed:
viewModel.isEmailValid
? () async {
Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
const ForgotPasswordOtpScreen(),
),
);
isEnabled: viewModel.isEmailValid,
text: ForgotPasswordStrings.resetLink,
onPressed: viewModel.isEmailValid
? () async {
await viewModel.forgotPassword(context);
}
: null,
),
: null,
),
const SizedBox(height: 12),
TextButton(
onPressed: () {
context.pop();
Navigator.pop(context);
},
child: Text(
ForgotPasswordStrings.backToSignInButton,
+14 -14
View File
@@ -102,20 +102,20 @@ class _LoginMobilePageState extends State<LoginMobilePage> {
}
},
),
// SizedBox(height: 32.0.h()),
// TextButton(
// onPressed: () {
// ForgotPasswordRouteData().push(context);
// },
// child: Text(
// LoginStrings.forgotPassword,
// style: TextStyle(
// fontSize: 14.0.sp(),
// fontWeight: FontWeight.w500,
// color: AppColors.mainBlue,
// ),
// ),
// ),
SizedBox(height: 32.0.h()),
TextButton(
onPressed: () {
const ForgotPasswordRouteData().push(context);
},
child: Text(
LoginStrings.forgotPassword,
style: TextStyle(
fontSize: 14.0.sp(),
fontWeight: FontWeight.w500,
color: AppColors.mainBlue,
),
),
),
],
);
},