From 7a87f3b719f87391ced9bccc3b266bda5b46053d Mon Sep 17 00:00:00 2001 From: dyakonovr Date: Sat, 21 Dec 2024 17:53:30 +0400 Subject: [PATCH] another fix --- lib/data/mappers/characters_mapper.dart | 2 +- lib/data/repositories/mock_repository.dart | 2 +- lib/domain/models/home_data.dart | 4 +- .../pages/home_page/bloc/bloc.dart | 1 + .../pages/home_page/home_page.dart | 48 +++++++++++++------ 5 files changed, 39 insertions(+), 18 deletions(-) diff --git a/lib/data/mappers/characters_mapper.dart b/lib/data/mappers/characters_mapper.dart index 5a66316..a5a73e3 100644 --- a/lib/data/mappers/characters_mapper.dart +++ b/lib/data/mappers/characters_mapper.dart @@ -15,7 +15,7 @@ extension FCharactersDataDtoToModel on FCharactersDataDto { HomeData toDomain() { int nextPage = 1; if (page != null && pages != null) { - nextPage = page! >= pages! ? page! : page! + 1; + nextPage = page! >= pages! ? -1 : page! + 1; } return HomeData( diff --git a/lib/data/repositories/mock_repository.dart b/lib/data/repositories/mock_repository.dart index 49a1713..c94dc53 100644 --- a/lib/data/repositories/mock_repository.dart +++ b/lib/data/repositories/mock_repository.dart @@ -18,6 +18,6 @@ class MockRepository extends ApiInterface { species: "Species 1", image: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTtAT11wKgHrJBUYzIBFogucXg0a9fE0fQXDQ&s") - ]); + ], nextPage: -1); } } diff --git a/lib/domain/models/home_data.dart b/lib/domain/models/home_data.dart index 46d680b..2e7932e 100644 --- a/lib/domain/models/home_data.dart +++ b/lib/domain/models/home_data.dart @@ -2,7 +2,7 @@ import 'package:lab/domain/models/card_data.dart'; class HomeData { final List? data; - final int? nextPage; + final int nextPage; - HomeData({this.data, this.nextPage}); + HomeData({required this.nextPage, this.data}); } diff --git a/lib/presentation/pages/home_page/bloc/bloc.dart b/lib/presentation/pages/home_page/bloc/bloc.dart index 1596405..fffbe58 100644 --- a/lib/presentation/pages/home_page/bloc/bloc.dart +++ b/lib/presentation/pages/home_page/bloc/bloc.dart @@ -12,6 +12,7 @@ class HomeBloc extends Bloc { Future _onLoadData( HomeLoadDataEvent event, Emitter emit) async { + if (event.nextPage == -1) return; if (event.nextPage == null) { emit(state.copyWith(isLoading: true)); } else { diff --git a/lib/presentation/pages/home_page/home_page.dart b/lib/presentation/pages/home_page/home_page.dart index dd0cae2..42b370f 100644 --- a/lib/presentation/pages/home_page/home_page.dart +++ b/lib/presentation/pages/home_page/home_page.dart @@ -53,22 +53,28 @@ class _MyHomePageState extends State { } void _onNextPageListener() { - if (_scrollController.offset >= _scrollController.position.maxScrollExtent) { + if (_scrollController.offset >= + _scrollController.position.maxScrollExtent) { final bloc = context.read(); if (!bloc.state.isPaginationLoading) { - bloc.add( - HomeLoadDataEvent(search: _searchController.text, nextPage: bloc.state.data?.nextPage)); + bloc.add(HomeLoadDataEvent( + search: _searchController.text, + nextPage: bloc.state.data?.nextPage)); } } } Future _onRefresh() { - context.read().add(HomeLoadDataEvent(search: _searchController.text)); + context + .read() + .add(HomeLoadDataEvent(search: _searchController.text)); return Future.value(null); } void _onSearchInputChange(search) { - Debounce.run(action: () => context.read().add(HomeLoadDataEvent(search: search))); + Debounce.run( + action: () => + context.read().add(HomeLoadDataEvent(search: search))); } void _onLike(String? id, String text, bool isLiked) { @@ -78,7 +84,8 @@ class _MyHomePageState extends State { } } - void _showSnackBar(BuildContext context, String? id, String text, bool isLiked) { + void _showSnackBar( + BuildContext context, String? id, String text, bool isLiked) { WidgetsBinding.instance.addPostFrameCallback((_) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text(text), @@ -109,7 +116,8 @@ class _MyHomePageState extends State { body: Column( children: [ Padding( - padding: const EdgeInsets.only(right: 30, left: 30, top: 20, bottom: 20), + padding: + const EdgeInsets.only(right: 30, left: 30, top: 20, bottom: 20), child: Row( children: [ Expanded( @@ -142,7 +150,10 @@ class _MyHomePageState extends State { builder: (context, state) => state.error != null ? Text( state.error ?? "", - style: Theme.of(context).textTheme.headlineSmall?.copyWith(color: Colors.red), + style: Theme.of(context) + .textTheme + .headlineSmall + ?.copyWith(color: Colors.red), ) : state.isLoading ? const Padding( @@ -156,8 +167,10 @@ class _MyHomePageState extends State { onRefresh: _onRefresh, child: ListView.separated( controller: _scrollController, - padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 30), - separatorBuilder: (context, index) => const SizedBox(height: 20), + padding: const EdgeInsets.symmetric( + vertical: 20, horizontal: 30), + separatorBuilder: (context, index) => + const SizedBox(height: 20), itemCount: state.data?.data?.length ?? 0, itemBuilder: (context, index) { final data = state.data?.data?[index]; @@ -166,10 +179,14 @@ class _MyHomePageState extends State { ? const SizedBox.shrink() : Card.fromData( data, - isLiked: likeState.likedIds?.contains(data.id) == true, - onLike: (String? id, String text, bool isLiked) => + isLiked: likeState.likedIds + ?.contains(data.id) == + true, + onLike: (String? id, String text, + bool isLiked) => _onLike(id, text, isLiked), - onTap: () => _navigateToDetailsPage(context, data), + onTap: () => _navigateToDetailsPage( + context, data), ); }, ), @@ -180,7 +197,10 @@ class _MyHomePageState extends State { ), BlocBuilder( builder: (context, state) => state.isPaginationLoading - ? const CircularProgressIndicator() + ? const Padding( + padding: EdgeInsets.symmetric(vertical: 10), + child: CircularProgressIndicator(), + ) : const SizedBox.shrink(), ), ],