Skip to content

Commit

Permalink
refact(Providers): add future state changing for changePassword method
Browse files Browse the repository at this point in the history
Signed-off-by: arafaysaleem <a.rafaysaleem@gmail.com>
  • Loading branch information
arafaysaleem committed Jun 20, 2021
1 parent 4cfc3c5 commit efd546b
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 36 deletions.
34 changes: 20 additions & 14 deletions lib/providers/all_providers.dart
Expand Up @@ -6,22 +6,22 @@ import '../services/networking/api_service.dart';

//repository imports
import '../services/repositories/auth_repository.dart';
import '../services/repositories/bookings_repository.dart';
import '../services/repositories/movies_repository.dart';
import '../services/repositories/payments_repository.dart';
import '../services/repositories/shows_repository.dart';
import '../services/repositories/theaters_repository.dart';
import '../services/repositories/bookings_repository.dart';
import '../services/repositories/payments_repository.dart';

//provider imports
import 'auth_provider.dart';
import 'movies_provider.dart';
import 'shows_provider.dart';
import 'theaters_provider.dart';
import 'bookings_provider.dart';
import 'movies_provider.dart';
import 'payments_provider.dart';
import 'shows_provider.dart';

//states
import 'states/auth_state.dart';
import 'theaters_provider.dart';

//service providers
final _apiServiceProvider = Provider<ApiService>((ref) => ApiService());
Expand All @@ -43,17 +43,17 @@ final _showsRepositoryProvider = Provider<ShowsRepository>((ref) {
return ShowsRepository(apiService: _apiService);
});

