Switching channels and downloading artifacts could tell the user how far along the process is
- Dominant language
- Dart
- Stars
- 179k
- Forks
- 31.1k
- PR merge metrics
- PR metrics pending
Description
### Use case
Running `flutter channel main`, for example, to switch channels.
Today, that triggers a download of lots of stuff. Here's the output:
```
sethladd-macbookpro:first_ios_app sethladd$ flutter channel main
Switching to flutter channel 'main'...
Upgrading engine...
Downloading Darwin arm64 Dart SDK from Flutter engine 4b952093cb99b93df4797ca1072a9f5fcc47ac7e...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
46 203M 46 94.2M 0 0 89.5M 0 0:00:02 0:00:01 0:00:01 89.5M
99 203M 99 202M 0 0 98.8M 0 0:00:02 0:00:02 --:--:-- 98.8M
100 203M 100 203M 0 0 98.8M 0 0:00:02 0:00:02 --:--:-- 98.8M
Building flutter tool...
Resolving dependencies...
Downloading packages...
Got dependencies.
Downloading android-arm-profile/darwin-x64 tools... 115ms
Downloading android-arm-release/darwin-x64 tools... 82ms
Downloading android-arm64-profile/darwin-x64 tools... 85ms
Downloading android-arm64-release/darwin-x64 tools... 90ms
Downloading android-x64-profile/darwin-x64 tools... 80ms
Downloading android-x64-release/darwin-x64 tools... 58ms
Downloading android-x86 tools... 361ms
Downloading android-x64 tools... 382ms
Downloading android-arm tools... 322ms
Downloading android-arm-profile tools... 241ms
Downloading android-arm-release tools... 248ms
Downloading android-arm64 tools... 431ms
Downloading android-arm64-profile tools... 271ms
Downloading android-arm64-release tools... 258ms
Downloading android-x64-profile tools... 279ms
Downloading android-x64-release tools... 183ms
Downloading android-x86-jit-release tools... 269ms
Downloading ios tools... 1,804ms
Downloading ios-profile tools... 1,464ms
Downloading ios-release tools... 1,265ms
Downloading Web SDK... 1,344ms
Downloading package sky_engine... 35ms
Downloading package flutter_gpu... 5ms
Downloading flutter_patched_sdk tools... 65ms
Downloading flutter_patched_sdk_product tools... 62ms
Downloading darwin-arm64 tools... 693ms
Downloading darwin-x64/framework tools... 674ms
Downloading darwin-x64/gen_snapshot tools... 324ms
Downloading darwin-x64-profile/framework tools... 435ms
Downloading darwin-x64-profile tools... 236ms
Downloading darwin-x64-profile/gen_snapshot tools... 309ms
Downloading darwin-x64-release/framework tools... 304ms
Downloading darwin-x64-release tools... 164ms
Downloading darwin-x64-release/gen_snapshot tools... 308ms
Downloading darwin-arm64/font-subset tools... 34ms
Successfully switched to flutter channel 'main'.
To ensure that you're on the latest build from this channel, run 'flutter upgrade'
sethladd-macbookpro:first_ios_app sethladd$
```
This is OK, but it could be more user friendly:
* How many things am I about to download?
* How far along am I?
* This is a lot of detail... why am I downloading all these things?
### Proposal
One idea we had was to simplify the output and to give a sense of how far along the process is.
Roughly, something like this would be great:
```
flutter channel main
...
Resolving dependencies... Found a total of 13 dependencies to download.
Downloading android tooling [1 out of 13... 2 out of 13... 3 out of 13]
Downloading ios tooling [4 out of 13.... 5 out of 13...]
```
What we like about the above:
* Tell the user how many things we're downloading (in the above example: 13)
* Tell the user the progress in real time (1 out of 13, 2 out of 13, etc, etc)
* Group the things we're downloading into user-friendly and meaningful buckets (e.g. "android tooling")
In this way, we think the user will have a better understanding of:
* how far along they are in the download process
* why we're downloading things
(and, of course, a -v or --verbose option can be used to list each downloaded item one by one)
Contributor guide
Assessment
This issue has not been assessed yet.