52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:get/get.dart';
 | 
						|
import 'package:intl/intl.dart';
 | 
						|
 | 
						|
class ExperienceProvider extends GetxController {
 | 
						|
  static List<int> experienceToLevelRequirements = [
 | 
						|
    0, // Level 0
 | 
						|
    100, // Level 1
 | 
						|
    400, // Level 2
 | 
						|
    900, // Level 3
 | 
						|
    1600, // Level 4
 | 
						|
    2500, // Level 5
 | 
						|
    3600, // Level 6
 | 
						|
    4900, // Level 7
 | 
						|
    6400, // Level 8
 | 
						|
    8100, // Level 9
 | 
						|
    10000, // Level 10
 | 
						|
    12100, // Level 11
 | 
						|
    14400, // Level 12
 | 
						|
    36800 // Level 13
 | 
						|
  ];
 | 
						|
 | 
						|
  static List<String> levelLabelMapping =
 | 
						|
      List.generate(experienceToLevelRequirements.length, (x) => 'userLevel$x');
 | 
						|
 | 
						|
  static (int level, String label) getLevelFromExp(int experience) {
 | 
						|
    final exp = experienceToLevelRequirements.reversed
 | 
						|
        .firstWhere((x) => x <= experience);
 | 
						|
    final idx = experienceToLevelRequirements.indexOf(exp);
 | 
						|
    return (idx, levelLabelMapping[idx]);
 | 
						|
  }
 | 
						|
 | 
						|
  static double calcLevelUpProgress(int experience) {
 | 
						|
    final exp = experienceToLevelRequirements.reversed
 | 
						|
        .firstWhere((x) => x <= experience);
 | 
						|
    final idx = experienceToLevelRequirements.indexOf(exp);
 | 
						|
    if (idx + 1 >= experienceToLevelRequirements.length) return 1;
 | 
						|
    final nextExp = experienceToLevelRequirements[idx + 1];
 | 
						|
    return exp / nextExp;
 | 
						|
  }
 | 
						|
 | 
						|
  static String calcLevelUpProgressLevel(int experience) {
 | 
						|
    final exp = experienceToLevelRequirements.reversed
 | 
						|
        .firstWhere((x) => x <= experience);
 | 
						|
    final idx = experienceToLevelRequirements.indexOf(exp);
 | 
						|
    if (idx + 1 >= experienceToLevelRequirements.length) return 'Infinity';
 | 
						|
    final nextExp = experienceToLevelRequirements[idx + 1];
 | 
						|
    final formatter =
 | 
						|
        NumberFormat.compactCurrency(symbol: '', decimalDigits: 1);
 | 
						|
    return '${formatter.format(exp)}/${formatter.format(nextExp)}';
 | 
						|
  }
 | 
						|
}
 |