From f2646e407d12072b128aea8aa09b1b819922608c Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Tue, 25 Feb 2020 14:06:48 +0100 Subject: [PATCH] add custom message example --- example/lib/custom_message.dart | 65 +++++++++++++++++++++++++++++++++ lib/src/message_list_view.dart | 11 +++--- lib/src/stream_channel.dart | 2 +- 3 files changed, 71 insertions(+), 7 deletions(-) create mode 100644 example/lib/custom_message.dart diff --git a/example/lib/custom_message.dart b/example/lib/custom_message.dart new file mode 100644 index 00000000..b8efa294 --- /dev/null +++ b/example/lib/custom_message.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; + +void main() async { + final client = Client('qk4nn7rpcn75'); + + await client.setUser( + User(id: 'wild-breeze-7'), + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoid2lsZC1icmVlemUtNyJ9.VM2EX1EXOfgqa-bTH_3JzeY0T99ngWzWahSauP3dBMo', + ); + + final channelClient = client.channel('messaging', id: 'godevs'); + + // ignore: unawaited_futures + channelClient.watch(); + + runApp( + StreamChat( + client: client, + child: MaterialApp( + home: StreamChannel( + channelClient: channelClient, + child: ChannelPage(), + ), + ), + ), + ); +} + +class ChannelPage extends StatelessWidget { + const ChannelPage({ + Key key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Column( + children: [ + Expanded( + child: MessageListView( + messageBuilder: (context, message, _) { + final isCurrentUser = + StreamChat.of(context).user.id == message.user.id; + final textAlign = + isCurrentUser ? TextAlign.right : TextAlign.left; + return ListTile( + title: Text( + message.text, + textAlign: textAlign, + ), + subtitle: Text( + message.user.extraData['name'], + textAlign: textAlign, + ), + ); + }, + ), + ), + MessageInput(), + ], + ), + ); + } +} diff --git a/lib/src/message_list_view.dart b/lib/src/message_list_view.dart index c5b3eab1..63327a24 100644 --- a/lib/src/message_list_view.dart +++ b/lib/src/message_list_view.dart @@ -15,15 +15,14 @@ typedef ThreadTapCallback = void Function(Message, Widget); class MessageListView extends StatefulWidget { MessageListView({ Key key, - MessageBuilder messageBuilder, + this.messageBuilder, this.parentMessageBuilder, this.parentMessage, this.threadBuilder, this.onThreadTap, - }) : _messageBuilder = messageBuilder, - super(key: key); + }) : super(key: key); - final MessageBuilder _messageBuilder; + final MessageBuilder messageBuilder; final ParentMessageBuilder parentMessageBuilder; final ThreadBuilder threadBuilder; final ThreadTapCallback onThreadTap; @@ -105,8 +104,8 @@ class _MessageListViewState extends State { } final message = _messages[i]; - if (widget._messageBuilder != null) { - return widget._messageBuilder(context, message, i); + if (widget.messageBuilder != null) { + return widget.messageBuilder(context, message, i); } final previousMessage = diff --git a/lib/src/stream_channel.dart b/lib/src/stream_channel.dart index fe34ff00..2630249c 100644 --- a/lib/src/stream_channel.dart +++ b/lib/src/stream_channel.dart @@ -109,7 +109,7 @@ class StreamChannelState extends State { future: widget.channelClient.initialized, initialData: widget.channelClient.state != null, builder: (context, snapshot) { - if (!snapshot.hasData) { + if (!snapshot.hasData || !snapshot.data) { return Scaffold( body: Center( child: CircularProgressIndicator(),