import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../core/network/api_client.dart'; import '../models/discovery_asset_model.dart'; class DiscoveryState extends Equatable { final List assets; final bool isLoading; const DiscoveryState({ this.assets = const [], this.isLoading = false, }); DiscoveryState copyWith({ List? assets, bool? isLoading, }) { return DiscoveryState( assets: assets ?? this.assets, isLoading: isLoading ?? this.isLoading, ); } @override List get props => [assets, isLoading]; } class DiscoveryCubit extends Cubit { final ApiClient apiClient; DiscoveryCubit({required this.apiClient}) : super(const DiscoveryState()); Future loadDiscovery({int limit = 15}) async { if (state.isLoading) return; emit(state.copyWith(isLoading: true)); try { final res = await apiClient.get('/api/v1/assets/discovery?limit=$limit'); if (res.statusCode == 200 && res.data is List) { final list = (res.data as List) .map((e) => DiscoveryAssetModel.fromJson(Map.from(e))) .toList(); emit(DiscoveryState(assets: list, isLoading: false)); } else { emit(state.copyWith(isLoading: false)); } } catch (_) { emit(state.copyWith(isLoading: false)); } } }