import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// {@template streamUserItem} /// Shows a preview of the current [User]. /// /// This widget uses a [StreamBuilder] to render the user information /// image as soon as it updates. /// /// It is not recommended to use this widget as it's the default user preview /// used by [StreamUserListView]. /// /// The widget renders the ui based on the first ancestor of type /// [StreamChatTheme]. /// Modify it to change the widget's appearance. /// {@endtemplate} @Deprecated('Use `StreamUserListTile` instead.') class StreamUserItem extends StatelessWidget { /// {@macro streamUserItem} const StreamUserItem({ super.key, required this.user, this.onTap, this.onLongPress, this.onImageTap, this.selected = false, this.showLastOnline = true, }); /// Function called when tapping or clicking on this widget final void Function(User)? onTap; /// Function called when long pressing this widget final void Function(User)? onLongPress; /// The user to display final User user; /// The function called when the image is tapped or clicked final void Function(User)? onImageTap; /// If true the [StreamUserItem] will show a trailing checkmark final bool selected; /// If true the [StreamUserItem] will show the last seen final bool showLastOnline; @override Widget build(BuildContext context) { final chatThemeData = StreamChatTheme.of(context); return ListTile( onTap: onTap == null ? null : () => onTap!(user), onLongPress: onLongPress == null ? null : () => onLongPress!(user), leading: StreamUserAvatar( user: user, onTap: onImageTap, constraints: const BoxConstraints.tightFor( height: 40, width: 40, ), ), trailing: selected ? StreamSvgIcon.checkSend( color: chatThemeData.colorTheme.accentPrimary, ) : null, title: Text( user.name, style: chatThemeData.textTheme.bodyBold, ), subtitle: showLastOnline ? _buildLastActive(context) : null, ); } Widget _buildLastActive(BuildContext context) { final chatTheme = StreamChatTheme.of(context); final lastActive = user.lastActive ?? DateTime.now(); return Text( user.online ? context.translations.userOnlineText : '${context.translations.userLastOnlineText} ' '${Jiffy.parseFromDateTime(lastActive).fromNow()}', style: chatTheme.textTheme.footnote.copyWith( color: chatTheme.colorTheme.textHighEmphasis.withOpacity(0.5), ), ); } }