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:
@@ -0,0 +1,16 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import '../../data/repositories/auth_repository.dart';
|
||||
import '../../view_models/forgot_password_view_model.dart';
|
||||
|
||||
/// Lazy ForgotPasswordViewModel provider
|
||||
Widget forgotPasswordProvider({required Widget child}) {
|
||||
return ChangeNotifierProvider(
|
||||
create:
|
||||
(context) => ForgotPasswordViewModel(
|
||||
authRepository: context.read<AuthRepository>(),
|
||||
),
|
||||
child: child,
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import '../../data/repositories/auth_repository.dart';
|
||||
import '../../view_models/reset_password_view_model.dart';
|
||||
|
||||
/// Lazy ResetPasswordViewModel provider
|
||||
Widget resetPasswordProvider({required Widget child}) {
|
||||
return ChangeNotifierProvider(
|
||||
create:
|
||||
(context) => ResetPasswordViewModel(
|
||||
authRepository: context.read<AuthRepository>(),
|
||||
),
|
||||
child: child,
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import '../../data/repositories/auth_repository.dart';
|
||||
import '../../view_models/verify_otp_view_model.dart';
|
||||
|
||||
/// Lazy VerifyOtpViewModel provider
|
||||
Widget verifyOtpProvider({required Widget child}) {
|
||||
return ChangeNotifierProvider(
|
||||
create:
|
||||
(context) =>
|
||||
VerifyOtpViewModel(authRepository: context.read<AuthRepository>()),
|
||||
child: child,
|
||||
);
|
||||
}
|
||||
@@ -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),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user