From 5f76a5263571c3980b5cdc305ed4e6d61a54bbde Mon Sep 17 00:00:00 2001 From: juan-rybczinski Date: Thu, 15 Feb 2024 23:37:51 +0900 Subject: [PATCH] =?UTF-8?q?Feat:[=EA=B3=B5=ED=86=B5]=20PNDInfinitePagedLis?= =?UTF-8?q?t=20=EC=9C=84=EC=A0=AF=20=EA=B8=B0=EB=8A=A5=20=EB=B3=B4?= =?UTF-8?q?=EC=99=84=20#86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../breeds_paging_controller_provider.dart | 2 +- .../breeds_paging_controller_provider.g.dart | 6 ++-- .../pet/steps/register_pet_detail_view.dart | 10 ++---- .../pages/sos/layouts/sos_post_list_view.dart | 24 +++----------- lib/presentation/pages/sos/sos_post_view.dart | 4 +-- .../pagination/infinite_paged_list.dart | 31 ++++++++++++++----- 6 files changed, 36 insertions(+), 41 deletions(-) diff --git a/lib/presentation/pages/pet/providers/breeds_paging_controller_provider.dart b/lib/presentation/pages/pet/providers/breeds_paging_controller_provider.dart index 63f0c4a..1790b40 100644 --- a/lib/presentation/pages/pet/providers/breeds_paging_controller_provider.dart +++ b/lib/presentation/pages/pet/providers/breeds_paging_controller_provider.dart @@ -12,7 +12,7 @@ const pagingSize = 20; @riverpod class BreedsPagingController extends _$BreedsPagingController { @override - Raw build() { + Raw> build() { final controller = PagingController(firstPageKey: 1); controller.addPageRequestListener((pageKey) => fetchPage(pageKey)); diff --git a/lib/presentation/pages/pet/providers/breeds_paging_controller_provider.g.dart b/lib/presentation/pages/pet/providers/breeds_paging_controller_provider.g.dart index a265200..3c98cc3 100644 --- a/lib/presentation/pages/pet/providers/breeds_paging_controller_provider.g.dart +++ b/lib/presentation/pages/pet/providers/breeds_paging_controller_provider.g.dart @@ -7,12 +7,12 @@ part of 'breeds_paging_controller_provider.dart'; // ************************************************************************** String _$breedsPagingControllerHash() => - r'e3aed41da943c0dd2e40af94cc2ac47627812e9b'; + r'4706be72771ba7f6bbb72422b3dd6a4bf7361148'; /// See also [BreedsPagingController]. @ProviderFor(BreedsPagingController) final breedsPagingControllerProvider = AutoDisposeNotifierProvider< - BreedsPagingController, PagingController>.internal( + BreedsPagingController, PagingController>.internal( BreedsPagingController.new, name: r'breedsPagingControllerProvider', debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') @@ -23,6 +23,6 @@ final breedsPagingControllerProvider = AutoDisposeNotifierProvider< ); typedef _$BreedsPagingController - = AutoDisposeNotifier>; + = AutoDisposeNotifier>; // ignore_for_file: type=lint // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/presentation/pages/pet/steps/register_pet_detail_view.dart b/lib/presentation/pages/pet/steps/register_pet_detail_view.dart index d614299..df27974 100644 --- a/lib/presentation/pages/pet/steps/register_pet_detail_view.dart +++ b/lib/presentation/pages/pet/steps/register_pet_detail_view.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart'; import 'package:pets_next_door_flutter/features/pet/domain/breed.dart'; import 'package:pets_next_door_flutter/presentation/pages/pet/providers/breeds_paging_controller_provider.dart'; import 'package:pets_next_door_flutter/presentation/widgets/pagination/infinite_paged_list.dart'; @@ -10,13 +9,10 @@ class RegisterPetDetailView extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - final pagingController = ref.watch(breedsPagingControllerProvider); - return PNDInfinitePagedList( - pagingController: pagingController, - builderDelegate: PagedChildBuilderDelegate( - itemBuilder: (context, breed, index) => Text(breed.name), - ), + return PNDInfinitePagedList( + pagingController: ref.watch(breedsPagingControllerProvider), + itemBuilder: (context, breed, index) => Text(breed.name), ); } } diff --git a/lib/presentation/pages/sos/layouts/sos_post_list_view.dart b/lib/presentation/pages/sos/layouts/sos_post_list_view.dart index 00fb5c4..b1dc96f 100644 --- a/lib/presentation/pages/sos/layouts/sos_post_list_view.dart +++ b/lib/presentation/pages/sos/layouts/sos_post_list_view.dart @@ -23,31 +23,17 @@ class _SosPostListView extends HookConsumerWidget with SosPostViewEvent { return () => _scrollController.removeListener(_callBack); }, [_scrollController]); - return RefreshIndicator( - color: AppColor.of.primaryGreen, - displacement: 0, - onRefresh: () => onListRefresh(ref), - child: PagedListView.separated( - pagingController: ref.watch(sosPagingControllerProvider), - scrollController: _scrollController, - physics: AlwaysScrollableScrollPhysics(), - builderDelegate: PagedChildBuilderDelegate( - itemBuilder: (context, sosPost, index) => PndPostListTile.sosPage( + return PNDInfinitePagedList( + pagingController: ref.watch(sosPagingControllerProvider), + scrollController: _scrollController, + itemBuilder: (context, sosPost, index) => + PndPostListTile.sosPage( imageUrl: sosPost.thumbnailUrl, title: sosPost.title, dateInfo: '${sosPost.careStartAt.formatyyMMdd} ~ ${sosPost.careEndAt.formatyyMMdd}', location: '용답동', pay: '${sosPost.rewardPer} ${sosPost.reward}'), - firstPageProgressIndicatorBuilder: (context) => PndLoadingIndicator(), - newPageProgressIndicatorBuilder: (context) => PndLoadingIndicator(), - ), - separatorBuilder: (context, index) => Divider( - height: 1, - thickness: 1, - color: AppColor.of.gray20, - ), - ), ); } } diff --git a/lib/presentation/pages/sos/sos_post_view.dart b/lib/presentation/pages/sos/sos_post_view.dart index 4ea05e6..1bc6069 100644 --- a/lib/presentation/pages/sos/sos_post_view.dart +++ b/lib/presentation/pages/sos/sos_post_view.dart @@ -2,8 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart'; -import 'package:pets_next_door_flutter/core/constants/colors.dart'; import 'package:pets_next_door_flutter/core/enums/pet_type_filter.enum.dart'; import 'package:pets_next_door_flutter/core/enums/sort_type_filter.enum.dart'; import 'package:pets_next_door_flutter/core/helper/date_time_extension.dart'; @@ -14,8 +12,8 @@ import 'package:pets_next_door_flutter/presentation/pages/sos/sos_post_event.dar import 'package:pets_next_door_flutter/presentation/widgets/button/radio_button.dart'; import 'package:pets_next_door_flutter/presentation/widgets/dropdown/dropdown_button.dart'; import 'package:pets_next_door_flutter/presentation/widgets/dropdown/dropdown_item.dart'; -import 'package:pets_next_door_flutter/presentation/widgets/indicator/loading_indicator.dart'; import 'package:pets_next_door_flutter/presentation/widgets/list_tile/post_list_tile.dart'; +import 'package:pets_next_door_flutter/presentation/widgets/pagination/infinite_paged_list.dart'; part 'layouts/pet_filter.dart'; part 'layouts/sort_filter.dart'; diff --git a/lib/presentation/widgets/pagination/infinite_paged_list.dart b/lib/presentation/widgets/pagination/infinite_paged_list.dart index b19d099..92c1bec 100644 --- a/lib/presentation/widgets/pagination/infinite_paged_list.dart +++ b/lib/presentation/widgets/pagination/infinite_paged_list.dart @@ -1,26 +1,41 @@ import 'package:flutter/material.dart'; import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart'; -import 'package:pets_next_door_flutter/core/constants/sizes.dart'; +import 'package:pets_next_door_flutter/core/constants/colors.dart'; +import 'package:pets_next_door_flutter/presentation/widgets/indicator/loading_indicator.dart'; -class PNDInfinitePagedList extends StatelessWidget { +class PNDInfinitePagedList extends StatelessWidget { PNDInfinitePagedList({ super.key, required this.pagingController, - required this.builderDelegate, + this.scrollController, + required this.itemBuilder, this.separatorBuilder, }); - final PagingController pagingController; - final PagedChildBuilderDelegate builderDelegate; + final PagingController pagingController; + final ScrollController? scrollController; + final ItemWidgetBuilder itemBuilder; final IndexedWidgetBuilder? separatorBuilder; @override Widget build(BuildContext context) { return RefreshIndicator( - child: PagedListView.separated( + color: AppColor.of.primaryGreen, + displacement: 0.0, + child: PagedListView.separated( pagingController: pagingController, - builderDelegate: builderDelegate, - separatorBuilder: separatorBuilder ?? (context, index) => gapH16, + scrollController: scrollController, + builderDelegate: PagedChildBuilderDelegate( + itemBuilder: itemBuilder, + firstPageProgressIndicatorBuilder: (context) => PndLoadingIndicator(), + newPageProgressIndicatorBuilder: (context) => PndLoadingIndicator(), + ), + separatorBuilder: separatorBuilder ?? + (context, index) => Divider( + height: 1, + thickness: 1, + color: AppColor.of.gray20, + ), ), onRefresh: () => Future.sync( () => pagingController.refresh(),