Skip to content

Commit

Permalink
Lightbox: Added user's avatar in 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: zulip#41
  • Loading branch information
shivanshsharma13 committed Dec 14, 2024
1 parent 347e19e commit a4c4cf7
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 19 deletions.
38 changes: 22 additions & 16 deletions lib/widgets/lightbox.dart
Original file line number Diff line number Diff line change
Expand Up @@ -171,22 +171,28 @@ 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)),
])),
bottom: widget.buildAppBarBottom(context));
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)
);
}

Widget? bottomAppBar;
Expand Down
11 changes: 8 additions & 3 deletions test/widgets/lightbox_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -236,14 +236,19 @@ 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);

// We're looking for a RichText, in the app bar, with both the
// sender's name and the timestamp.
// Check Avatar properties
final avatar = tester.widget<Avatar>(find.byType(Avatar));
check(avatar.size).equals(36);
check(avatar.borderRadius).equals(36 / 8);
check(avatar.userId).equals(message.senderId);

// Check sender name and timestamp
final labelTextWidget = tester.widget<RichText>(
find.descendant(of: find.byType(AppBar).last,
matching: find.textContaining(findRichText: true,
Expand Down

0 comments on commit a4c4cf7

Please sign in to comment.