Skip to content

Commit

Permalink
RealmContentNetworkImage [nfc]: Take a Uri object instead of a String
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisbobbe committed Aug 3, 2023
1 parent 43eb0a3 commit f8893ec
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 18 deletions.
14 changes: 5 additions & 9 deletions lib/widgets/content.dart
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ class MessageImage extends StatelessWidget {
message: message,
src: resolvedSrc,
child: RealmContentNetworkImage(
resolvedSrc.toString(),
resolvedSrc,
filterQuality: FilterQuality.medium))))));
}
}
Expand Down Expand Up @@ -648,7 +648,7 @@ class MessageImageEmoji extends StatelessWidget {
// too low.
top: -1.5,
child: RealmContentNetworkImage(
resolvedSrc.toString(),
resolvedSrc,
filterQuality: FilterQuality.medium,
width: size,
height: size,
Expand Down Expand Up @@ -749,9 +749,7 @@ class RealmContentNetworkImage extends StatelessWidget {
this.cacheHeight,
});

/// An absolute URL string for the image.
// TODO: Take a [Uri] object, not a String
final String src;
final Uri src;

final double scale;
final ImageFrameBuilder? frameBuilder;
Expand Down Expand Up @@ -780,10 +778,8 @@ class RealmContentNetworkImage extends StatelessWidget {
Widget build(BuildContext context) {
final account = PerAccountStoreWidget.of(context).account;

final Uri parsedSrc = Uri.parse(src);

return Image.network(
parsedSrc.toString(),
src.toString(),

scale: scale,
frameBuilder: frameBuilder,
Expand All @@ -806,7 +802,7 @@ class RealmContentNetworkImage extends StatelessWidget {
isAntiAlias: isAntiAlias,

// Only send the auth header to the server `auth` belongs to.
headers: parsedSrc.origin == account.realmUrl.origin
headers: src.origin == account.realmUrl.origin
? authHeader(email: account.email, apiKey: account.apiKey)
: null,

Expand Down
2 changes: 1 addition & 1 deletion lib/widgets/lightbox.dart
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ class _LightboxPageState extends State<_LightboxPage> {
child: LightboxHero(
message: widget.message,
src: widget.src,
child: RealmContentNetworkImage(widget.src.toString(), filterQuality: FilterQuality.medium))))))),
child: RealmContentNetworkImage(widget.src, filterQuality: FilterQuality.medium))))))),
bottomNavigationBar: bottomAppBar));
}
}
Expand Down
5 changes: 1 addition & 4 deletions lib/widgets/message_list.dart
Original file line number Diff line number Diff line change
Expand Up @@ -481,10 +481,7 @@ class MessageWithSender extends StatelessWidget {
: resolveUrl(message.avatarUrl!, store.account);
final avatar = (avatarUrl == null)
? const SizedBox.shrink()
: RealmContentNetworkImage(
avatarUrl.toString(),
filterQuality: FilterQuality.medium,
);
: RealmContentNetworkImage(avatarUrl, filterQuality: FilterQuality.medium);

final time = _kMessageTimestampFormat
.format(DateTime.fromMillisecondsSinceEpoch(1000 * message.timestamp));
Expand Down
8 changes: 4 additions & 4 deletions test/widgets/content_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ void main() {
group('RealmContentNetworkImage', () {
final authHeaders = authHeader(email: eg.selfAccount.email, apiKey: eg.selfAccount.apiKey);

Future<String?> actualAuthHeader(WidgetTester tester, String src) async {
Future<String?> actualAuthHeader(WidgetTester tester, Uri src) async {
final globalStore = TestZulipBinding.instance.globalStore;
addTearDown(TestZulipBinding.instance.reset);
await globalStore.add(eg.selfAccount, eg.initialSnapshot());
Expand All @@ -144,20 +144,20 @@ void main() {
}

testWidgets('includes auth header if `src` on-realm', (tester) async {
check(await actualAuthHeader(tester, 'https://chat.example/image.png'))
check(await actualAuthHeader(tester, Uri.parse('https://chat.example/image.png')))
.isNotNull().equals(authHeaders['Authorization']!);
debugNetworkImageHttpClientProvider = null;
});

testWidgets('excludes auth header if `src` off-realm', (tester) async {
check(await actualAuthHeader(tester, 'https://other.example/image.png'))
check(await actualAuthHeader(tester, Uri.parse('https://other.example/image.png')))
.isNull();
debugNetworkImageHttpClientProvider = null;
});

testWidgets('throws if no `PerAccountStoreWidget` ancestor', (WidgetTester tester) async {
await tester.pumpWidget(
const RealmContentNetworkImage('https://zulip.invalid/path/to/image.png', filterQuality: FilterQuality.medium));
RealmContentNetworkImage(Uri.parse('https://zulip.invalid/path/to/image.png'), filterQuality: FilterQuality.medium));
check(tester.takeException()).isA<AssertionError>();
});
});
Expand Down

0 comments on commit f8893ec

Please sign in to comment.