Flutter WebSocket 在 Web 应用程序中有效,但在 android 模拟器中无效

Flutter WebSocket works in web application but not in android emulator

'最终频道=WebSocketChannel.connect( Uri.parse('wss://echo.websocket.org'), );'

  1. 可以在网络应用程序中创建和连接 但无法在 android 模拟器
  2. 中连接

有两个实现 WebSocket 的库 class - 一个在 Web 上运行,另一个在 Android 上运行。

您可以通过创建一个简单的工厂函数来解决这个问题。您将需要创建几个文件:

websocket_client_factory.dart

export 'websocket_client_factory_null.dart'
    if (dart.library.html) 'websocket_client_factory_web.dart'
    if (dart.library.io) 'websocket_client_factory_server.dart';

websocket_client_factory_null.dart

import 'package:web_socket_channel/web_socket_channel.dart';

WebSocketChannel makeWsClient(String url) {
  throw 'Platform not supported';
}

websocket_client_factory_server.dart

import 'package:web_socket_channel/io.dart';
import 'package:web_socket_channel/web_socket_channel.dart';

WebSocketChannel makeWsClient(String url) =>
    IOWebSocketChannel.connect(url, protocols: ['graphql-ws']);

websocket_client_factory_web.dart

import 'package:web_socket_channel/html.dart';
import 'package:web_socket_channel/web_socket_channel.dart';

WebSocketChannel makeWsClient(String url) =>
    HtmlWebSocketChannel.connect(url, protocols: ['graphql-ws']);

现在,从您的原始文件导入工厂文件,并调用工厂函数:

import 'package:./websocket_client_factory.dart';

...
var channel = makeWsClient(wssUrl);
  1. 在我的项目中WebSocket连接需要认证
  2. 在web应用中自动传递cookies和authentication token 网络套接字连接
  3. 但是在移动应用中我们需要设置cookies和身份验证 手动令牌

当我这样做时解决了我的问题