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 _resource = Resource(data: null); Resource 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 newResource) { _resource = newResource; notifyListeners(); } Future 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 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; } } }