Files
superport_v2/lib/features/dashboard/presentation/controllers/dashboard_controller.dart
2025-10-16 18:53:22 +09:00

51 lines
1.4 KiB
Dart

import 'package:flutter/foundation.dart';
import '../../../../core/network/failure.dart';
import '../../domain/entities/dashboard_summary.dart';
import '../../domain/repositories/dashboard_repository.dart';
/// 대시보드 화면 상태를 관리하는 컨트롤러.
class DashboardController extends ChangeNotifier {
DashboardController({required DashboardRepository repository})
: _repository = repository;
final DashboardRepository _repository;
DashboardSummary? _summary;
bool _isLoading = false;
bool _isRefreshing = false;
String? _errorMessage;
DashboardSummary? get summary => _summary;
bool get isLoading => _isLoading;
bool get isRefreshing => _isRefreshing;
String? get errorMessage => _errorMessage;
/// 초기 로딩(캐시가 없을 때만 실행)
Future<void> ensureLoaded() async {
if (_summary != null || _isLoading) {
return;
}
await refresh();
}
/// 서버에서 최신 요약을 다시 불러온다.
Future<void> refresh() async {
_isLoading = _summary == null;
_isRefreshing = _summary != null;
_errorMessage = null;
notifyListeners();
try {
final result = await _repository.fetchSummary();
_summary = result;
} catch (error) {
final failure = Failure.from(error);
_errorMessage = failure.describe();
} finally {
_isLoading = false;
_isRefreshing = false;
notifyListeners();
}
}
}