优化
This commit is contained in:
@@ -6,6 +6,7 @@ import '../models/user_progress.dart';
|
||||
class PointsService {
|
||||
/// Calculate points earned from a focus session
|
||||
/// Returns a map with breakdown: {basePoints, honestyBonus, total, breakdown}
|
||||
/// Note: breakdown contains labelKey and descriptionKey for localization
|
||||
Map<String, dynamic> calculateSessionPoints(FocusSession session) {
|
||||
// Base points = actual minutes focused
|
||||
int basePoints = session.actualMinutes;
|
||||
@@ -18,17 +19,17 @@ class PointsService {
|
||||
|
||||
int total = basePoints + honestyBonus;
|
||||
|
||||
// Detailed breakdown for UI display
|
||||
// Detailed breakdown for UI display (using localization keys)
|
||||
List<Map<String, dynamic>> breakdown = [
|
||||
{
|
||||
'label': '专注时长',
|
||||
'labelKey': 'focusTimePoints',
|
||||
'value': basePoints,
|
||||
'description': '每专注1分钟获得1积分',
|
||||
'descriptionKey': 'focusTimePointsDesc',
|
||||
},
|
||||
{
|
||||
'label': '诚实奖励',
|
||||
'labelKey': 'honestyBonusLabel',
|
||||
'value': honestyBonus,
|
||||
'description': '记录分心情况获得额外积分',
|
||||
'descriptionKey': 'honestyBonusDesc',
|
||||
},
|
||||
];
|
||||
|
||||
@@ -56,6 +57,7 @@ class PointsService {
|
||||
}
|
||||
|
||||
/// Process daily check-in and return points earned with detailed breakdown
|
||||
/// Note: breakdown contains labelKey and descriptionKey for localization
|
||||
Map<String, dynamic> processCheckIn(UserProgress progress) {
|
||||
final now = DateTime.now();
|
||||
|
||||
@@ -63,32 +65,34 @@ class PointsService {
|
||||
int points = 5;
|
||||
List<Map<String, dynamic>> breakdown = [
|
||||
{
|
||||
'label': '每日签到',
|
||||
'labelKey': 'checkInPoints',
|
||||
'value': 5,
|
||||
'description': '每日首次签到获得基础积分',
|
||||
'descriptionKey': 'checkInPointsDesc',
|
||||
},
|
||||
];
|
||||
|
||||
// Update check-in streak
|
||||
if (_isConsecutiveDay(progress.lastCheckInDate, now)) {
|
||||
progress.consecutiveCheckIns++;
|
||||
|
||||
|
||||
// Bonus for streak milestones
|
||||
if (progress.consecutiveCheckIns % 7 == 0) {
|
||||
int weeklyBonus = 30;
|
||||
points += weeklyBonus;
|
||||
breakdown.add({
|
||||
'label': '连续签到奖励',
|
||||
'labelKey': 'streakBonus',
|
||||
'value': weeklyBonus,
|
||||
'description': '连续签到${progress.consecutiveCheckIns}天',
|
||||
'descriptionKey': 'streakBonusDesc',
|
||||
'descriptionParams': {'days': progress.consecutiveCheckIns},
|
||||
});
|
||||
} else if (progress.consecutiveCheckIns % 30 == 0) {
|
||||
int monthlyBonus = 100;
|
||||
points += monthlyBonus;
|
||||
breakdown.add({
|
||||
'label': '连续签到奖励',
|
||||
'labelKey': 'streakBonus',
|
||||
'value': monthlyBonus,
|
||||
'description': '连续签到${progress.consecutiveCheckIns}天',
|
||||
'descriptionKey': 'streakBonusDesc',
|
||||
'descriptionParams': {'days': progress.consecutiveCheckIns},
|
||||
});
|
||||
}
|
||||
} else {
|
||||
@@ -157,4 +161,4 @@ class PointsService {
|
||||
'totalCheckIns': progress.checkInHistory.length,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user