Skip to content

Latest commit

ย 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Cross-Device Sync Ecosystem

A Flutter-based cross-device ecosystem app that syncs clipboard, controls media, and supports file transfer and screen sharing across macOS, Windows, and Android.

๐Ÿ—๏ธ Architecture

This project follows Clean Architecture principles with a monorepo structure:

cross_device_sync/
โ”œโ”€โ”€ apps/
โ”‚   โ”œโ”€โ”€ mobile/          # Android app
โ”‚   โ””โ”€โ”€ desktop/         # macOS/Windows app
โ”œโ”€โ”€ packages/
โ”‚   โ”œโ”€โ”€ core/           # Shared utilities & models
โ”‚   โ”œโ”€โ”€ clipboard_sync/ # Clipboard synchronization
โ”‚   โ”œโ”€โ”€ media_control/  # Media control (future)
โ”‚   โ”œโ”€โ”€ file_transfer/  # File transfer (future)
โ”‚   โ””โ”€โ”€ networking/     # WebSocket + Firebase (future)
โ””โ”€โ”€ melos.yaml          # Monorepo management

Clean Architecture Layers

Each feature module follows Clean Architecture:

  • Domain Layer: Business logic, entities, use cases, repository interfaces
  • Data Layer: Repository implementations, data sources (local/remote)
  • Presentation Layer: UI widgets, state management (Riverpod)
  • Platform Layer: Platform channels for native functionality

๐Ÿš€ Features

โœ… Implemented

  • Clipboard Sync: Real-time clipboard synchronization across devices
  • Clean Architecture: Modular, testable, maintainable code structure
  • Dual Sync Modes: Local (WebSocket + mDNS) and Cloud (Firebase)
  • Cross-Platform: Flutter apps for mobile and desktop
  • State Management: Riverpod for reactive state management
  • Unit Tests: Comprehensive test coverage

๐Ÿ”„ Coming Soon

  • Media Control: Control media playback across devices
  • File Transfer: WebRTC-based file sharing
  • Screen Share: Real-time screen sharing with WebRTC + FFmpeg
  • Device Discovery: Automatic device discovery via mDNS

๐Ÿ› ๏ธ Tech Stack

  • Framework: Flutter 3.10+
  • Language: Dart 3.0+
  • State Management: Riverpod
  • Architecture: Clean Architecture
  • Networking: WebSocket (local) + Firebase (cloud)
  • Code Generation: Freezed, JSON Serializable
  • Testing: Unit tests with Mockito
  • Linting: Very Good Analysis

๐Ÿ“ฆ Getting Started

Prerequisites

  • Flutter 3.10+
  • Dart 3.0+
  • Melos (for monorepo management)

Installation

  1. Clone the repository

    git clone <repository-url>
    cd cross_device_sync
  2. Install Melos

    dart pub global activate melos
  3. Bootstrap the project

    melos bootstrap
  4. Generate code

    melos run build_runner

Running the Apps

Mobile App (Android)

cd apps/mobile
flutter run

Desktop App (macOS/Windows)

cd apps/desktop
flutter run -d macos  # or -d windows

๐Ÿงช Testing

Run all tests:

melos run test

Run tests for specific package:

cd packages/clipboard_sync
flutter test

๐Ÿ“ฑ Usage Example

Clipboard Sync Widget

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:clipboard_sync/clipboard_sync.dart';

class MyApp extends ConsumerWidget {
  @override
  Widget build(BuildContext context, WidgetRef ref) {
    return MaterialApp(
      home: Scaffold(
        body: ClipboardSyncWidget(), // Ready-to-use widget
      ),
    );
  }
}

Manual Clipboard Control

// Start monitoring clipboard changes
final controller = ref.read(clipboardControllerProvider.notifier);
await controller.startMonitoring();

// Sync current clipboard
await controller.syncCurrentClipboard();

// Set clipboard content
await controller.setClipboard("Hello from another device!");

// Listen to clipboard stream
ref.listen(clipboardStreamProvider, (previous, next) {
  next.when(
    data: (content) => print('New clipboard: ${content.content}'),
    loading: () => print('Loading...'),
    error: (error, _) => print('Error: $error'),
  );
});

๐Ÿ›๏ธ Module Structure

Clipboard Sync Module

packages/clipboard_sync/
โ”œโ”€โ”€ lib/
โ”‚   โ”œโ”€โ”€ src/
โ”‚   โ”‚   โ”œโ”€โ”€ domain/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ entities/           # ClipboardContent
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ repositories/       # Abstract interfaces
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ usecases/          # Business logic
โ”‚   โ”‚   โ”œโ”€โ”€ data/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ repositories/       # Repository implementations
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ datasources/       # Local/Remote data sources
โ”‚   โ”‚   โ”œโ”€โ”€ presentation/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ providers/         # Riverpod providers
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ widgets/           # UI components
โ”‚   โ”‚   โ””โ”€โ”€ platform/
โ”‚   โ”‚       โ””โ”€โ”€ clipboard_platform_channel.dart
โ”‚   โ””โ”€โ”€ clipboard_sync.dart        # Public API
โ””โ”€โ”€ test/                          # Unit tests

๐Ÿ”ง Platform Channels

Each platform requires native implementation:

Android (android/app/src/main/kotlin/)

// TODO: Implement clipboard monitoring
class ClipboardPlugin : MethodCallHandler {
    override fun onMethodCall(call: MethodCall, result: Result) {
        when (call.method) {
            "getClipboard" -> getClipboard(result)
            "setClipboard" -> setClipboard(call, result)
            "startMonitoring" -> startMonitoring(result)
            "stopMonitoring" -> stopMonitoring(result)
        }
    }
}

macOS (macos/Runner/)

// TODO: Implement clipboard monitoring
class ClipboardPlugin: NSObject, FlutterPlugin {
    static func register(with registrar: FlutterPluginRegistrar) {
        // Implementation
    }
}

๐Ÿšฆ Development Workflow

  1. Create Feature Branch

    git checkout -b feature/media-control
  2. Create New Module

    mkdir -p packages/media_control
    # Follow clipboard_sync structure
  3. Add to Melos

    # melos.yaml already configured for packages/**
  4. Implement Clean Architecture

    • Domain layer (entities, repositories, use cases)
    • Data layer (repository impl, data sources)
    • Presentation layer (providers, widgets)
    • Platform layer (platform channels)
  5. Write Tests

    cd packages/media_control
    flutter test
  6. Update Apps

    • Add dependency to apps/mobile/pubspec.yaml
    • Add dependency to apps/desktop/pubspec.yaml
    • Import and use in UI

๐Ÿ”ฎ Future Roadmap

Phase 2: Media Control

  • Spotify-style media source switching
  • Play/pause/skip controls
  • Volume control
  • Now playing information sync

Phase 3: File Transfer

  • WebRTC peer-to-peer file transfer
  • Drag & drop support
  • Progress tracking
  • Resume interrupted transfers

Phase 4: Screen Share

  • Real-time screen sharing
  • WebRTC + FFmpeg integration
  • Remote control capabilities
  • Multi-monitor support

๐Ÿค Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Follow Clean Architecture principles
  4. Write comprehensive tests
  5. Submit a pull request

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ™ Acknowledgments

  • Flutter team for the amazing framework
  • Riverpod for excellent state management
  • Clean Architecture principles by Uncle Bob
  • Very Good Ventures for analysis rules

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages