Closed shajin-screl closed 1 month ago
This works fine when I remove notifyListeners();
from serverSocket?.ws('/socket', (socket) { print('Client connected: ${socket.id}');
socket.onMessage((message) {
print("Message from client : $message");
// Send the message back to the client
socket.broadcast('Message From server : $message');
socket.emitToRoom('connected', 'dev-group', 'User ${socket.id} connected to dev-group');
});
// rooms support
socket.join('dev-group');
socket.emitToRoom('connected', 'dev-group', 'User ${socket.id} connected to dev-group');
clientsCount = socket.length;
notifyListeners();
nanoSocket = socket;
});
But it is required me to rebuild flutter's ui to reflects changes.
import 'dart:io'; import 'package:dine_in_dia/helpers/sync/local_network_helpers.dart'; import 'package:flutter/material.dart'; import 'package:server_nano/server_nano.dart' as Server; import 'package:web_socket_client/web_socket_client.dart' as WebSocket;
class LocalNetwork extends ChangeNotifier { WebSocket.WebSocket? clientSocket; Server.Server? serverSocket; static Server.NanoSocket? nanoSocket; bool isWaiting = false; static int clientsCount = 0;
int get connectedClients => clientsCount; Server.NanoSocket? get nanoSocketInstance => nanoSocket;
Future init() async {
setIsWaiting(true);
List discoveredIPs = await NetworkHelpers.discoverLocalDevices(subnet: await NetworkHelpers.getLocalSubNet());
if (discoveredIPs.isEmpty) {
serverSocket = Server.Server();
notifyListeners();
//* Start the server
}
void sendMessage(String message) { if (clientSocket != null) { clientSocket!.send(message); } else { nanoSocket?.sendToAll("From Server: $message"); } }
void notifyOthers({String? title, String? message, String? type}) {} void setIsWaiting(bool value, {bool isError = false}) async { isWaiting = value; isError = isError;
}
void stopServer() { nanoSocket?.close(); nanoSocket = null;
} }
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Invalid argument(s): Illegal argument in isolate message: object is unsendable - Library:'dart:async' Class: _AsyncCompleter@4048458 (see restrictions listed at
SendPort.send()
documentation for more information) <- Instance of 'WidgetsFlutterBinding' (from package:flutter/src/widgets/binding.dart) <- Instance of '_BindingPipelineManifold' (from package:flutter/src/rendering/binding.dart) <- _manifold in Instance of 'PipelineOwner' (from package:flutter/src/rendering/object.dart) <- Instance of 'RenderConstrainedBox' (from package:flutter/src/rendering/proxy_box.dart) <- Instance of 'SingleChildRenderObjectElement' (from package:flutter/src/widgets/framework.dart)