Basically, this package is port of official Laravel Echo javascript library. It helps subscribe to channels and listen for events broadcasted from your Laravel app.
API is same as official Echo package, so everything in Official documentation should work.
Three connectors available:
To use with socket.io
, you need to install socket_io_client for your Flutter app.
In your pubspec.yaml
file:
dependencies:
...
socket_io_client: ^0.9.1
laravel_echo:
import socket_io_client
import 'package:socket_io_client/socket_io_client.dart' as IO;
usage
// Create echo instance
Echo echo = new Echo({
'broadcaster': 'socket.io',
'client': IO.io,
});
// Listening public channel
echo.channel('public-channel').listen('PublicEvent', (e) {
print(e);
});
// Listening private channel
// Needs auth. See details how to authorize channel below in guides
echo.private('private-channel').listen('PrivateEvent', (e) {
print(e);
});
// Listening presence channel
// Needs auth. See details how to authorize channel below in guides
echo.join('presence-channel')
.here((users) {
print(users);
}).joining((user) {
print(user);
}).leaving((user) {
print(user);
}).listen('PresenceEvent', (e) {
print(e);
});
// Accessing socket instance
echo.socket.on('connect', (_) => print('connected'));
echo.socket.on('disconnect', (_) => print('disconnected'));
To use with Pusher, you need to install flutter_pusher_client for you Flutter app.
In your pubspec.yaml
file:
dependencies:
...
flutter_pusher_client: ^0.3.1
laravel_echo: ^0.2.5
import flutter_pusher_client
import 'package:flutter_pusher_client/flutter_pusher.dart';
PusherOptions options = PusherOptions(
host: '10.0.2.2',
port: 6001,
encrypted: false,
);
FlutterPusher pusher = FlutterPusher('app', options, enableLogging: true);
Echo echo = new Echo({
'broadcaster': 'pusher',
'client': pusher,
});
echo.channel('public-channel').listen('PublicEvent', (e) {
print(e);
});
socket.on('connect', (_) => print('connect'));
socket.on('disconnect', (_) => print('disconnect'));
Option | Description | Default |
---|---|---|
auth | ||
authEndpoint | /broadcasting/auth | |
broadcaster | socket.io | |
crsfToken | ||
host | Socket host | http://localhost:6001 |
namespace | Event namespace | App.Events |
... | Any other options, passed as socket params |
To authorize channel requests we use Laravel Passport
In our BroadcastServiceProvider.php
we need to enable
Broadcast::routes(['middleware' => ['auth:api']]);
then, when creating Echo
instance include Authorization
header with bearer token
echo = new Echo({
'broadcaster': 'socket.io',
'client': socket,
'auth': {
'headers': {
'Authorization': 'Bearer $token'
}
}
});
Backend used for example app could be found at echo-server
Package by Kakajan SH