tree 5a11332c416194e4065461261164313842b46b53
parent e465349a3fc319580f1d7a131265d86c749347f5
author James D. Lin <jamesderlin@users.noreply.github.com> 1599770433 -0700
committer GitHub <noreply@github.com> 1599770433 -0700
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsBcBAABCAAQBQJfWo9BCRBK7hj4Ov3rIwAAdHIIAJwb4bboMdVWRq+Z7m7n1mvB
 NZTX7wLw+94FqC2AM+orL37C3AEPqEbm9N1B88Xw8Oxx+aJK7HsfviRCB1G/RYLJ
 UqSpcTpMsEOJTKyNfS8c3Z1CDhgYZAZZqJCqLu93BYMy979Xwvbro3HaxahKqq+U
 Chd4AmEYieH4TTwz0FZe8xilPT0bI98l+getOghndeaJoABUVEOAcC2sP19Qb2lD
 +W4cRuJpjSiaFoq+FWOXly4o2tlTF7N3t+PW4NXnmmx8+crZS4zHZx7OuLuGooiY
 IiZvAaQwQME+MwYmbj7X0g38nycqhsynz+otz9tq4KBioTSHzFv2iMt/+GEK9Fc=
 =SZiV
 -----END PGP SIGNATURE-----
 

Make ForwardingFile.openRead return Stream<List<int>> again (#168)

`ForwardingFile.openRead` was changed to return a `Stream<Uint8List>`
instead of a `Stream<List<int>>` in preparation for making a
corresponding change to `dart:io`.  However, that `dart:io` change
caused more breakage than expected and was reverted without making
corresponding reverts to `package:file`.  I don't think that it makes
sense for `ForwardingFile` to return something different than its
delegate.

Without this change, the following code will fail with `package:file`
but not with `dart:io`:

```dart
await someFile.openRead().transform(utf8.decoder);
```

and unintuitively requires adding `.cast<List<int>>()` before
the transformation.

Bonus cleanup: since dart:io's `File.readAsBytes`/`readAsBytesSync`
are declared to return `Uint8List`, `ForwardingFile` should no longer
need to make explicit `Uint8List` copies.