๐ก PusherClient
A lightweight Flutter package that brings Pusher Channels real-time functionality to Flutter apps, inspired by the official pusher-js library.
๐ Features
- โ Connect to Pusher via WebSocket
- ๐ข Subscribe to public, private, and presence channels
- ๐ฌ Bind to custom and system events
- ๐ Support for authenticated channels
- ๐ Auto-handles
pusher:connection_established,subscription_succeeded, etc. - ๐ Trigger client events on private channels (e.g.,
client-typing) - ๐งโ๐คโ๐ง Presence channels with user tracking
๐ฆ Installation
dependencies:
pusher_client:
git:
url: https://github.com/yourusername/pusher_client.git
๐ ๏ธ Getting Started
1. Import and initialize
import 'package:pusher_client/pusher_client_ego.dart';
final pusher = PusherClient(
key: 'YOUR_PUSHER_KEY',
cluster: 'YOUR_CLUSTER',
authEndpoint: 'https://yourserver.com/pusher/auth', // Optional
headers: {
'Authorization': 'Bearer YOUR_TOKEN', // Optional
},
);
await pusher.connect();
2. Subscribe to a channel
final channel = pusher.subscribe('public-chat');
channel.bind('new-message', (event) {
print('๐ฉ Message: ${event.data}');
});
3. Trigger a client event (private channels only)
final privateChannel = pusher.subscribe('private-room');
๐ Auth for Private & Presence Channels
Your backend must return a JSON object like this:
For Private Channels:
{
"auth": "your_app_key:signature"
}
For Presence Channels:
{
"auth": "your_app_key:signature",
"channel_data": "{\"user_id\": \"123\", \"user_info\": {\"name\": \"Alice\"}}"
}
Use Pusher's official server SDKs to generate these responses:
๐งช Example main.dart
void main() async {
final pusher = PusherClient(
key: 'APP_KEY',
cluster: 'APP_CLUSTER',
authEndpoint: 'https://your-auth-endpoint',
);
await pusher.connect();
final channel = pusher.subscribe('public-chat');
channel.bind('new-message', (event) {
print('Received: ${event.data}');
});
await Future.delayed(Duration(days: 365)); // Keep alive
}
๐ API Reference
| Method | Description |
|---|---|
connect() |
Establishes the WebSocket connection |
subscribe(channel) |
Subscribes to a channel |
bind(event, handler) |
Binds a callback to a given event |
trigger(event, data) |
Sends a client event (private only) |
โ ๏ธ Limitations
- This is a simplified version and doesn't include encryption or full presence features like member lists yet.
- Ensure your auth server signs correctly for private/presence channels.
๐ License
MIT ยฉ Omar Aly
๐ Acknowledgments
Inspired by the official pusher-js and pusher-http libraries.