import 'dart:async'; import 'package:web_socket_channel/web_socket_channel.dart'; class WebSocketService { static final WebSocketService _instance = WebSocketService._(); factory WebSocketService() => _instance; WebSocketService._(); WebSocketChannel? _channel; final _messageController = StreamController.broadcast(); final _errorController = StreamController.broadcast(); Stream get messages => _messageController.stream; Stream get errors => _errorController.stream; bool get isConnected => _channel != null; void connect(String url) { if (_channel != null) return; _channel = WebSocketChannel.connect(Uri.parse(url)); _channel!.stream.listen( (message) => _messageController.add(message.toString()), onError: (error) => _errorController.add(error), onDone: () => _errorController.add('WebSocket closed'), ); } void send(String message) { if (_channel == null) { _errorController.add('WebSocket not connected'); return; } _channel!.sink.add(message); } void disconnect() { _channel?.sink.close(); _channel = null; } }