From 6f60bb8abbab13c762bf5eb6027daaa3eca58859 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 19 Feb 2021 14:28:07 +0100 Subject: [PATCH] [core] update example --- .../example/lib/main.dart | 140 +++++++++++------- 1 file changed, 83 insertions(+), 57 deletions(-) diff --git a/packages/stream_chat_flutter_core/example/lib/main.dart b/packages/stream_chat_flutter_core/example/lib/main.dart index 08bf7024..aa705db1 100644 --- a/packages/stream_chat_flutter_core/example/lib/main.dart +++ b/packages/stream_chat_flutter_core/example/lib/main.dart @@ -120,7 +120,17 @@ class HomeScreen extends StatelessWidget { final _item = channels[index]; return ListTile( title: Text(_item.name), - subtitle: Text(_item.state.lastMessage.text), + subtitle: StreamBuilder( + stream: _item.state.lastMessageStream, + initialData: _item.state.lastMessage, + builder: (context, snapshot) { + if (snapshot.hasData) { + return Text(snapshot.data.text); + } + + return SizedBox(); + }, + ), onTap: () { /// Display a list of messages when the user taps on an item. /// We can use [StreamChannel] to wrap our [MessageScreen] screen @@ -161,6 +171,7 @@ class MessageScreen extends StatefulWidget { class _MessageScreenState extends State { TextEditingController _controller; ScrollController _scrollController; + final messageListController = MessageListController(); @override void initState() { @@ -191,68 +202,83 @@ class _MessageScreenState extends State { final channel = StreamChannel.of(context).channel; return Scaffold( appBar: AppBar( - title: Text(channel.name), + title: StreamBuilder>( + initialData: channel.state.typingEvents, + stream: channel.state.typingEventsStream, + builder: (context, snapshot) { + if (snapshot.hasData && snapshot.data.isNotEmpty) { + return Text('${snapshot.data.first.name} is typing...'); + } + return SizedBox(); + }, + ), ), body: SafeArea( child: Column( children: [ Expanded( - child: MessageListCore( - emptyBuilder: (BuildContext context) { - return Center( - child: Text('Nothing here yet'), - ); - }, - loadingBuilder: (BuildContext context) { - return Center( - child: SizedBox( - height: 100.0, - width: 100.0, - child: CircularProgressIndicator(), - ), - ); - }, - messageListBuilder: ( - BuildContext context, - List messages, - ) { - return ListView.builder( - controller: _scrollController, - itemCount: messages.length, - reverse: true, - itemBuilder: (BuildContext context, int index) { - final item = messages[index]; - final client = StreamChatCore.of(context).client; - if (item.user.id == client.uid) { - return Align( - alignment: Alignment.centerRight, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Text(item.text), - ), - ); - } else { - return Align( - alignment: Alignment.centerLeft, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Text(item.text), - ), - ); - } - }, - ); - }, - errorWidgetBuilder: (BuildContext context, error) { - print(error?.toString()); - return Center( - child: SizedBox( - height: 100.0, - width: 100.0, - child: Text('Oh no, an error occured. Please see logs.'), - ), - ); + child: LazyLoadScrollView( + onEndOfPage: () async { + messageListController.paginateData(); }, + child: MessageListCore( + emptyBuilder: (BuildContext context) { + return Center( + child: Text('Nothing here yet'), + ); + }, + loadingBuilder: (BuildContext context) { + return Center( + child: SizedBox( + height: 100.0, + width: 100.0, + child: CircularProgressIndicator(), + ), + ); + }, + messageListBuilder: ( + BuildContext context, + List messages, + ) { + return ListView.builder( + controller: _scrollController, + itemCount: messages.length, + reverse: true, + itemBuilder: (BuildContext context, int index) { + final item = messages[index]; + final client = StreamChatCore.of(context).client; + if (item.user.id == client.uid) { + return Align( + alignment: Alignment.centerRight, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text(item.text), + ), + ); + } else { + return Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text(item.text), + ), + ); + } + }, + ); + }, + errorWidgetBuilder: (BuildContext context, error) { + print(error?.toString()); + return Center( + child: SizedBox( + height: 100.0, + width: 100.0, + child: + Text('Oh no, an error occured. Please see logs.'), + ), + ); + }, + ), ), ), Padding(