From e02e1be174deea3910b8dab61c6e1b8b51515fd8 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 20 Apr 2020 12:21:42 +0200 Subject: [PATCH] add image on tap to channel preview --- lib/src/channel_list_view.dart | 29 ++++++++++++++++++----------- lib/src/channel_preview.dart | 8 +++++++- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/lib/src/channel_list_view.dart b/lib/src/channel_list_view.dart index e968e6c0..1d5992c7 100644 --- a/lib/src/channel_list_view.dart +++ b/lib/src/channel_list_view.dart @@ -56,6 +56,7 @@ class ChannelListView extends StatefulWidget { this.channelWidget, this.channelPreviewBuilder, this.errorBuilder, + this.onImageTap, }) : super(key: key); final Widget Function(Error error) errorBuilder; @@ -94,6 +95,9 @@ class ChannelListView extends StatefulWidget { /// Builder used to create a custom channel preview final ChannelPreviewBuilder channelPreviewBuilder; + /// The function called when the image is tapped + final Function(Channel) onImageTap; + @override _ChannelListViewState createState() => _ChannelListViewState(); } @@ -215,8 +219,6 @@ class _ChannelListViewState extends State { if (i < channels.length) { final channel = channels[i]; - final channelClient = streamChat.client.channels[channel.cid]; - ChannelTapCallback onTap; if (widget.onChannelTap != null) { onTap = widget.onChannelTap; @@ -237,11 +239,11 @@ class _ChannelListViewState extends State { } return StreamChannel( - key: ValueKey('CHANNEL-${channelClient.id}'), - channel: channelClient, + key: ValueKey('CHANNEL-${channel.id}'), + channel: channel, child: StreamBuilder( - initialData: channelClient.updatedAt, - stream: channelClient.updatedAtStream, + initialData: channel.updatedAt, + stream: channel.updatedAtStream, builder: (context, snapshot) { Widget child; if (widget.channelPreviewBuilder != null) { @@ -249,14 +251,14 @@ class _ChannelListViewState extends State { children: [ widget.channelPreviewBuilder( context, - channelClient, + channel, ), Positioned.fill( child: Material( color: Colors.transparent, child: InkWell( onTap: () { - onTap(channelClient, widget.channelWidget); + onTap(channel, widget.channelWidget); }, ), ), @@ -265,9 +267,14 @@ class _ChannelListViewState extends State { ); } else { child = ChannelPreview( - channel: channelClient, - onTap: (channelClient) { - onTap(channelClient, widget.channelWidget); + channel: channel, + onImageTap: widget.onImageTap != null + ? () { + widget.onImageTap(channel); + } + : null, + onTap: (channel) { + onTap(channel, widget.channelWidget); }, ); } diff --git a/lib/src/channel_preview.dart b/lib/src/channel_preview.dart index b6e3beba..9b949a68 100644 --- a/lib/src/channel_preview.dart +++ b/lib/src/channel_preview.dart @@ -25,10 +25,14 @@ class ChannelPreview extends StatelessWidget { /// Channel displayed final Channel channel; + /// The function called when the image is tapped + final VoidCallback onImageTap; + ChannelPreview({ @required this.channel, Key key, this.onTap, + this.onImageTap, }) : super(key: key); @override @@ -37,7 +41,9 @@ class ChannelPreview extends StatelessWidget { onTap: () { onTap(channel); }, - leading: ChannelImage(), + leading: ChannelImage( + onTap: onImageTap, + ), title: ChannelName( textStyle: StreamChatTheme.of(context).channelPreviewTheme.title, ),