diff --git a/lib/src/core/paging_state.dart b/lib/src/core/paging_state.dart index 7889005..721352b 100644 --- a/lib/src/core/paging_state.dart +++ b/lib/src/core/paging_state.dart @@ -42,15 +42,15 @@ abstract class PagingState copyWith({ - FutureOr>?>? pages = const Omit(), - FutureOr?>? keys = const Omit(), - FutureOr? error = const Omit(), - FutureOr? hasNextPage = const Omit(), - FutureOr? isLoading = const Omit(), + Defaulted>?>? pages = const Omit(), + Defaulted?>? keys = const Omit(), + Defaulted? error = const Omit(), + Defaulted? hasNextPage = const Omit(), + Defaulted? isLoading = const Omit(), }); /// Returns a copy this [PagingState] but @@ -70,6 +70,8 @@ extension ItemListExtension List? get items => pages?.expand((e) => e).toList(); } +typedef Defaulted = FutureOr; + /// Sentinel value to omit a parameter from a copyWith call. /// This is used to distinguish between a parameter being omitted and a parameter /// being set to null. diff --git a/lib/src/core/paging_state_base.dart b/lib/src/core/paging_state_base.dart index a2ce48a..ad16ec6 100644 --- a/lib/src/core/paging_state_base.dart +++ b/lib/src/core/paging_state_base.dart @@ -1,5 +1,3 @@ -import 'dart:async'; - import 'package:collection/collection.dart'; import 'package:flutter/foundation.dart'; import 'package:infinite_scroll_pagination/src/core/paging_state.dart'; @@ -10,34 +8,23 @@ import 'package:infinite_scroll_pagination/src/core/paging_state.dart'; /// all of its fields are deeply equal. base class PagingStateBase implements PagingState { - factory PagingStateBase({ + /// Creates a [PagingStateBase] with the given parameters. + /// + /// Ensures that [pages] and [keys] are unmodifiable lists. + PagingStateBase({ List>? pages, List? keys, - Object? error, - bool hasNextPage = true, - bool isLoading = false, - }) => - PagingStateBase._( - pages: switch (pages) { + this.error, + this.hasNextPage = true, + this.isLoading = false, + }) : pages = switch (pages) { null => null, _ => List.unmodifiable(pages), }, - keys: switch (keys) { + keys = switch (keys) { null => null, _ => List.unmodifiable(keys), - }, - error: error, - hasNextPage: hasNextPage, - isLoading: isLoading, - ); - - const PagingStateBase._({ - required this.pages, - required this.keys, - required this.error, - required this.hasNextPage, - required this.isLoading, - }); + }; @override final List>? pages; @@ -56,11 +43,11 @@ base class PagingStateBase @override PagingState copyWith({ - FutureOr>?>? pages = const Omit(), - FutureOr?>? keys = const Omit(), - FutureOr? error = const Omit(), - FutureOr? hasNextPage = const Omit(), - FutureOr? isLoading = const Omit(), + Defaulted>?>? pages = const Omit(), + Defaulted?>? keys = const Omit(), + Defaulted? error = const Omit(), + Defaulted? hasNextPage = const Omit(), + Defaulted? isLoading = const Omit(), }) => PagingStateBase( pages: pages is Omit ? this.pages : pages as List>?,