laba_6 update

This commit is contained in:
Дмитрий Блохин 2024-12-11 00:41:04 +04:00
parent 149cef9b2b
commit 1efc0ab6f1
6 changed files with 15 additions and 29 deletions

View File

@ -5,11 +5,9 @@ part 'players_dto.g.dart';
@JsonSerializable(createToJson: false)
class PlayersDto {
final List<PlayerDataDto>? items;
final PaginationDto? pagination;
const PlayersDto({
this.items,
this.pagination,
});
factory PlayersDto.fromJson(Map<String, dynamic> json) => _$PlayersDtoFromJson(json);
@ -63,12 +61,3 @@ class PlayerPositionDataDto {
factory PlayerPositionDataDto.fromJson(Map<String, dynamic> json) => _$PlayerPositionDataDtoFromJson(json);
}
@JsonSerializable(createToJson: false)
class PaginationDto {
final int? offset;
const PaginationDto({this.offset});
factory PaginationDto.fromJson(Map<String, dynamic> json) => _$PaginationDtoFromJson(json);
}

View File

@ -10,9 +10,6 @@ PlayersDto _$PlayersDtoFromJson(Map<String, dynamic> json) => PlayersDto(
items: (json['items'] as List<dynamic>?)
?.map((e) => PlayerDataDto.fromJson(e as Map<String, dynamic>))
.toList(),
pagination: json['pagination'] == null
? null
: PaginationDto.fromJson(json['pagination'] as Map<String, dynamic>),
);
PlayerDataDto _$PlayerDataDtoFromJson(Map<String, dynamic> json) =>
@ -57,8 +54,3 @@ PlayerPositionDataDto _$PlayerPositionDataDtoFromJson(
PlayerPositionDataDto(
json['label'] as String?,
);
PaginationDto _$PaginationDtoFromJson(Map<String, dynamic> json) =>
PaginationDto(
offset: (json['offset'] as num?)?.toInt(),
);

View File

@ -13,6 +13,5 @@ extension PlayerDataDtoToModel on PlayerDataDto {
extension PlayersDtoToModel on PlayersDto {
HomeData toDomain() => HomeData(
data: items?.map((e) => e.toDomain()).toList(),
nextPage: pagination?.offset! + 1,
);
}

View File

@ -5,27 +5,32 @@ import 'package:untitled/presentation/home_page/bloc/state.dart';
class HomeBloc extends Bloc<HomeEvent, HomeState> {
final PlayerRepository repo;
int off = 0;
HomeBloc(this.repo) : super(const HomeState()) {
on<HomeLoadDataEvent>(_onLoadData);
}
void _onLoadData(HomeLoadDataEvent event, Emitter<HomeState> emit) async {
if (event.offset == null) {
if (event.obnova == null) {
emit(state.copyWith(isLoading: true));
} else {
emit(state.copyWith(isPaginationLoading: true));
}
if (event.obnova == 0) {
off = 0;
}
String? error;
final data = await repo.loadData(
q: event.search,
offset: event.offset ?? 0,
offset: off,
onError: (e) => error = e,
);
if (event.offset != null) {
if (event.obnova != 0) {
data?.data?.insertAll(0, state.data?.data ?? []);
}
@ -35,5 +40,6 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> {
data: data,
error: error,
));
off += 10;
}
}

View File

@ -4,7 +4,7 @@ abstract class HomeEvent {
class HomeLoadDataEvent extends HomeEvent {
final String? search;
final int? offset;
final int? obnova;
const HomeLoadDataEvent({this.search, this.offset});
const HomeLoadDataEvent({this.search, this.obnova});
}

View File

@ -74,12 +74,12 @@ class _WidgetBodyState extends State<WidgetBody> {
}
void _onNextPageListener() {
if(scrollController.offset > scrollController.position.maxScrollExtent) {
if(scrollController.offset >= scrollController.position.maxScrollExtent) {
final bloc = context.read<HomeBloc>();
if (!bloc.state.isPaginationLoading) {
bloc.add(HomeLoadDataEvent(
search: searchController.text,
offset: bloc.state.data?.nextPage,
obnova: 1,
));
}
}
@ -168,7 +168,7 @@ class _WidgetBodyState extends State<WidgetBody> {
Future<void> _onRefresh() {
context
.read<HomeBloc>()
.add(HomeLoadDataEvent(search: searchController.text));
.add(HomeLoadDataEvent(search: searchController.text, obnova: 0));
return Future.value(null);
}
}