Linked is a cross-platform mobile application that enables two phones to exchange data through a "touch" interaction using BLE (Bluetooth Low Energy) as the primary transport layer.
- iOS ↔ iOS
- Android ↔ Android
- iOS ↔ Android (Cross-platform)
┌─────────────────────────────────────────────────────────────────┐
│ PRESENTATION LAYER │
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ Screens │ │ Widgets │ │ Platform Triggers │ │
│ │ - Home │ │ - Cards │ │ - iOS: Widget/Wallet │ │
│ │ - Exchange │ │ - Dialogs │ │ - Android: NFC/Auto │ │
│ │ - History │ │ - Buttons │ │ │ │
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ BUSINESS LOGIC LAYER │
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Exchange Bloc │ │ Discovery Bloc │ │ Settings Bloc │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Connection Bloc │ │ Transfer Bloc │ │ History Bloc │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ TRANSPORT LAYER │
├─────────────────────────────────────────────────────────────────┤
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ Transport Manager │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │ │
│ │ │ BLE │ │ WiFi Direct│ │ Multipeer │ │ │
│ │ │ (Primary) │ │ (Android) │ │ Connectivity(iOS)│ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────────┘ │ │
│ └───────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ DATA LAYER │
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Local Storage │ │ Secure Store │ │ Repositories │ │
│ │ (SQLite) │ │ (Keychain/KS) │ │ │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
linked/
├── lib/
│ ├── main.dart
│ ├── app.dart
│ ├── core/
│ │ ├── constants/
│ │ ├── theme/
│ │ ├── utils/
│ │ └── extensions/
│ ├── data/
│ │ ├── models/
│ │ ├── repositories/
│ │ └── datasources/
│ ├── domain/
│ │ ├── entities/
│ │ ├── repositories/
│ │ └── usecases/
│ ├── presentation/
│ │ ├── screens/
│ │ ├── widgets/
│ │ └── blocs/
│ └── transport/
│ ├── ble/
│ ├── wifi_direct/
│ └── multipeer/
├── ios/
│ ├── Runner/
│ ├── LinkedWidget/
│ └── WalletExtension/
├── android/
│ └── app/
└── test/
| Component | Technology |
|---|---|
| Framework | Flutter 3.x |
| State Management | flutter_bloc |
| BLE | flutter_blue_plus |
| Local Storage | sqflite, shared_preferences |
| Secure Storage | flutter_secure_storage |
| DI | get_it, injectable |
| Navigation | go_router |
| iOS Widget | WidgetKit (Swift) |
| iOS Wallet | PassKit (Swift) |
| Android NFC | android.nfc (Kotlin) |
# Clone the repository
git clone https://github.com/your-org/linked.git
# Install dependencies
flutter pub get
# Run on iOS
flutter run -d ios
# Run on Android
flutter run -d android