Repository: flutter
Issue: Switching channels and downloading artifacts could tell the user how far along the process is
Labels: tool,a: first hour,P3,team-tool,triaged-tool

### 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)