# socket.io-client-dart **Repository Path**: hzbsccd/socket.io-client-dart ## Basic Information - **Project Name**: socket.io-client-dart - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-10-11 - **Last Updated**: 2021-10-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # socket.io-client-dart Port of awesome JavaScript Node.js library - [Socket.io-client v2.0.1~v3.0.3](https://github.com/socketio/socket.io-client) - in Dart ### Version info: | socket.io-client-dart | Socket.io Server -------------------|---------------- `v0.9.*` ~ `v1.* ` | `v2.*` `v2.*` | `v3.*` & `v4.*` ## Usage **Dart Server** ```dart import 'package:socket_io/socket_io.dart'; main() { // Dart server var io = new Server(); var nsp = io.of('/some'); nsp.on('connection', (client) { print('connection /some'); client.on('msg', (data) { print('data from /some => $data'); client.emit('fromServer', "ok 2"); }); }); io.on('connection', (client) { print('connection default namespace'); client.on('msg', (data) { print('data from default => $data'); client.emit('fromServer', "ok"); }); }); io.listen(3000); } ``` **Dart Client** ```dart import 'package:socket_io_client/socket_io_client.dart' as IO; main() { // Dart client IO.Socket socket = IO.io('http://localhost:3000'); socket.onConnect((_) { print('connect'); socket.emit('msg', 'test'); }); socket.on('event', (data) => print(data)); socket.onDisconnect((_) => print('disconnect')); socket.on('fromServer', (_) => print(_)); } ``` ### Connect manually To connect the socket manually, set the option `autoConnect: false` and call `.connect()`. For example,
Socket socket = io('http://localhost:3000',
OptionBuilder()
.setTransports(['websocket']) // for Flutter or Dart VM
.disableAutoConnect() // disable auto-connection
.setExtraHeaders({'foo': 'bar'}) // optional
.build()
);
socket.connect();
Note that `.connect()` should not be called if `autoConnect: true`
(by default, it's enabled to true), as this will cause all event handlers to get registered/fired twice. See [Issue #33](https://github.com/rikulo/socket.io-client-dart/issues/33).
### Update the extra headers
```dart
Socket socket = ... // Create socket.
socket.io.options['extraHeaders'] = {'foo': 'bar'}; // Update the extra headers.
socket.io..disconnect()..connect(); // Reconnect the socket manually.
```
### Emit with acknowledgement
```dart
Socket socket = ... // Create socket.
socket.onConnect((_) {
print('connect');
socket.emitWithAck('msg', 'init', ack: (data) {
print('ack $data') ;
if (data != null) {
print('from server $data');
} else {
print("Null") ;
}
});
});
```
### Socket connection events
These events can be listened on.
```dart
const List EVENTS = [
'connect',
'connect_error',
'connect_timeout',
'connecting',
'disconnect',
'error',
'reconnect',
'reconnect_attempt',
'reconnect_failed',
'reconnect_error',
'reconnecting',
'ping',
'pong'
];
// Replace 'onConnect' with any of the above events.
socket.onConnect((_) {
print('connect');
});
```
### Acknowledge with the socket server that an event has been received.
```dart
socket.on('eventName', (data) {
final dataList = data as List;
final ack = dataList.last as Function;
ack(null);
});
```
## Usage (Flutter)
In Flutter env. not (Flutter Web env.) it only works with `dart:io` websocket,
not with `dart:html` websocket or Ajax (XHR), so in this case
you have to add `setTransports(['websocket'])` when creates the socket instance.
For example,
```dart
IO.Socket socket = IO.io('http://localhost:3000',
OptionBuilder()
.setTransports(['websocket']) // for Flutter or Dart VM
.setExtraHeaders({'foo': 'bar'}) // optional
.build());
```
## Usage with stream and streambuilder in Flutter
```dart
import 'dart:async';
// STEP1: Stream setup
class StreamSocket{
final _socketResponse= StreamController