Files
sendico/frontend/pshared/lib/provider/pfe/provider.dart
2025-11-13 15:06:15 +03:00

52 lines
1.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:pshared/service/pfe/service.dart';
import 'package:pshared/provider/exception.dart';
import 'package:pshared/provider/resource.dart';
import 'package:pshared/service/account.dart';
class PfeProvider extends ChangeNotifier {
// The resource now wraps our Account? state along with its loading/error state.
Resource<String?> _resource = Resource(data: null);
Resource<String?> get resource => _resource;
String? get session => _resource.data;
bool get isLoggedIn => session != null;
bool get isLoading => _resource.isLoading;
Object? get error => _resource.error;
// Private helper to update the resource and notify listeners.
void _setResource(Resource<String?> newResource) {
_resource = newResource;
notifyListeners();
}
Future<String?> login({
required String email,
required String password,
}) async {
_setResource(_resource.copyWith(isLoading: true, error: null));
try {
final acc = await PfeService.login(email, password);
_setResource(Resource(data: acc, isLoading: false));
return acc;
} catch (e) {
_setResource(_resource.copyWith(isLoading: false, error: toException(e)));
rethrow;
}
}
Future<void> logout() async {
_setResource(_resource.copyWith(isLoading: true, error: null));
try {
await AccountService.logout();
_setResource(Resource(data: null, isLoading: false));
} catch (e) {
_setResource(_resource.copyWith(isLoading: false, error: toException(e)));
rethrow;
}
}
}