Files
MaliangAINovalWriter/AINoval/lib/blocs/credit/credit_bloc.dart
2025-09-10 00:07:52 +08:00

65 lines
2.0 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:equatable/equatable.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../../models/user_credit.dart';
import '../../services/api_service/repositories/credit_repository.dart';
import '../../utils/logger.dart';
part 'credit_event.dart';
part 'credit_state.dart';
/// 用户积分BLoC
/// 负责管理用户积分状态和数据获取
class CreditBloc extends Bloc<CreditEvent, CreditState> {
final CreditRepository _repository;
static const String _tag = 'CreditBloc';
CreditBloc({required CreditRepository repository})
: _repository = repository,
super(const CreditInitial()) {
on<LoadUserCredits>(_onLoadUserCredits);
on<RefreshUserCredits>(_onRefreshUserCredits);
on<ClearCredits>(_onClearCredits);
}
/// 处理加载用户积分事件
Future<void> _onLoadUserCredits(
LoadUserCredits event,
Emitter<CreditState> emit,
) async {
emit(const CreditLoading());
await _loadCredits(emit);
}
/// 处理刷新用户积分事件
Future<void> _onRefreshUserCredits(
RefreshUserCredits event,
Emitter<CreditState> emit,
) async {
// 刷新不显示loading状态保持当前显示
await _loadCredits(emit);
}
/// 处理清空用户积分事件
Future<void> _onClearCredits(
ClearCredits event,
Emitter<CreditState> emit,
) async {
AppLogger.i(_tag, '清空用户积分状态,重置为初始状态');
emit(const CreditInitial());
}
/// 加载积分的公共方法
Future<void> _loadCredits(Emitter<CreditState> emit) async {
try {
AppLogger.i(_tag, '开始加载用户积分');
final userCredit = await _repository.getUserCredits();
AppLogger.i(_tag, '用户积分加载成功: ${userCredit.credits}');
emit(CreditLoaded(userCredit: userCredit));
} catch (e, stackTrace) {
AppLogger.e(_tag, '加载用户积分失败', e, stackTrace);
emit(CreditError(message: '加载用户积分失败: ${e.toString()}'));
}
}
}