Flutter HTTP SSE Client

A Flutter package for handling Server-Sent Events (SSE) connections over the http package. This package allows you to establish SSE connections, receive real-time updates from the server, and handle automatic reconnections. SSE lifecycle SSE vs Request/Response

Features

  • Establish SSE connections with custom request parameters.
  • Automatically parses SSE responses.
  • Supports retrying on connection failures.
  • Handles stream disconnections gracefully.
  • Allow multiple connections.
  • Allows dynamic deserialization of received data.

Installation

Add this package to your pubspec.yaml:

dependencies:
  flutter_http_sse:
    path: https://github.com/ElshiatyTube/flutter_http_sse.git

Usage

1. Create an SSE Request

import 'package:flutter_http_sse/model/sse_request.dart';

final request = SSERequest(
  requestType: SSERequestType.GET,
  url: Uri.parse("https://your-sse-endpoint.com/stream"),
  headers: {"Authorization": "Bearer YOUR_TOKEN"},
  onData: (data) => print("Received: $data"),
  onError: (error) => print("Error: $error"),
  onDone: () => print("Stream closed"),
  retry: true, // Enables automatic reconnection
);

2. Connect to SSE Server

import 'package:flutter_http_sse/service/sse_client.dart';

final sseClient = SSEClient();
final Stream<SSEResponse> stream = sseClient.connect("connectionId", request);

stream.listen(
  (SSEResponse response) {
    print("Received event: ${response.event}, data: ${response.data}");
  },
  onError: (error) => print("SSE Error: $error"),
  onDone: () => print("SSE Connection Closed"),
);

3. Close SSE Connection

sseClient.close(connectionId: "connectionId");

SSEResponse Structure

class SSEResponse {
  final String id;
  final String event;
  final String comment;
  final dynamic data;
  final String rawResponse;
}

Error Handling & Retries

  • If the server responds with a 5xx status code, the client will attempt to reconnect automatically.
  • Retry attempts follow an exponential backoff strategy with a maximum of 5 retries.
  • If retries are disabled, the connection will be closed on failure.

Contributions

Contributions are welcome! Feel free to submit issues and pull requests.

License

This project is licensed under the MIT License. Feel free to modify and use it in your applications.


Author: Youssef Elshiaty