52 lines
1.3 KiB
Dart
52 lines
1.3 KiB
Dart
import 'package:equatable/equatable.dart';
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import '../../../core/network/api_client.dart';
|
|
import '../models/discovery_asset_model.dart';
|
|
import '../repositories/discovery_repository.dart';
|
|
|
|
class DiscoveryState extends Equatable {
|
|
final List<DiscoveryAssetModel> assets;
|
|
final bool isLoading;
|
|
|
|
const DiscoveryState({
|
|
this.assets = const [],
|
|
this.isLoading = false,
|
|
});
|
|
|
|
DiscoveryState copyWith({
|
|
List<DiscoveryAssetModel>? assets,
|
|
bool? isLoading,
|
|
}) {
|
|
return DiscoveryState(
|
|
assets: assets ?? this.assets,
|
|
isLoading: isLoading ?? this.isLoading,
|
|
);
|
|
}
|
|
|
|
@override
|
|
List<Object?> get props => [assets, isLoading];
|
|
}
|
|
|
|
class DiscoveryCubit extends Cubit<DiscoveryState> {
|
|
final DiscoveryRepository repository;
|
|
|
|
DiscoveryCubit({
|
|
DiscoveryRepository? repository,
|
|
ApiClient? apiClient,
|
|
}) : repository = repository ?? DiscoveryRepository(apiClient: apiClient!),
|
|
super(const DiscoveryState());
|
|
|
|
Future<void> loadDiscovery({int limit = 15}) async {
|
|
if (state.isLoading) return;
|
|
emit(state.copyWith(isLoading: true));
|
|
|
|
try {
|
|
final list = await repository.getDiscoveryAssets(limit: limit);
|
|
emit(DiscoveryState(assets: list, isLoading: false));
|
|
} catch (_) {
|
|
emit(state.copyWith(isLoading: false));
|
|
}
|
|
}
|
|
}
|
|
|