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

62 lines
2.1 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/public_model_config.dart';
import '../../services/api_service/repositories/public_model_repository.dart';
import '../../utils/logger.dart';
part 'public_models_event.dart';
part 'public_models_state.dart';
/// 公共模型BLoC
/// 负责管理公共模型池的状态和数据获取
class PublicModelsBloc extends Bloc<PublicModelsEvent, PublicModelsState> {
final PublicModelRepository _repository;
static const String _tag = 'PublicModelsBloc';
PublicModelsBloc({required PublicModelRepository repository})
: _repository = repository,
super(const PublicModelsInitial()) {
on<LoadPublicModels>(_onLoadPublicModels);
on<RefreshPublicModels>(_onRefreshPublicModels);
}
/// 处理加载公共模型列表事件
Future<void> _onLoadPublicModels(
LoadPublicModels event,
Emitter<PublicModelsState> emit,
) async {
emit(const PublicModelsLoading());
await _loadModels(emit);
}
/// 处理刷新公共模型列表事件
Future<void> _onRefreshPublicModels(
RefreshPublicModels event,
Emitter<PublicModelsState> emit,
) async {
// 刷新不显示loading状态保持当前显示
await _loadModels(emit);
}
/// 加载模型列表的公共方法
Future<void> _loadModels(Emitter<PublicModelsState> emit) async {
try {
AppLogger.i(_tag, '开始加载公共模型列表');
final models = await _repository.getPublicModels();
// 按优先级排序,优先级高的在前
models.sort((a, b) {
final aPriority = a.priority ?? 0;
final bPriority = b.priority ?? 0;
return bPriority.compareTo(aPriority);
});
AppLogger.i(_tag, '公共模型列表加载成功: 共${models.length}个模型');
emit(PublicModelsLoaded(models: models));
} catch (e, stackTrace) {
AppLogger.e(_tag, '加载公共模型列表失败', e, stackTrace);
emit(PublicModelsError(message: '加载公共模型列表失败: ${e.toString()}'));
}
}
}