A Flutter-based cross-device ecosystem app that syncs clipboard, controls media, and supports file transfer and screen sharing across macOS, Windows, and Android.
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
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
- 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
- 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
- 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
- Flutter 3.10+
- Dart 3.0+
- Melos (for monorepo management)
-
Clone the repository
git clone <repository-url> cd cross_device_sync
-
Install Melos
dart pub global activate melos
-
Bootstrap the project
melos bootstrap
-
Generate code
melos run build_runner
Mobile App (Android)
cd apps/mobile
flutter runDesktop App (macOS/Windows)
cd apps/desktop
flutter run -d macos # or -d windowsRun all tests:
melos run testRun tests for specific package:
cd packages/clipboard_sync
flutter testimport '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
),
);
}
}// 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'),
);
});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
Each platform requires native implementation:
// 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)
}
}
}// TODO: Implement clipboard monitoring
class ClipboardPlugin: NSObject, FlutterPlugin {
static func register(with registrar: FlutterPluginRegistrar) {
// Implementation
}
}-
Create Feature Branch
git checkout -b feature/media-control
-
Create New Module
mkdir -p packages/media_control # Follow clipboard_sync structure -
Add to Melos
# melos.yaml already configured for packages/** -
Implement Clean Architecture
- Domain layer (entities, repositories, use cases)
- Data layer (repository impl, data sources)
- Presentation layer (providers, widgets)
- Platform layer (platform channels)
-
Write Tests
cd packages/media_control flutter test
-
Update Apps
- Add dependency to
apps/mobile/pubspec.yaml - Add dependency to
apps/desktop/pubspec.yaml - Import and use in UI
- Add dependency to
- Spotify-style media source switching
- Play/pause/skip controls
- Volume control
- Now playing information sync
- WebRTC peer-to-peer file transfer
- Drag & drop support
- Progress tracking
- Resume interrupted transfers
- Real-time screen sharing
- WebRTC + FFmpeg integration
- Remote control capabilities
- Multi-monitor support
- Fork the repository
- Create a feature branch
- Follow Clean Architecture principles
- Write comprehensive tests
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
- Flutter team for the amazing framework
- Riverpod for excellent state management
- Clean Architecture principles by Uncle Bob
- Very Good Ventures for analysis rules