๐Ÿ“ก 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.

Libraries

pusher_client_ego