feat: First initialization of laravel_echo_client.dart
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
## Dart/Flutter client for Laravel Echo via Socket.IO.
|
||||
---
|
||||
|
||||
To use this plugin, add `flutter_laravel_echo_client` as a dependency in your pubspec.yaml file.
|
||||
|
||||
Import the library.
|
||||
|
||||
```
|
||||
import 'package:share_plus/share_plus.dart';
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
import 'package:flutter_laravel_echo_client/laravel_echo_client.dart';
|
||||
|
||||
final client = LaravelEchoSocketClient(
|
||||
SocketConfig(
|
||||
host: Uri.parse('https://echo.example.com'),
|
||||
token: '<ACCESS_TOKEN>',
|
||||
authHeadersProvider: () => {'Authorization': 'Bearer <ACCESS_TOKEN>'},
|
||||
),
|
||||
);
|
||||
|
||||
await client.connect();
|
||||
|
||||
final chat = client.private('chat.42');
|
||||
|
||||
chat.listen('.chat.message', (event, data) {
|
||||
print('New message: $data');
|
||||
});
|
||||
|
||||
chat.whisper('typing', {'is_typing': true});
|
||||
|
||||
await chat.unsubscribe();
|
||||
client.leave('chat.42');
|
||||
```
|
||||
|
||||
## Basic methods
|
||||
|
||||
| Method | Description |
|
||||
|--------|--------------|
|
||||
| `connect()` | Connect to the server |
|
||||
| `disconnect()` | Disconnect |
|
||||
| `updateAuthToken(token)` | Refresh token |
|
||||
| `channel(name)` | Public channel |
|
||||
| `private(name)` | Private channel |
|
||||
| `presence(name)` | Presence channel |
|
||||
| `leave(name)` | Leave channel |
|
||||
| `stopListening(event)` | Remove event handler |
|
||||
| `unsubscribe()` | Unsubscribe completely |
|
||||
|
||||
|
||||
## Example
|
||||
```
|
||||
class EchoInstance extends ChangeNotifier {
|
||||
EchoInstance(this.tokenStorage);
|
||||
|
||||
final TokenStorage tokenStorage;
|
||||
LaravelEchoSocketClient? _client;
|
||||
String? _userId;
|
||||
|
||||
LaravelEchoSocketClient? get client => _client;
|
||||
|
||||
void init() {
|
||||
final token = tokenStorage.value!;
|
||||
if (_userId != null && token.userId != _userId) _disconnect();
|
||||
if (_client != null) return;
|
||||
|
||||
_userId = token.userId;
|
||||
|
||||
_client = LaravelEchoSocketClient(
|
||||
SocketConfig(
|
||||
host: Uri.parse(ApiConfig.BASE_ECHO_URL),
|
||||
token: token.accessToken,
|
||||
authHeadersProvider: () => {'Authorization': 'Bearer ${token.accessToken}'},
|
||||
),
|
||||
)..connect();
|
||||
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void updateTokenIfNeeded() {
|
||||
final t = tokenStorage.value!;
|
||||
_client?.updateAuthToken(t.accessToken);
|
||||
}
|
||||
|
||||
void disconnect() => _disconnect();
|
||||
|
||||
void _disconnect() {
|
||||
_client?.disconnect();
|
||||
_client = null;
|
||||
_userId = null;
|
||||
}
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user