PeerLink is an offline, secure, and high-speed file sharing application built with *Flutter, designed for seamless peer-to-peer communication *without needing an internet connection.
PeerLink leverages Wi-Fi Direct technology to enable users to discover, connect, and share files with nearby devices. It features a robust authentication system, a persistent library for downloaded files, and an in-app PDF viewer with annotation capabilities.
- Secure Sign-Up & Login – With email verification and password reset.
- Email Validation – Restricts sign-ups to the mnnit.ac.in domain.
- Offline P2P Networking – Uses Wi-Fi Direct to discover and connect to nearby peers without internet.
- Real-time List – Auto-updating list of available users with formatted names.
- One-to-One Connections – Enforces a single connection at a time, marking other users as "Busy."
- High-Speed Transfers – Powered by Wi-Fi Direct for fast sharing.
- Large File Support – Streams files directly using Payload.FILE, avoiding memory overload.
- Real-time Progress Tracking – Both sender and receiver can view progress bars for active transfers.
- Cancelable Transfers – Cancel transfers anytime.
- Local Saving – Received files are stored temporarily, then moved to a permanent PeerLink folder.
- Persistent History – Complete file history retained across app restarts.
- Full Featured Management – Sort and filter files by type, name, date, or size.
- File Actions – Open, Rename, or Delete directly from the app.
- Integrated PDF Viewing – View PDFs directly using syncfusion_flutter_pdfviewer.
- Annotation Tools – Draw, highlight, and add notes.
- Save Changes – Permanently store changes within the PDF file.
PeerLink follows a modern MVVM (Model-View-ViewModel) architecture .
lib/
│
├── main.dart # Entry point
├── firebase_options.dart # Firebase config file
│
├── app/
│ ├── data/
│ │ ├── models/ # Core data models
│ │ │ ├── peer_device_model.dart
│ │ │ ├── user_model.dart
│ │ │ ├── transfer_update_model.dart
│ │ │ └── saved_file_model.dart
│ │ └── services/ # Business logic & external services
│ │ ├── auth_service.dart
│ │ ├── p2p_service.dart
│ │ └── library_service.dart
│ │
│ └── presentation/
│ ├── auth/ # Login, Register, Verify Email
│ ├── discovery/ # Peer scanning UI
│ ├── transfer/ # File transfer screens
│ ├── library/ # Library management screens
│ └── pdf_viewer/ # Document viewer| Category | Tools / Packages |
|---|---|
| Framework | Flutter |
| Authentication | firebase_auth |
| P2P Communication | nearby_connections, permission_handler |
| State Management | provider |
| File System | file_picker, path_provider, open_file |
| PDF Viewing | syncfusion_flutter_pdfviewer |
| Local Storage | shared_preferences |
| UI & Utilities | intl, uuid |
- Garvit Jain (https://github.com/GarvitJain99)
- Kunal Gulrajani (https://github.com/joylock)
- Ayush Jain (https://github.com/AYUSH-NIT)