Neda/admin_panel/lib/providers/user_provider.dart
2026-03-07 19:18:52 +03:30

83 lines
2.1 KiB
Dart

import 'package:flutter/material.dart';
import '../models/user_model.dart';
import '../services/service_locator.dart';
import '../services/api/api_client.dart';
enum LoadStatus { idle, loading, success, error }
class UserProvider extends ChangeNotifier {
List<UserModel> _users = [];
LoadStatus _status = LoadStatus.idle;
String? _error;
List<UserModel> get users => List.unmodifiable(_users);
LoadStatus get status => _status;
String? get error => _error;
bool get isLoading => _status == LoadStatus.loading;
int get totalCount => _users.length;
int get activeCount => _users.where((u) => u.isActive).length;
Future<void> loadUsers() async {
_status = LoadStatus.loading;
_error = null;
notifyListeners();
try {
_users = await ServiceLocator().users.getUsers();
_status = LoadStatus.success;
} on ApiException catch (e) {
_error = e.message;
_status = LoadStatus.error;
} catch (e) {
_error = 'خطا در دریافت کاربران';
_status = LoadStatus.error;
}
notifyListeners();
}
/// Returns the new user and its generated secret.
Future<({UserModel user, String secret})?> createUser(
String username,
UserRole role,
) async {
_error = null;
try {
final result = await ServiceLocator().users.createUser(username, role);
_users = [..._users, result.user];
notifyListeners();
return result;
} on ApiException catch (e) {
_error = e.message;
notifyListeners();
return null;
} catch (e) {
_error = 'خطا در ایجاد کاربر';
notifyListeners();
return null;
}
}
/// Returns the new secret string, or null on failure.
Future<String?> resetSecret(String userId) async {
_error = null;
try {
final secret = await ServiceLocator().users.resetSecret(userId);
return secret;
} on ApiException catch (e) {
_error = e.message;
notifyListeners();
return null;
} catch (e) {
_error = 'خطا در ریست رمز';
notifyListeners();
return null;
}
}
void clearError() {
_error = null;
notifyListeners();
}
}