问题描述
我正在创建一个 Web 套接字流广播,可在 Flutter 应用程序中的多个页面上访问该广播。代码如下
class MyApp extends StatelessWidget {
static IOWebSocketChannel channel =
IOWebSocketChannel.connect(HttpService.wsUrl);
static Stream stream = channel.stream.asbroadcastStream();
在其他页面上,我正在访问此频道并使用
onConnected() async {
MyApp.stream.listen((e) async {
onMessage(e);
},onDone: () async {
debugPrint('ws channel closed');
await ondisconnected();
},onError: (error) async {
// counter = 0;
debugPrint('ws error $error');
await ondisconnected();
});
}
void onMessage(data) async {
//To Do
await parseTCPResponse(jsonDecode);
}
//Reconnect websocket in 1 seconds
ondisconnected() async {
widget.channel.sink.close();
print("disconnected,trying again in 2s");
new Timer(new Duration(seconds: 2),() async {
await connect();
});
}
connect() async {
try {
IOWebSocketChannel channel = IOWebSocketChannel.connect(HttpService.wsUrl);
Stream stream = channel.stream.asbroadcastStream();
await Future.delayed(Duration(milliseconds: 1000));
await connectionRequest();
} catch (e) {
print("Error! can not connect WS connectWs " + e.toString());
await Future.delayed(Duration(milliseconds: 1000));
IOWebSocketChannel channel = IOWebSocketChannel.connect(HttpService.wsUrl);
Stream stream = channel.stream.asbroadcastStream();
await connectionRequest();
}
}
@override
void dispose() {
MyApp.channel.sink.close();
dispose();
}
使用上面的代码,我曾经使用 streamBuilder 将所有其他小部件与上面创建的公共流连接起来。这里的问题是在尝试注销并重新登录时,我使用了上面的 connect() 方法来初始化通道流。这样做时出现如下错误
I/Flutter (15477):发送连接请求 I/Flutter (15477):错误!无法连接 WS connectWs 错误状态:关闭后无法添加事件 I/Flutter (15477):已发送连接请求 E/Flutter (15477): [ERROR:Flutter/lib/ui/ui_dart_state.cc(177)] 未处理异常:状态错误:关闭后无法添加事件 E/Flutter (15477): #0 _StreamController.add (dart:async/stream_controller.dart:623:24)
有什么地方出错了吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)