Files
Finlytic/FinlyticApp/lib/features/discovery/cubit/discovery_cubit.dart
T

54 lines
1.4 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';
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 ApiClient apiClient;
DiscoveryCubit({required this.apiClient}) : super(const DiscoveryState());
Future<void> 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<String, dynamic>.from(e)))
.toList();
emit(DiscoveryState(assets: list, isLoading: false));
} else {
emit(state.copyWith(isLoading: false));
}
} catch (_) {
emit(state.copyWith(isLoading: false));
}
}
}