flutter_socket_provider 1.0.0
flutter_socket_provider: ^1.0.0 copied to clipboard
A Flutter package for WebSocket communication with automatic reconnection, multi-channel support, and server status tracking. Supports both Socket.IO and native WebSocket implementations.
Flutter Socket Provider #
A Flutter package for WebSocket communication with automatic reconnection, multi-channel support, and server status tracking. Supports both Socket.IO and native WebSocket implementations.
Features #
- Connection management with intelligent automatic reconnection
- Real-time event emission and listening
- Multi-channel and multi-endpoint support
- Real-time data processing with reactive notifications
- Debug mode for detailed logging
- Server status tracking per endpoint
- Two implementations for different use cases
Available Implementations #
| Implementation | Use Case | Protocol |
|---|---|---|
Socket.IO (FlutterSocketProvider) |
Advanced Socket.IO features | Socket.IO over WebSockets |
WebSocket Channel (FlutterWSocketProvider) |
Native WebSocket servers | WebSockets (RFC 6455) |
Installation #
Add this to your pubspec.yaml:
dependencies:
flutter_socket_provider: ^1.0.0
Then run:
flutter pub get
Usage #
Socket.IO Implementation #
For applications requiring advanced Socket.IO features:
import 'package:flutter_socket_provider/flutter_socket_provider.dart';
// Create instances
final socketDataProvider = SocketDataProvider();
final socketProvider = FlutterSocketProvider(
socketDataProvider: socketDataProvider,
debugMode: true,
);
// Connect
await socketProvider.inicializaEscucha(
idChannel: 'channel-id',
token: 'your-auth-token',
endpointSocket: 'https://socket.example.com',
);
// Listen for changes
socketDataProvider.addListener(() {
print('Data received: ${socketDataProvider.dataReceived}');
});
WebSocket Channel Implementation #
For direct communication with native WebSocket servers:
import 'package:flutter_socket_provider/flutter_socket_provider.dart';
// Create instances
final wSocketDataProvider = WSocketDataProvider();
final wSocketProvider = FlutterWSocketProvider(
wSocketDataProvider: wSocketDataProvider,
);
// Connect
await wSocketProvider.inicializaEscucha(
idChannel: 'channel-123',
token: 'your-auth-token',
endpointSocket: 'wss://websocket.example.com',
);
// Listen for changes
wSocketDataProvider.addListener(() {
final status = wSocketDataProvider.getServerStatus(
endpointSocket: 'wss://websocket.example.com'
);
print('Status: $status');
print('Data: ${wSocketDataProvider.dataReceived}');
});
Sending Messages #
Socket.IO
final result = await socketProvider.sendMensajeSocketService(
endpointSocket: 'https://socket.example.com',
event: 'customEvent',
payload: {'message': 'Hello from client'},
);
WebSocket Channel
final result = await wSocketProvider.sendMensajeSocketService(
endpointSocket: 'wss://websocket.example.com',
idChannel: 'channel-123',
payload: {'action': 'updateLocation', 'lat': -34.6037, 'lng': -58.3816},
);
Channel Management #
Leave a specific channel
// Socket.IO
await socketProvider.leaveRoom(
endpointSocket: 'https://socket.example.com',
room: 'channel-id',
);
// WebSocket Channel
await wSocketProvider.leaveRoom(
endpointSocket: 'wss://websocket.example.com',
idChannel: 'channel-123',
);
Disconnection #
// Disconnect specific endpoint
socketProvider.disconnect(endpointSocket: 'https://socket.example.com');
// Disconnect all
socketProvider.disconnect();
Server Status #
Track connection status per endpoint:
final status = socketDataProvider.getServerStatus(
endpointSocket: 'https://socket.example.com'
);
// Possible values:
// - SocketServerStatus.connecting
// - SocketServerStatus.online
// - SocketServerStatus.offline
// - SocketServerStatus.failed
// - SocketServerStatus.reconnecting
// - SocketServerStatus.reconnectFailed
Architecture #
lib/
├── flutter_socket_provider.dart # Socket.IO Provider
├── flutter_wsocket_provider.dart # WebSocket Channel Provider
├── socket_data_provider.dart # Socket.IO Data Provider
└── wsocket_data_provider.dart # WebSocket Data Provider
Dependencies #
- socket_io_client - Socket.IO client
- web_socket_channel - WebSocket channel
- flutter_models_provider - Shared models
License #
Copyright 2024 Roble Sistemas SRL
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.