From 08bd5a8ca84d8e8cb87fcec089847458197f8be9 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 19 Feb 2021 13:14:10 +0100 Subject: [PATCH] [core] add default pagination value + implement pagination in example --- .../example/lib/main.dart | 64 ++++++++++++------- .../lib/src/channel_list_core.dart | 5 +- 2 files changed, 44 insertions(+), 25 deletions(-) diff --git a/packages/stream_chat_flutter_core/example/lib/main.dart b/packages/stream_chat_flutter_core/example/lib/main.dart index 458c0e24..08bf7024 100644 --- a/packages/stream_chat_flutter_core/example/lib/main.dart +++ b/packages/stream_chat_flutter_core/example/lib/main.dart @@ -67,6 +67,8 @@ class StreamExample extends StatelessWidget { /// [ChannelListCore] is a `builder` with callbacks for constructing UIs based /// on different scenarios. class HomeScreen extends StatelessWidget { + final channelListController = ChannelListController(); + @override Widget build(BuildContext context) { return Scaffold( @@ -75,6 +77,15 @@ class HomeScreen extends StatelessWidget { ), body: ChannelsBloc( child: ChannelListCore( + channelListController: channelListController, + filter: { + 'type': 'messaging', + 'members': { + r'$in': [ + StreamChatCore.of(context).user.id, + ] + } + }, emptyBuilder: (BuildContext context) { return Center( child: Text('Looks like you are not in any channels'), @@ -99,31 +110,36 @@ class HomeScreen extends StatelessWidget { BuildContext context, List channels, ) => - ListView.builder( - itemCount: channels.length, - itemBuilder: (BuildContext context, int index) { - final _item = channels[index]; - return ListTile( - title: Text(_item.name), - subtitle: Text(_item.state.lastMessage.text), - onTap: () { - /// Display a list of messages when the user taps on an item. - /// We can use [StreamChannel] to wrap our [MessageScreen] screen - /// with the selected channel. - /// - /// This allows us to use a built-in inherited widget for accessing - /// our `channel` later on. - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) => StreamChannel( - channel: _item, - child: MessageScreen(), - ), - ), - ); - }, - ); + LazyLoadScrollView( + onEndOfPage: () async { + channelListController.paginateData(); }, + child: ListView.builder( + itemCount: channels.length, + itemBuilder: (BuildContext context, int index) { + final _item = channels[index]; + return ListTile( + title: Text(_item.name), + subtitle: Text(_item.state.lastMessage.text), + onTap: () { + /// Display a list of messages when the user taps on an item. + /// We can use [StreamChannel] to wrap our [MessageScreen] screen + /// with the selected channel. + /// + /// This allows us to use a built-in inherited widget for accessing + /// our `channel` later on. + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => StreamChannel( + channel: _item, + child: MessageScreen(), + ), + ), + ); + }, + ); + }, + ), ), ), ), diff --git a/packages/stream_chat_flutter_core/lib/src/channel_list_core.dart b/packages/stream_chat_flutter_core/lib/src/channel_list_core.dart index b77ef394..18a8e477 100644 --- a/packages/stream_chat_flutter_core/lib/src/channel_list_core.dart +++ b/packages/stream_chat_flutter_core/lib/src/channel_list_core.dart @@ -64,7 +64,10 @@ class ChannelListCore extends StatefulWidget { this.filter, this.options, this.sort, - this.pagination, + this.pagination = const PaginationParams( + offset: 0, + limit: 25, + ), this.channelListController, }) : assert(errorBuilder != null), assert(emptyBuilder != null),