paginable 1.1.0
paginable: ^1.1.0 copied to clipboard
Paginable is a Flutter package which makes pagination easier by providing more functionality on top of native widgets.
Paginable is a Flutter package which makes pagination easier.
Paginable Widgets #
PaginableListViewBuilderis paginable's version ofListView.builderPaginableCustomScrollViewis paginable's version ofCustomScrollViewPaginableSliverChildBuilderDelegateis paginable's version ofSliverChildBuilderDelegate
Usage #
Using PaginableListViewBuilder #
As I mentioned earlier, this widget is just a paginable's version of ListView.builder which provides only three more parameters.
class Home extends StatelessWidget {
const Home({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
appBar: AppBar(
title: const Text('PaginableListViewBuilder'),
),
body: PaginableListViewBuilder(
loadMore: () async {},
errorIndicatorWidget: (exception, tryAgain) => Container(
color: Colors.redAccent,
height: 130,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
exception.toString(),
style: const TextStyle(fontSize: 16),
),
const SizedBox(
height: 16.0,
),
ElevatedButton(
style: ButtonStyle(
backgroundColor:
MaterialStateProperty.all(Colors.green),
),
onPressed: tryAgain,
child: const Text('Try Again'),
),
],
),
),
progressIndicatorWidget: const SizedBox(
height: 100,
child: Center(
child: CircularProgressIndicator(),
),
),
itemBuilder: (context, index) => ListTile(
leading: CircleAvatar(
child: Text(
index.toString(),
),
),
),
itemCount: 20),
),
);
}
}
loadMoretakes an async function which will be executed when the scroll is almost at the end.errorIndicatorWidgetalso takes a function which contains two parameters, one being of typeExceptionand other being aFunction(), returning a widget which will be displayed at the bottom of the scrollview when an exception occurs in the async function which we passed to theloadMoreparameter. The parameter with typeExceptionwill contain the exception which occured while executing the function passed to the parameterloadMoreif exception occured and the parameter with typeFunction()will contain the same function which we passed to theloadMoreparameter.progressIndicatorWidgettakes a widget which will be displayed at the bottom of the scrollview to indicate the user that the async function we passed to theloadMoreparameter is being executed.
Using PaginableCustomScrollView with PaginableSliverChildBuilderDelegate #
Paginable also supports SliverList, but instead of using CustomScrollView one need to use PaginableCustomScrollView along with PaginableSliverChildBuilderDelegate as the delegate.
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: PaginableCustomScrollView(
loadMore: () async {},
slivers: [
const SliverAppBar(
title: Text('PaginableSliverChildBuilderDelegate'),
floating: true,
),
SliverList(
delegate: PaginableSliverChildBuilderDelegate(
(context, index) => ListTile(
leading: CircleAvatar(
child: Text(
index.toString(),
),
),
),
childCount: 20,
errorIndicatorWidget: (exception, tryAgain) => Container(
color: Colors.redAccent,
height: 130,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
exception.toString(),
style: const TextStyle(fontSize: 16),
),
const SizedBox(
height: 16.0,
),
ElevatedButton(
style: ButtonStyle(
backgroundColor:
MaterialStateProperty.all(Colors.green),
),
onPressed: tryAgain,
child: const Text('Try Again'),
),
],
),
),
progressIndicatorWidget: const SizedBox(
height: 100,
child: Center(
child: CircularProgressIndicator(),
),
),
).build(),
),
],
),
),
);
}
}
You might miss that the parameter loadMore is in PaginableCustomScrollView, the rest two errorIndicatorWidget & progressIndicatorWidget are in PaginableSliverChildBuilderDelegate and we are calling build() on PaginableSliverChildBuilderDelegate. It is mandatory to call build() on PaginableSliverChildBuilderDelegate because it returns a SliverChildBuilderDelegate.
It is worth noting that Paginable is only resposible for executing the async function passed to the
loadMoreparameter when the scroll is almost at the end, displayingerrorIndicatorWidgetat the bottom of the scrollview when an exception occurs in theloadMoreand displayingprogressIndicatorWidgetat the bottom of the scrollview to indicate the user that theloadMoreis being executed.Paginable is not resposible for managing states, to know about different ways of managing states in Flutter, https://flutter.dev/docs/development/data-and-backend/state-mgmt/options
Contribution #
If you would like to contribute to the package (e.g. by improving the documentation, solving a bug or adding a cool new feature), you are welcomed and very much appreciated to send us your pull request and if you find something wrong with the package, please feel free to open an issue.