Add forgot password, reset password, and verify OTP providers and view models

- Implemented `ForgotPasswordViewModel`, `ResetPasswordViewModel`, and `VerifyOtpViewModel` for handling respective functionalities.
- Created provider functions for lazy loading of these view models in the app.
- Updated routing to utilize the new providers for managing state in the forgot password flow.
- Refactored UI components to integrate with the new view models, ensuring proper state management and user feedback during operations.
This commit is contained in:
amirrezaghabeli
2025-10-06 15:39:08 +03:30
parent b522bc77a9
commit cee5e6c6d6
23 changed files with 490 additions and 310 deletions
+12 -5
View File
@@ -18,12 +18,15 @@ import '../../views/splash/pages/splash_screen.dart';
import '../../views/tenders/pages/tenders_screen.dart';
import '../../views/your_tenders/pages/your_tenders_screen.dart';
import '../providers/final_completion_provider.dart';
import '../providers/forgot_password_provider.dart';
import '../providers/home_provider.dart';
import '../providers/liked_tenders_provider.dart';
import '../providers/notification_provider.dart';
import '../providers/profile_provider.dart';
import '../providers/reset_password_provider.dart';
import '../providers/tender_detail_provider.dart';
import '../providers/tenders_provider.dart';
import '../providers/verify_otp_provider.dart';
import '../providers/your_tenders_provider.dart';
import 'app_shell/app_shell_screen.dart';
@@ -275,28 +278,32 @@ class ForgotPasswordRouteData extends GoRouteData
@override
Widget build(BuildContext context, GoRouterState state) {
return const ForgotPasswordScreen();
return forgotPasswordProvider(child: const ForgotPasswordScreen());
}
}
@TypedGoRoute<ForgotPasswordOtpRouteData>(path: '/forgot-password-otp')
class ForgotPasswordOtpRouteData extends GoRouteData
with _$ForgotPasswordOtpRouteData {
const ForgotPasswordOtpRouteData();
final String email;
const ForgotPasswordOtpRouteData({required this.email});
@override
Widget build(BuildContext context, GoRouterState state) {
return const ForgotPasswordOtpScreen();
return verifyOtpProvider(child: ForgotPasswordOtpScreen(email: email));
}
}
@TypedGoRoute<ForgotPasswordCreateRouteData>(path: '/forgot-password-create')
class ForgotPasswordCreateRouteData extends GoRouteData
with _$ForgotPasswordCreateRouteData {
const ForgotPasswordCreateRouteData();
final String resetToken;
const ForgotPasswordCreateRouteData({required this.resetToken});
@override
Widget build(BuildContext context, GoRouterState state) {
return const ForgotPasswordCreateScreen();
return resetPasswordProvider(
child: ForgotPasswordCreateScreen(resetToken: resetToken),
);
}
}
+17 -4
View File
@@ -415,10 +415,15 @@ RouteBase get $forgotPasswordOtpRouteData => GoRouteData.$route(
mixin _$ForgotPasswordOtpRouteData on GoRouteData {
static ForgotPasswordOtpRouteData _fromState(GoRouterState state) =>
const ForgotPasswordOtpRouteData();
ForgotPasswordOtpRouteData(email: state.uri.queryParameters['email']!);
ForgotPasswordOtpRouteData get _self => this as ForgotPasswordOtpRouteData;
@override
String get location => GoRouteData.$location('/forgot-password-otp');
String get location => GoRouteData.$location(
'/forgot-password-otp',
queryParams: {'email': _self.email},
);
@override
void go(BuildContext context) => context.go(location);
@@ -442,10 +447,18 @@ RouteBase get $forgotPasswordCreateRouteData => GoRouteData.$route(
mixin _$ForgotPasswordCreateRouteData on GoRouteData {
static ForgotPasswordCreateRouteData _fromState(GoRouterState state) =>
const ForgotPasswordCreateRouteData();
ForgotPasswordCreateRouteData(
resetToken: state.uri.queryParameters['reset-token']!,
);
ForgotPasswordCreateRouteData get _self =>
this as ForgotPasswordCreateRouteData;
@override
String get location => GoRouteData.$location('/forgot-password-create');
String get location => GoRouteData.$location(
'/forgot-password-create',
queryParams: {'reset-token': _self.resetToken},
);
@override
void go(BuildContext context) => context.go(location);