Handle non-int multichannel message IDs (dart-lang/stream_channel#80)
When running in wasm, a number in a `List` will be parsed as a `double`.
On the web the `as int` cast succeeds, but in dart2wasm it fails. Cast
to `num` and use `toInt()` to more reliably get an `int` value.
diff --git a/pkgs/stream_channel/CHANGELOG.md b/pkgs/stream_channel/CHANGELOG.md
index 0f8da15..badeaf7 100644
--- a/pkgs/stream_channel/CHANGELOG.md
+++ b/pkgs/stream_channel/CHANGELOG.md
@@ -3,6 +3,9 @@
* Require Dart 2.14
* Migrate to `package:lints`.
* Populate the pubspec `repository` field.
+* Handle multichannel messages where the ID element is a `double` at runtime
+ instead of an `int`. When reading an array with `dart2wasm` numbers within the
+ array are parsed as `double`.
## 2.1.0
diff --git a/pkgs/stream_channel/lib/src/multi_channel.dart b/pkgs/stream_channel/lib/src/multi_channel.dart
index e1e25ea..a78ddbc 100644
--- a/pkgs/stream_channel/lib/src/multi_channel.dart
+++ b/pkgs/stream_channel/lib/src/multi_channel.dart
@@ -141,7 +141,7 @@
onDone: () => _closeChannel(0, 0));
_innerStreamSubscription = _inner!.stream.cast<List>().listen((message) {
- var id = message[0] as int;
+ var id = (message[0] as num).toInt();
// If the channel was closed before an incoming message was processed,
// ignore that message.