add image on tap to channel preview
This commit is contained in:
@@ -56,6 +56,7 @@ class ChannelListView extends StatefulWidget {
|
|||||||
this.channelWidget,
|
this.channelWidget,
|
||||||
this.channelPreviewBuilder,
|
this.channelPreviewBuilder,
|
||||||
this.errorBuilder,
|
this.errorBuilder,
|
||||||
|
this.onImageTap,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
final Widget Function(Error error) errorBuilder;
|
final Widget Function(Error error) errorBuilder;
|
||||||
@@ -94,6 +95,9 @@ class ChannelListView extends StatefulWidget {
|
|||||||
/// Builder used to create a custom channel preview
|
/// Builder used to create a custom channel preview
|
||||||
final ChannelPreviewBuilder channelPreviewBuilder;
|
final ChannelPreviewBuilder channelPreviewBuilder;
|
||||||
|
|
||||||
|
/// The function called when the image is tapped
|
||||||
|
final Function(Channel) onImageTap;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
_ChannelListViewState createState() => _ChannelListViewState();
|
_ChannelListViewState createState() => _ChannelListViewState();
|
||||||
}
|
}
|
||||||
@@ -215,8 +219,6 @@ class _ChannelListViewState extends State<ChannelListView> {
|
|||||||
if (i < channels.length) {
|
if (i < channels.length) {
|
||||||
final channel = channels[i];
|
final channel = channels[i];
|
||||||
|
|
||||||
final channelClient = streamChat.client.channels[channel.cid];
|
|
||||||
|
|
||||||
ChannelTapCallback onTap;
|
ChannelTapCallback onTap;
|
||||||
if (widget.onChannelTap != null) {
|
if (widget.onChannelTap != null) {
|
||||||
onTap = widget.onChannelTap;
|
onTap = widget.onChannelTap;
|
||||||
@@ -237,11 +239,11 @@ class _ChannelListViewState extends State<ChannelListView> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return StreamChannel(
|
return StreamChannel(
|
||||||
key: ValueKey<String>('CHANNEL-${channelClient.id}'),
|
key: ValueKey<String>('CHANNEL-${channel.id}'),
|
||||||
channel: channelClient,
|
channel: channel,
|
||||||
child: StreamBuilder<DateTime>(
|
child: StreamBuilder<DateTime>(
|
||||||
initialData: channelClient.updatedAt,
|
initialData: channel.updatedAt,
|
||||||
stream: channelClient.updatedAtStream,
|
stream: channel.updatedAtStream,
|
||||||
builder: (context, snapshot) {
|
builder: (context, snapshot) {
|
||||||
Widget child;
|
Widget child;
|
||||||
if (widget.channelPreviewBuilder != null) {
|
if (widget.channelPreviewBuilder != null) {
|
||||||
@@ -249,14 +251,14 @@ class _ChannelListViewState extends State<ChannelListView> {
|
|||||||
children: [
|
children: [
|
||||||
widget.channelPreviewBuilder(
|
widget.channelPreviewBuilder(
|
||||||
context,
|
context,
|
||||||
channelClient,
|
channel,
|
||||||
),
|
),
|
||||||
Positioned.fill(
|
Positioned.fill(
|
||||||
child: Material(
|
child: Material(
|
||||||
color: Colors.transparent,
|
color: Colors.transparent,
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
onTap(channelClient, widget.channelWidget);
|
onTap(channel, widget.channelWidget);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -265,9 +267,14 @@ class _ChannelListViewState extends State<ChannelListView> {
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
child = ChannelPreview(
|
child = ChannelPreview(
|
||||||
channel: channelClient,
|
channel: channel,
|
||||||
onTap: (channelClient) {
|
onImageTap: widget.onImageTap != null
|
||||||
onTap(channelClient, widget.channelWidget);
|
? () {
|
||||||
|
widget.onImageTap(channel);
|
||||||
|
}
|
||||||
|
: null,
|
||||||
|
onTap: (channel) {
|
||||||
|
onTap(channel, widget.channelWidget);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,10 +25,14 @@ class ChannelPreview extends StatelessWidget {
|
|||||||
/// Channel displayed
|
/// Channel displayed
|
||||||
final Channel channel;
|
final Channel channel;
|
||||||
|
|
||||||
|
/// The function called when the image is tapped
|
||||||
|
final VoidCallback onImageTap;
|
||||||
|
|
||||||
ChannelPreview({
|
ChannelPreview({
|
||||||
@required this.channel,
|
@required this.channel,
|
||||||
Key key,
|
Key key,
|
||||||
this.onTap,
|
this.onTap,
|
||||||
|
this.onImageTap,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -37,7 +41,9 @@ class ChannelPreview extends StatelessWidget {
|
|||||||
onTap: () {
|
onTap: () {
|
||||||
onTap(channel);
|
onTap(channel);
|
||||||
},
|
},
|
||||||
leading: ChannelImage(),
|
leading: ChannelImage(
|
||||||
|
onTap: onImageTap,
|
||||||
|
),
|
||||||
title: ChannelName(
|
title: ChannelName(
|
||||||
textStyle: StreamChatTheme.of(context).channelPreviewTheme.title,
|
textStyle: StreamChatTheme.of(context).channelPreviewTheme.title,
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user