马良AI写作初始化仓库
This commit is contained in:
99
AINoval/lib/blocs/subscription/subscription_bloc.dart
Normal file
99
AINoval/lib/blocs/subscription/subscription_bloc.dart
Normal file
@@ -0,0 +1,99 @@
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
|
||||
import '../../services/api_service/repositories/impl/subscription_repository_impl.dart';
|
||||
import '../../models/admin/subscription_models.dart';
|
||||
|
||||
part 'subscription_event.dart';
|
||||
part 'subscription_state.dart';
|
||||
|
||||
class SubscriptionBloc extends Bloc<SubscriptionEvent, SubscriptionState> {
|
||||
final SubscriptionRepositoryImpl subscriptionRepository;
|
||||
|
||||
SubscriptionBloc(this.subscriptionRepository) : super(SubscriptionInitial()) {
|
||||
on<LoadSubscriptionPlans>(_onLoadSubscriptionPlans);
|
||||
on<LoadSubscriptionStatistics>(_onLoadSubscriptionStatistics);
|
||||
on<CreateSubscriptionPlan>(_onCreateSubscriptionPlan);
|
||||
on<UpdateSubscriptionPlan>(_onUpdateSubscriptionPlan);
|
||||
on<DeleteSubscriptionPlan>(_onDeleteSubscriptionPlan);
|
||||
on<ToggleSubscriptionPlanStatus>(_onToggleSubscriptionPlanStatus);
|
||||
}
|
||||
|
||||
Future<void> _onLoadSubscriptionPlans(
|
||||
LoadSubscriptionPlans event,
|
||||
Emitter<SubscriptionState> emit,
|
||||
) async {
|
||||
emit(SubscriptionLoading());
|
||||
try {
|
||||
final plans = await subscriptionRepository.getAllPlans();
|
||||
emit(SubscriptionPlansLoaded(plans));
|
||||
} catch (e) {
|
||||
emit(SubscriptionError(e.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _onLoadSubscriptionStatistics(
|
||||
LoadSubscriptionStatistics event,
|
||||
Emitter<SubscriptionState> emit,
|
||||
) async {
|
||||
emit(SubscriptionLoading());
|
||||
try {
|
||||
final statistics = await subscriptionRepository.getSubscriptionStatistics();
|
||||
emit(SubscriptionStatisticsLoaded(statistics));
|
||||
} catch (e) {
|
||||
emit(SubscriptionError(e.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _onCreateSubscriptionPlan(
|
||||
CreateSubscriptionPlan event,
|
||||
Emitter<SubscriptionState> emit,
|
||||
) async {
|
||||
try {
|
||||
await subscriptionRepository.createPlan(event.plan);
|
||||
// 重新加载订阅计划列表
|
||||
add(LoadSubscriptionPlans());
|
||||
} catch (e) {
|
||||
emit(SubscriptionError(e.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _onUpdateSubscriptionPlan(
|
||||
UpdateSubscriptionPlan event,
|
||||
Emitter<SubscriptionState> emit,
|
||||
) async {
|
||||
try {
|
||||
await subscriptionRepository.updatePlan(event.planId, event.plan);
|
||||
// 重新加载订阅计划列表
|
||||
add(LoadSubscriptionPlans());
|
||||
} catch (e) {
|
||||
emit(SubscriptionError(e.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _onDeleteSubscriptionPlan(
|
||||
DeleteSubscriptionPlan event,
|
||||
Emitter<SubscriptionState> emit,
|
||||
) async {
|
||||
try {
|
||||
await subscriptionRepository.deletePlan(event.planId);
|
||||
// 重新加载订阅计划列表
|
||||
add(LoadSubscriptionPlans());
|
||||
} catch (e) {
|
||||
emit(SubscriptionError(e.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _onToggleSubscriptionPlanStatus(
|
||||
ToggleSubscriptionPlanStatus event,
|
||||
Emitter<SubscriptionState> emit,
|
||||
) async {
|
||||
try {
|
||||
await subscriptionRepository.togglePlanStatus(event.planId, event.active);
|
||||
// 重新加载订阅计划列表
|
||||
add(LoadSubscriptionPlans());
|
||||
} catch (e) {
|
||||
emit(SubscriptionError(e.toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
56
AINoval/lib/blocs/subscription/subscription_event.dart
Normal file
56
AINoval/lib/blocs/subscription/subscription_event.dart
Normal file
@@ -0,0 +1,56 @@
|
||||
part of 'subscription_bloc.dart';
|
||||
|
||||
abstract class SubscriptionEvent extends Equatable {
|
||||
const SubscriptionEvent();
|
||||
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class LoadSubscriptionPlans extends SubscriptionEvent {}
|
||||
|
||||
class LoadSubscriptionStatistics extends SubscriptionEvent {}
|
||||
|
||||
class CreateSubscriptionPlan extends SubscriptionEvent {
|
||||
final SubscriptionPlan plan;
|
||||
|
||||
const CreateSubscriptionPlan(this.plan);
|
||||
|
||||
@override
|
||||
List<Object> get props => [plan];
|
||||
}
|
||||
|
||||
class UpdateSubscriptionPlan extends SubscriptionEvent {
|
||||
final String planId;
|
||||
final SubscriptionPlan plan;
|
||||
|
||||
const UpdateSubscriptionPlan({
|
||||
required this.planId,
|
||||
required this.plan,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object> get props => [planId, plan];
|
||||
}
|
||||
|
||||
class DeleteSubscriptionPlan extends SubscriptionEvent {
|
||||
final String planId;
|
||||
|
||||
const DeleteSubscriptionPlan(this.planId);
|
||||
|
||||
@override
|
||||
List<Object> get props => [planId];
|
||||
}
|
||||
|
||||
class ToggleSubscriptionPlanStatus extends SubscriptionEvent {
|
||||
final String planId;
|
||||
final bool active;
|
||||
|
||||
const ToggleSubscriptionPlanStatus({
|
||||
required this.planId,
|
||||
required this.active,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object> get props => [planId, active];
|
||||
}
|
||||
39
AINoval/lib/blocs/subscription/subscription_state.dart
Normal file
39
AINoval/lib/blocs/subscription/subscription_state.dart
Normal file
@@ -0,0 +1,39 @@
|
||||
part of 'subscription_bloc.dart';
|
||||
|
||||
abstract class SubscriptionState extends Equatable {
|
||||
const SubscriptionState();
|
||||
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class SubscriptionInitial extends SubscriptionState {}
|
||||
|
||||
class SubscriptionLoading extends SubscriptionState {}
|
||||
|
||||
class SubscriptionError extends SubscriptionState {
|
||||
final String message;
|
||||
|
||||
const SubscriptionError(this.message);
|
||||
|
||||
@override
|
||||
List<Object> get props => [message];
|
||||
}
|
||||
|
||||
class SubscriptionPlansLoaded extends SubscriptionState {
|
||||
final List<SubscriptionPlan> plans;
|
||||
|
||||
const SubscriptionPlansLoaded(this.plans);
|
||||
|
||||
@override
|
||||
List<Object> get props => [plans];
|
||||
}
|
||||
|
||||
class SubscriptionStatisticsLoaded extends SubscriptionState {
|
||||
final SubscriptionStatistics statistics;
|
||||
|
||||
const SubscriptionStatisticsLoaded(this.statistics);
|
||||
|
||||
@override
|
||||
List<Object> get props => [statistics];
|
||||
}
|
||||
Reference in New Issue
Block a user