학교 전용 공부 타이머(열품타) + 학년별 랭킹 기능 추가
학생 참여 유도를 위해 공부 시작/종료 타이머와 학년별(오늘/이번주/전체) 랭킹 화면을 대시보드에 추가. 로그인 응답에 학년 정보를 포함시켜 세션 저장/복원 전체 경로에 전달되도록 함. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
// 🏆 학년별 공부시간 랭킹 화면의 기능(서버 통신/상태) 담당 컨트롤러.
|
||||
import 'dart:convert';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import '../config.dart';
|
||||
|
||||
class StudyRankingController extends ChangeNotifier {
|
||||
final int grade;
|
||||
|
||||
StudyRankingController({required this.grade});
|
||||
|
||||
bool _isLoading = true;
|
||||
String _period = 'today'; // today / week / total
|
||||
List<dynamic> _ranking = [];
|
||||
|
||||
bool get isLoading => _isLoading;
|
||||
String get period => _period;
|
||||
List<dynamic> get ranking => _ranking;
|
||||
|
||||
Future<void> init() => fetchRanking();
|
||||
|
||||
Future<void> setPeriod(String period) async {
|
||||
if (_period == period) return;
|
||||
_period = period;
|
||||
await fetchRanking();
|
||||
}
|
||||
|
||||
Future<void> fetchRanking() async {
|
||||
_isLoading = true;
|
||||
notifyListeners();
|
||||
try {
|
||||
final response = await http.get(
|
||||
Uri.parse('$baseUrl/api/study/ranking?grade=$grade&period=$_period'),
|
||||
);
|
||||
if (response.statusCode == 200) {
|
||||
final data = jsonDecode(utf8.decode(response.bodyBytes));
|
||||
_ranking = data['ranking'] ?? [];
|
||||
}
|
||||
} catch (_) {
|
||||
// 조용히 무시 - 마지막으로 받아온 랭킹을 유지한다.
|
||||
} finally {
|
||||
_isLoading = false;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user