@@ -17,11 +17,27 @@ import 'cupertino_api.dart';
1717
1818final _digitRegex = RegExp (r'^\d+$' );
1919
20+ /// This class can be removed when `package:http` v2 is released.
21+ class _StreamedResponseWithUrl extends StreamedResponse
22+ implements BaseResponseWithUrl {
23+ @override
24+ final Uri url;
25+
26+ _StreamedResponseWithUrl (super .stream, super .statusCode,
27+ {required this .url,
28+ super .contentLength,
29+ super .request,
30+ super .headers,
31+ super .isRedirect,
32+ super .reasonPhrase});
33+ }
34+
2035class _TaskTracker {
2136 final responseCompleter = Completer <URLResponse >();
2237 final BaseRequest request;
2338 final responseController = StreamController <Uint8List >();
2439 int numRedirects = 0 ;
40+ Uri ? lastUrl; // The last URL redirected to.
2541
2642 _TaskTracker (this .request);
2743
@@ -180,6 +196,7 @@ class CupertinoClient extends BaseClient {
180196 ++ taskTracker.numRedirects;
181197 if (taskTracker.request.followRedirects &&
182198 taskTracker.numRedirects <= taskTracker.request.maxRedirects) {
199+ taskTracker.lastUrl = request.url;
183200 return request;
184201 }
185202 return null ;
@@ -292,9 +309,10 @@ class CupertinoClient extends BaseClient {
292309 );
293310 }
294311
295- return StreamedResponse (
312+ return _StreamedResponseWithUrl (
296313 taskTracker.responseController.stream,
297314 response.statusCode,
315+ url: taskTracker.lastUrl ?? request.url,
298316 contentLength: response.expectedContentLength == - 1
299317 ? null
300318 : response.expectedContentLength,
0 commit comments