0 purchases
socket io client flutter
socket_io_client_flutter #
Now available as a Flutter package from pub.dev.
2.x.x version has sound null safety. It can be included in pubspec.yaml as:
dependencies:
socket_io_client_flutter: ^2.0.0
copied to clipboard
Dart 3 requires sound null safety and does not support no null safety and unsound (mixed) null safety. Flutter versions that use Dart 3 will only work with socket_io_client_flutter 2.x.x. Flutter versions that use Dart 2.12 and above should work with socket_io_client_flutter 2.x.x, too.
1.x.x version does not have null safety and supports no null safety and unsound (mixed) null safety. It can be included in pubspec.yaml as:
dependencies:
socket_io_client_flutter: ^1.0.2
copied to clipboard
Dart 1 and Dart 2 require no null safety. Dart 2.12 and above supports no null safety and both unsound (mixed) and sound null safety. Some earlier Flutter versions that use Dart 2.12 and above run socket_io_client_flutter 1.x.x automatically but more recent Flutter versions that use Dart 2.12 and above require "--no-sound-null-safety" argument to run socket_io_client_flutter 1.x.x.
Original release comment: Port socket.io-client-dart to Flutter without null safety, compatible with Flutter 1.22.6 (no null safety) and Flutter 3.0.2 (supports mixed null safety). Add harmless long-polling extensions for xibbit.
In 1.x.x and 2.x.x versions, it is included in code as:
import 'package:socket_io_client_flutter/socket_io_client_flutter.dart';
copied to clipboard
socket.io-client-dart #
Port of awesome JavaScript Node.js library - Socket.io-client v2.0.1~v3.0.3 - in Dart
Version info: #
socket.io-client-dart
Socket.io Server
v0.9.* ~ v1.*
v2.*
v2.*
v3.* & v4.*
Usage #
Dart Server
import 'package:socket_io/socket_io.dart';
main() {
// Dart server
var io = 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);
}
copied to clipboard
Dart Client
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(_));
}
copied to clipboard
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();
copied to clipboard
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.
Update the extra headers #
Socket socket = ... // Create socket.
socket.io.options['extraHeaders'] = {'foo': 'bar'}; // Update the extra headers.
socket.io..disconnect()..connect(); // Reconnect the socket manually.
copied to clipboard
Emit with acknowledgement #
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") ;
}
});
});
copied to clipboard
Socket connection events #
These events can be listened on.
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');
});
copied to clipboard
Acknowledge with the socket server that an event has been received. #
socket.on('eventName', (data) {
final dataList = data as List;
final ack = dataList.last as Function;
ack(null);
});
copied to clipboard
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,
IO.Socket socket = IO.io('http://localhost:3000',
OptionBuilder()
.setTransports(['websocket']) // for Flutter or Dart VM
.setExtraHeaders({'foo': 'bar'}) // optional
.build());
copied to clipboard
Usage with stream and streambuilder in Flutter #
import 'dart:async';
// STEP1: Stream setup
class StreamSocket{
final _socketResponse= StreamController<String>();
void Function(String) get addResponse => _socketResponse.sink.add;
Stream<String> get getResponse => _socketResponse.stream;
void dispose(){
_socketResponse.close();
}
}
StreamSocket streamSocket =StreamSocket();
//STEP2: Add this function in main function in main.dart file and add incoming data to the stream
void connectAndListen(){
IO.Socket socket = IO.io('http://localhost:3000',
OptionBuilder()
.setTransports(['websocket']).build());
socket.onConnect((_) {
print('connect');
socket.emit('msg', 'test');
});
//When an event recieved from server, data is added to the stream
socket.on('event', (data) => streamSocket.addResponse);
socket.onDisconnect((_) => print('disconnect'));
}
//Step3: Build widgets with streambuilder
class BuildWithSocketStream extends StatelessWidget {
const BuildWithSocketStream({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
child: StreamBuilder(
stream: streamSocket.getResponse ,
builder: (BuildContext context, AsyncSnapshot<String> snapshot){
return Container(
child: snapshot.data,
);
},
),
);
}
}
copied to clipboard
Troubleshooting #
Cannot connect "https" server or self-signed certificate server #
Refer to https://github.com/dart-lang/sdk/issues/34284 issue.
The workround is to use the following code provided by @lehno on #84
class MyHttpOverrides extends HttpOverrides {
@override
HttpClient createHttpClient(SecurityContext? context) {
return super.createHttpClient(context)
..badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
}
}
void main() {
HttpOverrides.global = MyHttpOverrides();
runApp(MyApp());
}
copied to clipboard
Memory leak issues in iOS when closing socket. #
Refer to https://github.com/rikulo/socket.io-client-dart/issues/108 issue.
Please use socket.dispose() instead of socket.close() or socket.disconnect() to solve the memory leak issue on iOS.
Connect_error on MacOS with SocketException: Connection failed #
Refer to https://github.com/flutter/flutter/issues/47606#issuecomment-568522318 issue.
By adding the following key into the to file *.entitlements under directory macos/Runner/
<key>com.apple.security.network.client</key>
<true/>
copied to clipboard
For more details, please take a look at https://flutter.dev/desktop#setting-up-entitlements
Can't connect socket server on Flutter with Insecure HTTP connection #
Refer to https://flutter.dev/docs/release/breaking-changes/network-policy-ios-android
The HTTP connections are disabled by default on iOS and Android, so here is a workaround to this issue,
which mentioned on stack overflow
Notes to Contributors #
Fork socket.io-client-dart #
If you'd like to contribute back to the core, you can fork this repository and send us a pull request, when it is ready.
If you are new to Git or GitHub, please read this guide first.
Who Uses #
Quire - a simple, collaborative, multi-level task management tool.
KEIKAI - a web spreadsheet for Big Data.
Socket.io Dart Server #
socket.io-dart
Contributors #
Thanks @felangel for https://github.com/rikulo/socket.io-client-dart/issues/7
Thanks @Oskang09 for https://github.com/rikulo/socket.io-client-dart/issues/21
Thanks @bruce3x for https://github.com/rikulo/socket.io-client-dart/issues/25
Thanks @Kavantix for https://github.com/rikulo/socket.io-client-dart/issues/26
Thanks @luandnguyen for https://github.com/rikulo/socket.io-client-dart/issues/59
Thanks @jorgefspereira for https://github.com/rikulo/socket.io-client-dart/pull/177
Thanks @fzyzcjy for https://github.com/rikulo/socket.io-client-dart/pull/188
Thanks @darwin-morocho for https://github.com/rikulo/socket.io-client-dart/pull/189
Thanks @chatziko for https://github.com/rikulo/socket.io-client-dart/pull/237
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.