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.