• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

supabase / supabase-flutter / 40927974625
94%

Build:
DEFAULT BRANCH: main
Ran 29 Oct 2026 06:09PM UTC
Jobs 12
Files 193
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

29 Oct 2026 06:08PM UTC coverage: 94.243% (+0.01%) from 94.229%
40927974625

push

github

web-flow
feat(storage)!: return the response head from downloadStream before the body (#2105)

Resolves SDK-2593.

## What

`downloadStream` used to be an `async*` generator. Nothing was sent
until the stream was listened to, so a missing object or a bad token
arrived as an error on the stream, the status and headers were never
exposed, and a 200 answer to a ranged request threw.

It now returns `Future<StorageDownload>`, following `HttpClientResponse`
in `dart:io` and `StreamedResponse` in `http`:

```dart
final download = await storage.from('videos').downloadStream('a.mp4', range: range);
download.statusCode;    // 200 or 206
download.contentLength; // null when unknown
download.contentRange;
await for (final chunk in download) { ... }
```

- `StorageDownload extends StreamView<Uint8List>`, so `await for`,
`pipe`, `StreamBuilder`, `collectBytes` and `writeToFile` keep working
on it. It exposes `statusCode`, `headers`, `contentLength`,
`contentRange` and `contentType`.
- The future completes once a 2xx response head arrives and reads no
byte of the body. A non-2xx answer is decoded into a
`StorageApiException` and thrown from the future.
- A ranged request answered with a 200 is returned as it is, so the
caller checks `statusCode` before appending to a partial file.
- A failure while the body streams, a timeout included, surfaces on the
stream as a `StorageTransportException`. An abort stays a
`RequestAbortedException`, and an exception thrown by `onProgress`
passes through unchanged.
- Cancelling the subscription closes the connection. `abortSignal`
aborts before the head (it throws from the future) and after it (the
error comes on the stream).
- `contentLength` is `null` for an encoded body, the same rule the
`onProgress` total already used. Both now go through one helper.

The buffered `download(range:)` keeps throwing on a 200, because it
returns only bytes and the caller could not tell the whole object from
the range. The error message now names the requ... (continued)

52 of 52 new or added lines in 3 files covered. (100.0%)

12491 of 13254 relevant lines covered (94.24%)

6.58 hits per line

Jobs
ID Job ID Ran Files Coverage
3 supabase_flutter - 40927974625.3 29 Oct 2026 06:10PM UTC 16
89.03
GitHub Action Run
4 supabase_test - 40927974625.4 29 Oct 2026 06:09PM UTC 9
93.55
GitHub Action Run
5 postgrest - 40927974625.5 29 Oct 2026 06:12PM UTC 30
92.82
GitHub Action Run
6 supabase_functions - 40927974625.6 29 Oct 2026 06:09PM UTC 4
94.01
GitHub Action Run
7 iceberg - 40927974625.7 29 Oct 2026 06:09PM UTC 7
99.72
GitHub Action Run
8 supabase_auth - 40927974625.8 29 Oct 2026 06:14PM UTC 34
94.81
GitHub Action Run
9 supabase - 40927974625.9 29 Oct 2026 06:13PM UTC 21
94.52
GitHub Action Run
10 supabase_typegen - 40927974625.10 29 Oct 2026 06:12PM UTC 6
94.44
GitHub Action Run
11 supabase_storage - 40927974625.11 29 Oct 2026 06:12PM UTC 13
95.96
GitHub Action Run
12 supabase_realtime - 40927974625.12 29 Oct 2026 06:12PM UTC 14
92.01
GitHub Action Run
3 yet_another_json_isolate - 40346664947.3 26 Oct 2026 03:11PM UTC 2
98.65
GitHub Action Run
2 supabase_common - 40911627463.2 29 Oct 2026 04:28PM UTC 37
94.39
GitHub Action Run
Source Files on build 40927974625
  • Tree
  • List 193
  • Changed 5
  • Source Changed 5
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #40927974625
  • cdfd66cb on github
  • Prev Build on main (#40911627463)
  • Next Build on main (#40930418497)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc