Flutter Socket Provider

pub package License

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

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.