Enhance authentication flow and user role management
- Updated AuthViewModel to hydrate user data from storage on initialization. - Added method to AuthRepository for retrieving stored customer data. - Enhanced AuthService to save and retrieve customer data from SharedPreferences. - Refactored UI components to use context.watch for user role updates in MeetingTimeDialog, TenderDetailActions, and TendersPage. - Improved navigation logic in final completion pages to handle user interactions more effectively.
This commit is contained in:
@@ -6,6 +6,7 @@ import 'package:firebase_messaging/firebase_messaging.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:tm_app/core/utils/logger.dart';
|
||||
import 'package:tm_app/data/services/api/auth_api.dart';
|
||||
import 'package:tm_app/data/services/model/customer/customer.dart';
|
||||
import 'package:tm_app/data/services/model/forgot_password_response/forgot_password_response_model.dart';
|
||||
import 'package:tm_app/data/services/model/login_response/login_response_model.dart';
|
||||
import 'package:tm_app/data/services/model/logout_response/logout_response.dart';
|
||||
@@ -55,9 +56,17 @@ class AuthService {
|
||||
final token = result.value.data.accessToken;
|
||||
AppLogger().info('🔑 Bearer token: $token');
|
||||
final refreshToken = result.value.data.refreshToken;
|
||||
final customer = result.value.data.customer;
|
||||
|
||||
await prefs.setString('bearer', token!);
|
||||
await prefs.setString('refresh_token', refreshToken!);
|
||||
|
||||
// Save customer data as JSON string
|
||||
if (customer != null) {
|
||||
final customerJson = jsonEncode(customer.toJson());
|
||||
await prefs.setString('customer_data', customerJson);
|
||||
AppLogger().info('👤 Customer data saved to preferences');
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -68,6 +77,12 @@ class AuthService {
|
||||
method: 'DELETE',
|
||||
(json) => LogoutResponse.fromJson(json),
|
||||
);
|
||||
|
||||
// Clear local data after successful logout
|
||||
if (result is Ok<LogoutResponse>) {
|
||||
await localLogout();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -89,7 +104,8 @@ class AuthService {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.remove('bearer');
|
||||
await prefs.remove('refresh_token');
|
||||
appLogger.info('tokens cleared!');
|
||||
await prefs.remove('customer_data');
|
||||
appLogger.info('tokens and customer data cleared!');
|
||||
}
|
||||
|
||||
Future<Result<ForgotPasswordResponseModel>> forgotPassword({
|
||||
@@ -131,4 +147,19 @@ class AuthService {
|
||||
}
|
||||
return const Result.ok(true);
|
||||
}
|
||||
|
||||
Future<Customer?> getStoredCustomer() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
final customerJson = prefs.getString('customer_data');
|
||||
if (customerJson == null) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
final customerMap = jsonDecode(customerJson) as Map<String, dynamic>;
|
||||
return Customer.fromJson(customerMap);
|
||||
} catch (e) {
|
||||
AppLogger().error('❌ Failed to parse stored customer data: $e');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user