57 lines
1.2 KiB
Dart
57 lines
1.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:sales_chat/models/stats.dart';
|
|
import 'package:sales_chat/services/api_service.dart';
|
|
|
|
class StatsProvider with ChangeNotifier {
|
|
final ApiService _apiService;
|
|
|
|
MyStats? _myStats;
|
|
List<RankingEntry> _ranking = [];
|
|
bool _isLoading = false;
|
|
String? _error;
|
|
|
|
StatsProvider(this._apiService);
|
|
|
|
MyStats? get myStats => _myStats;
|
|
List<RankingEntry> get ranking => _ranking;
|
|
bool get isLoading => _isLoading;
|
|
String? get error => _error;
|
|
|
|
/// Load the current user's stats
|
|
Future<void> loadMyStats() async {
|
|
_isLoading = true;
|
|
_error = null;
|
|
notifyListeners();
|
|
|
|
try {
|
|
_myStats = await _apiService.getMyStats();
|
|
_isLoading = false;
|
|
notifyListeners();
|
|
} catch (e) {
|
|
_error = 'Failed to load stats';
|
|
_isLoading = false;
|
|
notifyListeners();
|
|
}
|
|
}
|
|
|
|
/// Load the ranking list
|
|
Future<void> loadRanking({String period = 'monthly'}) async {
|
|
try {
|
|
_ranking = await _apiService.getRanking(period: period);
|
|
notifyListeners();
|
|
} catch (e) {
|
|
// Handle silently
|
|
}
|
|
}
|
|
|
|
void clearError() {
|
|
_error = null;
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> refresh() async {
|
|
await loadMyStats();
|
|
await loadRanking();
|
|
}
|
|
}
|