βš™οΈ Converse Chat Adapters

pub package GitHub Repo License: MIT

Converse Chat Adapters form the infrastructure layer of the Converse Chat SDK.
They connect the clean domain layer from converse_chat_core to real-world backends like Firebase Firestore, Realtime Database, and Firebase Storage.


πŸš€ Overview

This package provides Firebase-based repository implementations for the abstract interfaces defined in converse_chat_core.
It handles message persistence, user management, presence tracking, and file uploads.

App / UI
   ↓
Converse Chat SDK
   ↓
Converse Chat Adapters (Firebase, REST)
   ↓
Converse Chat Core
   ↓
Firebase / REST / Custom backend

It includes:

  • πŸ”₯ Firebase Chat Repository β€” sending, receiving, and syncing messages
  • πŸ‘€ Firebase User Repository β€” managing user metadata
  • 🟒 Firebase Presence Repository β€” tracking online/offline users
  • πŸ“Ž Firebase Attachment Repository β€” file and media uploads
  • βš™οΈ Adapter Initializer β€” handles Firebase setup before use
  • 🧩 Collection Helpers β€” centralized Firestore path and collection naming

🧠 Architecture

Follows the Clean Architecture structure:

+------------------------------+
|  Presentation Layer (UI/SDK) | ← converse_chat_sdk
+------------------------------+
|  Domain Layer (Use Cases)    | ← converse_chat_core
+------------------------------+
|  Data Layer / Adapters       | ← converse_chat_adapters
+------------------------------+
|  Infrastructure (Firebase)   | ← External systems
+------------------------------+

This package provides the concrete implementations of:

  • IChatRepository
  • IUserRepository
  • IAttachmentRepository
  • IPresenceRepository

defined in the core domain layer.


🧩 Key Features

βœ… Implements all domain repositories from core
βœ… Firebase Realtime Database + Firestore support
βœ… Presence tracking using onDisconnect() (mobile)
βœ… Attachment uploads via Firebase Storage
βœ… Centralized Firestore collection management
βœ… Adapter initializer for clean setup
βœ… Easily replaceable adapters for REST or Supabase backends


🧱 Folder Structure

lib/
β”œβ”€ converse_chat_adapters.dart        # βœ… Public entrypoint (exports all implementations)
└─ src/
    β”œβ”€ repositories/
    β”‚   β”œβ”€ firebase_chat_repository.dart        # Message send/receive/sync logic
    β”‚   β”œβ”€ firebase_user_repository.dart        # User management
    β”‚   β”œβ”€ firebase_presence_repository.dart    # Online/offline presence
    β”‚   β”œβ”€ firebase_attachment_repository.dart  # File upload/download
    β”‚   └─ ...                                 # (Future) additional integrations
    β”‚
    β”œβ”€ firebase_chat_adapter.dart               # Combines all Firebase repositories
    β”œβ”€ firebase_collections.dart                # Defines Firestore collection names
    β”œβ”€ adapter_initializer.dart                 # Handles Firebase initialization
    └─ ...                                     # (Future) REST or WebSocket adapters

βš™οΈ Initialization Example

Although converse_chat_sdk initializes adapters automatically,
you can use this package directly for testing or custom setups.

import 'package:converse_chat_adapters/converse_chat_adapters.dart';

Future<void> main() async {
  // Initialize Firebase and adapters
  await AdapterInitializer.initializeFirebase();

  // Create a chat repository instance
  final chatRepo = FirebaseChatRepository();

  // Send a message
  await chatRepo.sendMessage(
    chatId: 'chat_123',
    senderId: 'user_001',
    text: 'Hello world πŸ‘‹',
  );
}

🧰 Installation

Typically, you don’t install this package directly.
It’s automatically included when using converse_chat_sdk.

However, you can also add it manually for experimental setups:

dependencies:
  converse_chat_adapters: ^1.0.0

Then import it:

import 'package:converse_chat_adapters/converse_chat_adapters.dart';

Package Description
converse_chat_core Core domain models and use cases
converse_chat_sdk Main SDK β€” includes adapters and exposes developer-friendly API

🧠 Topics

firebase, chat, messaging, realtime, sdk, clean-architecture, flutter, presence, storage, core


πŸͺͺ License

This project is licensed under the MIT License.


πŸ‘¨β€πŸ’» Author

Rajendra Bisht
GitHub @rbishtdev