57 lines
1.6 KiB
Dart
57 lines
1.6 KiB
Dart
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import 'package:maibu_satabot_v2/features/v2/home/domain/usecases/get_home_data_usecase.dart';
|
|
import 'package:maibu_satabot_v2/features/v2/home/presentation/bloc/home_v2_event.dart';
|
|
import 'package:maibu_satabot_v2/features/v2/home/presentation/bloc/home_v2_state.dart';
|
|
|
|
class HomeV2Bloc extends Bloc<HomeV2Event, HomeV2State> {
|
|
final GetHomeDataUseCase getHomeDataUseCase;
|
|
|
|
HomeV2Bloc(this.getHomeDataUseCase) : super(const HomeV2Initial()) {
|
|
on<HomeV2LoadData>(_onLoadData);
|
|
on<HomeV2Refresh>(_onRefresh);
|
|
on<HomeV2ToggleTrendType>(_onToggleTrendType);
|
|
}
|
|
|
|
Future<void> _onLoadData(
|
|
HomeV2LoadData event,
|
|
Emitter<HomeV2State> emit,
|
|
) async {
|
|
emit(const HomeV2Loading());
|
|
|
|
final result = await getHomeDataUseCase(const NoParams());
|
|
|
|
result.fold(
|
|
(failure) => emit(HomeV2Error(failure.message)),
|
|
(data) => emit(HomeV2Loaded(homeData: data)),
|
|
);
|
|
}
|
|
|
|
Future<void> _onRefresh(
|
|
HomeV2Refresh event,
|
|
Emitter<HomeV2State> emit,
|
|
) async {
|
|
if (state is HomeV2Loaded) {
|
|
final result = await getHomeDataUseCase(const NoParams());
|
|
|
|
result.fold(
|
|
(failure) => emit(HomeV2Error(failure.message)),
|
|
(data) => emit(HomeV2Loaded(
|
|
homeData: data,
|
|
trendType: (state as HomeV2Loaded).trendType,
|
|
)),
|
|
);
|
|
}
|
|
}
|
|
|
|
void _onToggleTrendType(
|
|
HomeV2ToggleTrendType event,
|
|
Emitter<HomeV2State> emit,
|
|
) {
|
|
if (state is HomeV2Loaded) {
|
|
final currentState = state as HomeV2Loaded;
|
|
emit(currentState.copyWith(trendType: event.type));
|
|
print('切换趋势类型:${event.type}');
|
|
}
|
|
}
|
|
}
|