import 'package:flutter/material.dart'; import '../models/user_model.dart'; import '../services/auth_service.dart'; class AuthProvider extends ChangeNotifier { final AuthService _authService = AuthService(); UserModel? _user; bool _loading = false; UserModel? get user => _user; bool get loading => _loading; /// Login with username/email and password. Future login(String username, String password) async { _loading = true; notifyListeners(); try { final user = await _authService.login(username, password); _user = user; } finally { _loading = false; notifyListeners(); } } /// Register wrapper that is compatible with both old and new callers. /// /// Preferred: provide [email], [phoneNumber], [password]. /// Older callers that pass [username] will still work — username is ignored /// for the backend call (we use email/phone/password as per API spec). Future register({ String? username, // kept for backward compatibility; not sent to backend String? email, required String password, String? phoneNumber, }) async { _loading = true; notifyListeners(); try { // Prefer explicit email param; if not provided try to use username (some screens passed email as username) final resolvedEmail = (email != null && email.isNotEmpty) ? email : (username ?? ''); // Ensure we always pass a string phoneNumber to the AuthService (it expects a non-null value) final resolvedPhone = phoneNumber ?? ''; final user = await _authService.register( email: resolvedEmail, phoneNumber: resolvedPhone, password: password, ); _user = user; } finally { _loading = false; notifyListeners(); } } Future logout() async { await _authService.logout(); _user = null; notifyListeners(); } }