chatapp3-flutter/lib/services/gift/gift_system_manager.dart
2026-04-09 21:32:23 +08:00

180 lines
3.8 KiB
Dart

import 'package:flutter/cupertino.dart';
import 'package:yumi/shared/business_logic/models/res/mic_res.dart';
import 'package:yumi/app/constants/sc_global_config.dart';
import 'package:yumi/shared/tools/sc_gift_vap_svga_manager.dart';
import 'package:yumi/shared/business_logic/models/res/gift_res.dart';
typedef GiftProvider = SocialChatGiftSystemManager;
class SocialChatGiftSystemManager extends ChangeNotifier {
///幸运礼物就不显示这个特效
bool hideLGiftAnimal = false;
///挡位是否已经播放了
Map<num, bool> isPlayed = {
10: false,
20: false,
30: false,
50: false,
66: false,
88: false,
100: false,
200: false,
300: false,
400: false,
500: false,
666: false,
777: false,
888: false,
1000: false,
1500: false,
2000: false,
3000: false,
5000: false,
10000: false,
15000: false,
20000: false,
25000: false,
30000: false,
35000: false,
40000: false,
45000: false,
50000: false,
55000: false,
60000: false,
65000: false,
70000: false,
75000: false,
80000: false,
85000: false,
90000: false,
95000: false,
100000: false,
};
///幸运礼物获得的金币总额
num luckGiftObtainCoins = 0;
///单次中奖的金币
num awardAmount = 0;
///赠送的数量
num number = 0;
bool isManyPeople = false;
MicRes? toUser;
SocialChatGiftRes? gift;
double giftAnimSize = 1;
double obtainCoinsAnimSize = 1;
double awardAmountAnimSize = 1;
void toggleGiftAnimationVisibility(bool isHide) {
hideLGiftAnimal = isHide;
notifyListeners();
}
void clearAllGiftData() {
gift = null;
luckGiftObtainCoins = 0;
number = 0;
isManyPeople = false;
toUser = null;
isPlayed = {
10: false,
20: false,
30: false,
50: false,
66: false,
88: false,
100: false,
200: false,
300: false,
400: false,
500: false,
666: false,
777: false,
888: false,
1000: false,
1500: false,
2000: false,
3000: false,
5000: false,
10000: false,
15000: false,
20000: false,
25000: false,
30000: false,
35000: false,
40000: false,
45000: false,
50000: false,
60000: false,
65000: false,
70000: false,
75000: false,
80000: false,
85000: false,
90000: false,
95000: false,
100000: false,
};
notifyListeners();
}
void modifyLuckyGiftCount(
num n,
bool isManyPeople,
MicRes first,
SocialChatGiftRes? checkedGift,
) {
this.number = number + n;
this.isManyPeople = isManyPeople;
this.toUser = first;
this.gift = checkedGift;
giftAnimSize = 1.4;
notifyListeners();
startGiftAnimation();
}
void updateLuckyRewardAmount(num n) {
this.awardAmount = n;
this.luckGiftObtainCoins = luckGiftObtainCoins + n;
this.obtainCoinsAnimSize = 1.4;
this.awardAmountAnimSize = 1.4;
notifyListeners();
}
void startGiftAnimation() {
isPlayed.forEach((k, v) {
if (k < number + 1 && !v) {
playVisualEffect(k);
}
});
}
void playVisualEffect(num n) {
if (!(isPlayed[n] ?? false)) {
if (SCGlobalConfig.isLuckGiftSpecialEffects) {
if (n > 9999) {
SCGiftVapSvgaManager().play(
"sc_images/room/anim/luck_gift_count_5000_mor.mp4",
priority: 200,
);
} else {
SCGiftVapSvgaManager().play(
"sc_images/room/anim/luck_gift_count_$n.mp4",
priority: 200,
);
}
}
}
isPlayed[n] = true;
}
}