Skip to content

Commit 98f40c6

Browse files
committed
* Added disable refresh indicator param
* Fixed triggering fetchData multiple times by custom implementation. Removed VisibilityDetector as dependency. * Updated version
1 parent 74cab2b commit 98f40c6

7 files changed

Lines changed: 31 additions & 31 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
* Added access/update to list elements by using [] syntax on PaginatedItemsResponse directly.
44
* Added custom refresh icon builder parameter
55
* Added mockItemKey param for getting mock item with this key, if T is not used.
6+
* Added disable refresh indicator param
67
* Fixed scroll controller assignment
8+
* Fixed triggering fetchData multiple times by custom implementation. Removed VisibilityDetector as dependency.
79
* Fixed a bug where fetchData was called twice if PaginationItemsStateHandler was used as parent
810
* Updated example app
911
* Updated README.md

example/pubspec.lock

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ packages:
5656
name: easy_container
5757
url: "https://pub.dartlang.org"
5858
source: hosted
59-
version: "1.0.0"
59+
version: "1.0.3"
6060
fake_async:
6161
dependency: transitive
6262
description:
@@ -212,13 +212,6 @@ packages:
212212
url: "https://pub.dartlang.org"
213213
source: hosted
214214
version: "2.1.1"
215-
visibility_detector:
216-
dependency: transitive
217-
description:
218-
name: visibility_detector
219-
url: "https://pub.dartlang.org"
220-
source: hosted
221-
version: "0.2.2"
222215
sdks:
223216
dart: ">=2.15.1 <3.0.0"
224217
flutter: ">=1.17.0"

example/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ dependencies:
1414

1515
dio: ^4.0.4
1616
provider: ^6.0.2
17-
easy_container: ^1.0.0
17+
easy_container: ^1.0.3
1818
paginated_items_builder:
1919
path: "../"
2020

lib/paginated_items_builder.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
library paginated_items_builder;
22

3-
export 'package:shimmer/shimmer.dart' show ShimmerDirection;
3+
export 'package:shimmer/shimmer.dart';
44

55
export 'src/models/paginated_items_builder_config.dart';
66
export 'src/models/paginated_items_response.dart';

lib/src/paginated_items_builder.dart

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import 'package:paginated_items_builder/src/models/paginated_items_builder_confi
55
import 'package:paginated_items_builder/src/models/paginated_items_response.dart';
66
import 'package:paginated_items_builder/src/pagination_items_state_handler.dart';
77
import 'package:shimmer/shimmer.dart';
8-
import 'package:visibility_detector/visibility_detector.dart';
98

109
/// enum used to check how the list items are to be rendered on the screen.
1110
/// Whether in a list view or a grid view.
@@ -27,6 +26,7 @@ class PaginatedItemsBuilder<T> extends StatefulWidget {
2726
required this.itemBuilder,
2827
this.itemsDisplayType = ItemsDisplayType.list,
2928
this.shrinkWrap = false,
29+
this.disableRefreshIndicator = false,
3030
this.paginate = true,
3131
this.showRefreshIcon = true,
3232
this.neverScrollablePhysicsOnShrinkWrap = true,
@@ -84,6 +84,11 @@ class PaginatedItemsBuilder<T> extends StatefulWidget {
8484
/// Defaults to false
8585
final bool shrinkWrap;
8686

87+
/// True if you don't want the in-built refresh indicator for your items.
88+
///
89+
/// Defaults to false.
90+
final bool disableRefreshIndicator;
91+
8792
/// The amount of space by which to inset the children.
8893
final EdgeInsets? padding;
8994

@@ -155,7 +160,7 @@ class _PaginatedItemsBuilderState<T> extends State<PaginatedItemsBuilder<T>> {
155160
bool _initialLoading = true;
156161
bool _loadingMoreData = false;
157162

158-
final _loaderKey = UniqueKey();
163+
int? _lastLoaderBuiltIndex;
159164

160165
late bool showLoader;
161166
late ScrollPhysics? scrollPhysics;
@@ -191,15 +196,18 @@ class _PaginatedItemsBuilderState<T> extends State<PaginatedItemsBuilder<T>> {
191196

192197
Widget _itemBuilder(context, index) {
193198
if (widget.response?.items != null) {
194-
if (widget.response!.items!.length <= index) return _loaderBuilder();
199+
// bottom loader
200+
// passing index only for bottom loader, to update [_lastLoaderBuiltIndex]
201+
if (widget.response!.items!.length <= index) return _loaderBuilder(index);
195202
final item = widget.response!.items![index];
196203
return widget.itemBuilder(context, index, item);
197204
} else {
205+
// initial loader
198206
return _loaderBuilder();
199207
}
200208
}
201209

202-
Widget _loaderBuilder() {
210+
Widget _loaderBuilder([int? index]) {
203211
final shimmerConfig = PaginatedItemsBuilder.config!.shimmerConfig;
204212

205213
Widget _buildLoader() => mockItem != null
@@ -214,13 +222,16 @@ class _PaginatedItemsBuilderState<T> extends State<PaginatedItemsBuilder<T>> {
214222
)
215223
: widget.loader;
216224

217-
return widget.paginate
218-
? VisibilityDetector(
219-
key: _loaderKey,
220-
onVisibilityChanged: (_) => _fetchData(),
221-
child: _buildLoader(),
222-
)
223-
: _buildLoader();
225+
if (widget.paginate && index != null) {
226+
if (_lastLoaderBuiltIndex != index) {
227+
WidgetsBinding.instance?.addPostFrameCallback(
228+
(_) => _fetchData(),
229+
);
230+
_lastLoaderBuiltIndex = index;
231+
}
232+
}
233+
234+
return _buildLoader();
224235
}
225236

226237
Widget _emptyWidget([String? text]) {
@@ -297,7 +308,9 @@ class _PaginatedItemsBuilderState<T> extends State<PaginatedItemsBuilder<T>> {
297308
return _emptyWidget(widget.emptyText);
298309
} else if (widget.response?.items == null && mockItem == null) {
299310
return _loaderBuilder();
300-
} else if (widget.shrinkWrap || widget.scrollDirection == Axis.horizontal) {
311+
} else if (widget.disableRefreshIndicator ||
312+
widget.shrinkWrap ||
313+
widget.scrollDirection == Axis.horizontal) {
301314
return _buildItems();
302315
} else {
303316
return RefreshIndicator(

pubspec.lock

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,6 @@ packages:
7474
url: "https://pub.dartlang.org"
7575
source: hosted
7676
version: "2.1.1"
77-
visibility_detector:
78-
dependency: "direct main"
79-
description:
80-
name: visibility_detector
81-
url: "https://pub.dartlang.org"
82-
source: hosted
83-
version: "0.2.2"
8477
sdks:
8578
dart: ">=2.14.0 <3.0.0"
8679
flutter: ">=1.17.0"

pubspec.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: paginated_items_builder
22
description: Easier to display items in a list/grid view from your controllers directly or handling state internally with support for pagination.
3-
version: 1.0.4
3+
version: 1.0.5
44
homepage: https://github.com/rithik-dev/paginated_items_builder
55

66
environment:
@@ -11,7 +11,6 @@ dependencies:
1111
flutter:
1212
sdk: flutter
1313

14-
visibility_detector: ^0.2.2
1514
shimmer: ^2.0.0
1615

1716
dev_dependencies:

0 commit comments

Comments
 (0)