Skip to content

Commit 94aa9d1

Browse files
committed
RealmContentNetworkImage [nfc]: Take a Uri object instead of a String
1 parent a58a1b4 commit 94aa9d1

File tree

6 files changed

+13
-20
lines changed

6 files changed

+13
-20
lines changed

Diff for: lib/widgets/content.dart

+5-9
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ class MessageImage extends StatelessWidget {
243243
message: message,
244244
src: resolvedSrc,
245245
child: RealmContentNetworkImage(
246-
resolvedSrc.toString(),
246+
resolvedSrc,
247247
filterQuality: FilterQuality.medium))))));
248248
}
249249
}
@@ -648,7 +648,7 @@ class MessageImageEmoji extends StatelessWidget {
648648
// too low.
649649
top: -1.5,
650650
child: RealmContentNetworkImage(
651-
resolvedSrc.toString(),
651+
resolvedSrc,
652652
filterQuality: FilterQuality.medium,
653653
width: size,
654654
height: size,
@@ -749,9 +749,7 @@ class RealmContentNetworkImage extends StatelessWidget {
749749
this.cacheHeight,
750750
});
751751

752-
/// An absolute URL string for the image.
753-
// TODO: Take a [Uri] object, not a String
754-
final String src;
752+
final Uri src;
755753

756754
final double scale;
757755
final ImageFrameBuilder? frameBuilder;
@@ -780,10 +778,8 @@ class RealmContentNetworkImage extends StatelessWidget {
780778
Widget build(BuildContext context) {
781779
final account = PerAccountStoreWidget.of(context).account;
782780

783-
final Uri parsedSrc = Uri.parse(src);
784-
785781
return Image.network(
786-
parsedSrc.toString(),
782+
src.toString(),
787783

788784
scale: scale,
789785
frameBuilder: frameBuilder,
@@ -806,7 +802,7 @@ class RealmContentNetworkImage extends StatelessWidget {
806802
isAntiAlias: isAntiAlias,
807803

808804
// Only send the auth header to the server `auth` belongs to.
809-
headers: parsedSrc.origin == account.realmUrl.origin
805+
headers: src.origin == account.realmUrl.origin
810806
? authHeader(email: account.email, apiKey: account.apiKey)
811807
: null,
812808

Diff for: lib/widgets/lightbox.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ class _LightboxPageState extends State<_LightboxPage> {
197197
child: LightboxHero(
198198
message: widget.message,
199199
src: widget.src,
200-
child: RealmContentNetworkImage(widget.src.toString(), filterQuality: FilterQuality.medium))))))),
200+
child: RealmContentNetworkImage(widget.src, filterQuality: FilterQuality.medium))))))),
201201
bottomNavigationBar: bottomAppBar));
202202
}
203203
}

Diff for: lib/widgets/message_list.dart

+1-4
Original file line numberDiff line numberDiff line change
@@ -482,10 +482,7 @@ class MessageWithSender extends StatelessWidget {
482482
: resolveUrl(author.avatarUrl!, store.account);
483483
final avatar = (avatarUrl == null)
484484
? const SizedBox.shrink()
485-
: RealmContentNetworkImage(
486-
avatarUrl.toString(),
487-
filterQuality: FilterQuality.medium,
488-
);
485+
: RealmContentNetworkImage(avatarUrl, filterQuality: FilterQuality.medium);
489486

490487
final time = _kMessageTimestampFormat
491488
.format(DateTime.fromMillisecondsSinceEpoch(1000 * message.timestamp));

Diff for: test/widgets/content_checks.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ import 'package:checks/checks.dart';
22
import 'package:zulip/widgets/content.dart';
33

44
extension RealmContentNetworkImageChecks on Subject<RealmContentNetworkImage> {
5-
Subject<String> get src => has((i) => i.src, 'src');
5+
Subject<Uri> get src => has((i) => i.src, 'src');
66
// TODO others
77
}

Diff for: test/widgets/content_test.dart

+4-4
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ void main() {
121121
group('RealmContentNetworkImage', () {
122122
final authHeaders = authHeader(email: eg.selfAccount.email, apiKey: eg.selfAccount.apiKey);
123123

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

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

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

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

Diff for: test/widgets/message_list_test.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ void main() {
149149
check(findAvatarImageWidget(tester)).isNull();
150150
} else {
151151
check(findAvatarImageWidget(tester)).isNotNull()
152-
.src.equals(resolveUrl(avatarUrl, eg.selfAccount).toString());
152+
.src.equals(resolveUrl(avatarUrl, eg.selfAccount));
153153
}
154154
}
155155

0 commit comments

Comments
 (0)