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) @JsonSerializable(createToJson: false)
class PlayersDto { class PlayersDto {
final List<PlayerDataDto>? items; final List<PlayerDataDto>? items;
final PaginationDto? pagination;
const PlayersDto({ const PlayersDto({
this.items, this.items,
this.pagination,
}); });
factory PlayersDto.fromJson(Map<String, dynamic> json) => _$PlayersDtoFromJson(json); factory PlayersDto.fromJson(Map<String, dynamic> json) => _$PlayersDtoFromJson(json);
@ -62,13 +60,4 @@ class PlayerPositionDataDto {
const PlayerPositionDataDto(this.label); const PlayerPositionDataDto(this.label);
factory PlayerPositionDataDto.fromJson(Map<String, dynamic> json) => _$PlayerPositionDataDtoFromJson(json); 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>?) items: (json['items'] as List<dynamic>?)
?.map((e) => PlayerDataDto.fromJson(e as Map<String, dynamic>)) ?.map((e) => PlayerDataDto.fromJson(e as Map<String, dynamic>))
.toList(), .toList(),
pagination: json['pagination'] == null
? null
: PaginationDto.fromJson(json['pagination'] as Map<String, dynamic>),
); );
PlayerDataDto _$PlayerDataDtoFromJson(Map<String, dynamic> json) => PlayerDataDto _$PlayerDataDtoFromJson(Map<String, dynamic> json) =>
@ -57,8 +54,3 @@ PlayerPositionDataDto _$PlayerPositionDataDtoFromJson(
PlayerPositionDataDto( PlayerPositionDataDto(
json['label'] as String?, 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 { extension PlayersDtoToModel on PlayersDto {
HomeData toDomain() => HomeData( HomeData toDomain() => HomeData(
data: items?.map((e) => e.toDomain()).toList(), data: items?.map((e) => e.toDomain()).toList(),
nextPage: pagination?.offset! + 1,
); );
} }

View File

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

View File

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