final _theatersRepositoryProvider = Provider<TheatersRepository>((ref){
final _theatersRepositoryProvider = Provider<TheatersRepository>((ref) {
final _apiService = ref.watch(_apiServiceProvider);
return TheatersRepository(apiService: _apiService);
});

final _bookingsRepositoryProvider = Provider<BookingsRepository>((ref){
final _bookingsRepositoryProvider = Provider<BookingsRepository>((ref) {
final _apiService = ref.watch(_apiServiceProvider);
return BookingsRepository(apiService: _apiService);
});

final _paymentsRepositoryProvider = Provider<PaymentsRepository>((ref){
final _paymentsRepositoryProvider = Provider<PaymentsRepository>((ref) {
final _apiService = ref.watch(_apiServiceProvider);
return PaymentsRepository(apiService: _apiService);
});
Expand All @@ -62,7 +62,11 @@ final _paymentsRepositoryProvider = Provider<PaymentsRepository>((ref){
final authProvider = StateNotifierProvider<AuthProvider, AuthState>((ref) {
final _authRepository = ref.watch(_authRepositoryProvider);
final _prefsService = ref.watch(_prefsServiceProvider);
return AuthProvider(_authRepository, _prefsService);
return AuthProvider(
reader: ref.read,
authRepository: _authRepository,
prefsService: _prefsService,
);
});

//data providers
Expand All @@ -76,17 +80,19 @@ final showsProvider = Provider<ShowsProvider>((ref) {
return ShowsProvider(_showsRepository);
});

final theatersProvider = ChangeNotifierProvider<TheatersProvider>((ref){
final theatersProvider = ChangeNotifierProvider<TheatersProvider>((ref) {
final _theatersRepository = ref.watch(_theatersRepositoryProvider);
return TheatersProvider(_theatersRepository);
});

final bookingsProvider = Provider<BookingsProvider>((ref){
final bookingsProvider = Provider<BookingsProvider>((ref) {
final _bookingsRepository = ref.watch(_bookingsRepositoryProvider);
return BookingsProvider(read: ref.read, bookingsRepository: _bookingsRepository);
return BookingsProvider(
read: ref.read, bookingsRepository: _bookingsRepository);
});

final paymentsProvider = Provider<PaymentsProvider>((ref){
final paymentsProvider = Provider<PaymentsProvider>((ref) {
final _paymentsRepository = ref.watch(_paymentsRepositoryProvider);
return PaymentsProvider(read: ref.read, paymentsRepository: _paymentsRepository);
return PaymentsProvider(
read: ref.read, paymentsRepository: _paymentsRepository);
});
51 changes: 32 additions & 19 deletions lib/providers/auth_provider.dart
@@ -1,28 +1,39 @@
import 'package:hooks_riverpod/hooks_riverpod.dart';

//enums
//Enums
import '../enums/user_role_enum.dart';

//models
//Models
import '../models/user_model.dart';

//services
//Services
import '../services/local_storage/prefs_service.dart';
import '../services/networking/network_exception.dart';
import '../services/repositories/auth_repository.dart';

//states
import 'states/auth_state.dart';

//States
import 'states/future_state.dart';

final changePasswordState =
StateProvider((ref) => const FutureState<String>.idle());

class AuthProvider extends StateNotifier<AuthState> {
late UserModel? _currentUser;
final AuthRepository _authRepository;
final PrefsService _prefsService;
final Reader _reader;
String _token = "";
String _password = "";

AuthProvider(this._authRepository, this._prefsService)
: super(const AuthState.unauthenticated()) {
AuthProvider({
required AuthRepository authRepository,
required PrefsService prefsService,
required Reader reader,
}) : _authRepository = authRepository,
_prefsService = prefsService,
_reader = reader,
super(const AuthState.unauthenticated()) {
init();
}

Expand Down Expand Up @@ -62,7 +73,7 @@ class AuthProvider extends StateNotifier<AuthState> {
}
}

void login({
Future<void> login({
required String email,
required String password,
}) async {
Expand All @@ -81,7 +92,7 @@ class AuthProvider extends StateNotifier<AuthState> {
}
}

void register({
Future<void> register({
required String email,
required String password,
required String fullName,
Expand Down Expand Up @@ -128,19 +139,21 @@ class AuthProvider extends StateNotifier<AuthState> {
return result;
}

Future<bool> changePassword({
required String email,
required String oldPassword,
required String newPassword,
}) async {
Future<void> changePassword({required String newPassword}) async {
final data = {
"email": email,
"password": oldPassword,
"email": currentUserEmail,
"password": currentUserPassword,
"new_password": newPassword,
};
final result = await _authRepository.sendChangePasswordData(data: data);
if (result) _updatePassword(newPassword);
return result;
final _changePasswordState = _reader(changePasswordState);
_changePasswordState.state = const FutureState.loading();
try {
final result = await _authRepository.sendChangePasswordData(data: data);
_updatePassword(newPassword);
_changePasswordState.state = FutureState.data(data: result);
} on NetworkException catch (e) {
_changePasswordState.state = FutureState.failed(reason: e.message);
}
}

Future<bool> verifyOtp({required String email, required int otp}) async {
Expand Down
17 changes: 17 additions & 0 deletions lib/providers/states/future_state.dart
@@ -0,0 +1,17 @@
import 'package:freezed_annotation/freezed_annotation.dart';

part 'future_state.freezed.dart';

@freezed
class FutureState<T> with _$FutureState<T> {

const factory FutureState.idle() = IDLE;

const factory FutureState.loading() = LOADING;

const factory FutureState.data({required T data}) = DATA;

const factory FutureState.failed({required String reason}) = FAILED;
}


6 changes: 3 additions & 3 deletions lib/services/repositories/auth_repository.dart
Expand Up @@ -63,14 +63,14 @@ class AuthRepository {
);
}

Future<bool> sendChangePasswordData({
Future<String> sendChangePasswordData({
required Map<String, dynamic> data,
}) async {
return await _apiService.setData<bool>(
return await _apiService.setData<String>(
endpoint: ApiEndpoint.auth(AuthEndpoint.CHANGE_PASSWORD),
data: data,
requiresAuthToken: false,
converter: (response) => response["headers"]["success"] == 1,
converter: (response) => response["headers"]["message"],
);
}

Expand Down

0 comments on commit efd546b

Please sign in to comment.