Skip to content

Commit

Permalink
lightbox: Add user's avatar on the lightbox app bar
Browse files Browse the repository at this point in the history
This change updates the lightbox to display the message author's avatar
alongside their name and the date in the app bar. The avatar is
positioned in the "start" direction (left for LTR layouts, right for
RTL layouts) to align with the behavior in the React Native app.

Fixes: #41
  • Loading branch information
shivanshsharma13 committed Dec 19, 2024
1 parent 347e19e commit e094f50
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 16 deletions.
32 changes: 17 additions & 15 deletions lib/widgets/lightbox.dart
Original file line number Diff line number Diff line change
Expand Up @@ -171,21 +171,23 @@ class _LightboxPageLayoutState extends State<_LightboxPageLayout> {
backgroundColor: appBarBackgroundColor,
shape: const Border(), // Remove bottom border from [AppBarTheme]
elevation: appBarElevation,

// TODO(#41): Show message author's avatar
title: RichText(
text: TextSpan(children: [
TextSpan(
text: '${widget.message.senderFullName}\n',

// Restate default
style: themeData.textTheme.titleLarge!.copyWith(color: appBarForegroundColor)),
TextSpan(
text: timestampText,

// Make smaller, like a subtitle
style: themeData.textTheme.titleSmall!.copyWith(color: appBarForegroundColor)),
])),
title: Row(children: [
Avatar(size: 36, borderRadius: 36 / 8, userId: widget.message.senderId),
const SizedBox(width: 8),
Expanded(
child: RichText(
text: TextSpan(
children: [
TextSpan(
text: '${widget.message.senderFullName}\n',
// Restate default
style: themeData.textTheme.titleLarge!.copyWith(color: appBarForegroundColor)),
TextSpan(
text: timestampText,
// Make smaller, like a subtitle
style: themeData.textTheme.titleSmall!.copyWith(color: appBarForegroundColor)),
]))),
]),
bottom: widget.buildAppBarBottom(context));
}

Expand Down
6 changes: 5 additions & 1 deletion test/widgets/lightbox_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -236,12 +236,16 @@ void main() {
debugNetworkImageHttpClientProvider = null;
});

testWidgets('app bar shows sender name and date', (tester) async {
testWidgets('app bar shows sender avatar, name and date', (tester) async {
prepareBoringImageHttpClient();
final timestamp = DateTime.parse("2024-07-23 23:12:24").millisecondsSinceEpoch ~/ 1000;
final message = eg.streamMessage(sender: eg.otherUser, timestamp: timestamp);
await setupPage(tester, message: message, thumbnailUrl: null);

// Check Avatar properties
final avatar = tester.widget<Avatar>(find.byType(Avatar));
check(avatar.userId).equals(message.senderId);

// We're looking for a RichText, in the app bar, with both the
// sender's name and the timestamp.
final labelTextWidget = tester.widget<RichText>(
Expand Down

0 comments on commit e094f50

Please sign in to comment.