web_socket_channel 抛出不支持的操作:Platform._version

web_socket_channel throwing Unsupported operation: Platform._version

如何在 dart web 中使用 websocket 包?我有以下代码

import 'package:projectname/data/chat/chat_message.dart';
import 'package:projectname/data/chat/chat_provider.dart';
import 'package:web_socket_channel/io.dart';

import '../path.dart';

class MockChatProvider implements ChatProvider {
  @override
  IOWebSocketChannel connect() {
    return IOWebSocketChannel.connect(Uri.parse(Path.joinChat));
  }

  @override
  sendChatMessage(IOWebSocketChannel channel, ChatMessage message) {
    channel.sink.add(message.toJson());
  }
}

但是当我尝试连接时出现以下错误

Unsupported operation: Platform._version

这个包确实说它支持网络。我做错了什么?

我认为问题在于您正在为网络导入 package:web_socket_channel/io.dart,您应该导入 package:web_socket_channel/web_socket_channel.dart.

软件包回购的相关 GitHub 问题:https://github.com/dart-lang/web_socket_channel/issues/159

只需使用包 package:web_socket_channel/web_socket_channel.dart
TLDR;
我认为你应该使用这个...

import 'package:web_socket_channel/web_socket_channel.dart';

...而不是...

import 'package:web_socket_channel/io.dart';

并将其用作

WebSocketChannel connect() {
...
return WebSocketChannel.connect(Uri.parse(Path.joinChat));
...
sendChatMessage(WebSocketChannel channel, ChatMessage message) {

注意:我没试过!

我认为问题是您找到了正确的包,但是您直接使用 IOWebSocketChannel。这仅适用于 dart:io 可用的地方。该软件包中还有另一个 class,HtmlWebSocketChannel 只能在网络上使用。