SkySync is a modern file management application built with Flutter that provides secure file storage, sharing and management capabilities. The application features a comprehensive error handling system, multi-language support, automatic update notifications, and an intuitive user interface.
- User registration and login with email verification
- JWT token-based authentication
- Password reset functionality
- Secure file access control
- Upload and download files
- Create and manage folders
- Rename files
- Share files with other users
- File organization and navigation
- Bulk file operations (select, delete, move)
- File search and filtering
- Advanced file preview (images, PDFs, spreadsheets, text files)
- Favorites system
- File caching for improved performance
- Activity tracking for file operations
- Mark files as favorites for quick access
- Dedicated favorites page
- Easy management of favorite files
- Share files with other users
- Share entire folders
- Share with groups
- Quick share functionality via QR code
- View shared files and folders
- Shared file preview with dedicated widgets
- Polish and English localization
- Automatic language detection
- Easy to extend with new languages
- Comprehensive error management system
- User-friendly error messages
- Retry functionality for recoverable errors
- Different error display methods (dialogs, snackbars, banners)
- Smart update notifications - only shows when newer version is available
- Version comparison between app and server versions
- Persistent version storage using SharedPreferences
- Automatic update checking on app startup
- Download links for new versions
- Customizable theme colors with color picker
- Font size options (small, medium, large)
- Default view preferences (list, grid)
- Sorting preferences for files
- Persistent settings across app sessions
- Frontend: Flutter 3.7.2+
- State Management: Provider
- HTTP Client: http package
- Local Storage: SharedPreferences
- File Handling: file_picker, path_provider
- Localization: easy_localization
- QR Code: qr_flutter
- Version Management: package_info_plus
- PDF Viewing: syncfusion_flutter_pdfviewer
- Image Caching: cached_network_image
- Notifications: flutter_local_notifications
- File Opening: open_file
| Demo images | Demo images |
|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
If you want to build the image locally:
docker build -t skysync .Or pull the latest image from Docker Hub:
docker pull bartekbk/skysync:latest-
Copy the example file:
cp .env.example .env # lub na Windows: copy .env.example .env -
Create
.envfile and fill your values(API_KEY, BASE_URL, etc.). -
Server port is set in
compose.yaml(deafult 8000:8000).
docker compose upServer will start with values from .env.
- Flutter SDK 3.7.2 or higher
- Dart SDK
- Android Studio / VS Code
- Backend API server Readme
-
Clone the repository
git clone https://github.com/B4rtekk1/Skysync.git cd fileserver -
Install dependencies
flutter pub get
-
Configure environment
- Create a
.envfile in the root directory - Add your API configuration:
API_KEY=your_api_key_here BASE_URL=http://your-backend-url:8000
- Create a
-
Run the application
flutter run
-
Build release version
flutter build windows --release flutter build apk --release #etc.
lib/
├── main.dart # Application entry point
├── pages/ # Application pages
│ ├── login_page.dart # Login screen
│ ├── register_page.dart # Registration screen
│ ├── main_page.dart # Main dashboard
│ ├── files_page.dart # File management
│ ├── favorites_page.dart # Favorites
│ ├── shared_files_page.dart # Shared files
│ ├── my_shared_files_page.dart # My shared files
│ ├── groups_page.dart # Groups management
│ ├── shared_folder_contents_page.dart # Shared folder contents
│ ├── forgot_password_page.dart # Password reset
│ ├── reset_password_page.dart # Password reset form
│ ├── delete_account_page.dart # Account deletion
│ ├── verification_page.dart # Email verification
│ ├── error_demo_page.dart # Error handling demo
│ └── settings_page.dart # Settings
├── utils/ # Utility classes
│ ├── api_service.dart # API communication
│ ├── token_service.dart # Token management
│ ├── version_service.dart # Version management
│ ├── cache_service.dart # File caching
│ ├── storage_service.dart # Storage operations
│ ├── activity_service.dart # Activity tracking
│ ├── notification_service.dart # Notifications
│ ├── app_settings.dart # App settings management
│ ├── file_utils.dart # File utilities
│ ├── custom_widgets.dart # Reusable widgets
│ ├── error_handler.dart # Error handling system
│ └── error_widgets.dart # Error display widgets
├── widgets/ # Custom widgets
│ ├── update_notification_widget.dart # Update notifications
│ ├── color_picker_dialog.dart # Color picker
│ ├── image_preview_widget.dart # Image preview
│ ├── pdf_preview_widget.dart # PDF preview
│ ├── spreadsheet_preview_widget.dart # Spreadsheet preview
│ ├── text_preview_widget.dart # Text preview
│ ├── shared_*_preview_widget.dart # Shared file previews
│ └── image_preview_page.dart # Full-screen image preview
└── assets/
└── lang/ # Localization files
├── en.json # English translations
└── pl.json # Polish translationsThe application includes a comprehensive error handling system that provides:
- Centralized Error Management: All errors are handled through a single system
- Error Classification: Errors are categorized by type (network, authentication, validation, etc.)
- User-Friendly Messages: Clear, localized error messages
- Retry Functionality: Automatic retry for recoverable errors
- Multiple Display Methods: Dialogs, snackbars, banners, and widgets
network- Network connection issuesauthentication- Login/authorization errorsauthorization- Permission errorsvalidation- Data validation errorsserver- Backend server errorsfile- File operation errorsunknown- Unclassified errors
// In API calls
try {
final response = await ApiService.loginUser(email, password);
// Handle success
} catch (e) {
final appError = e is AppError ? e : ErrorHandler.handleError(e, null);
ErrorHandler.showErrorSnackBar(context, appError);
}
// Using error widgets
RetryableErrorWidget(
error: appError,
onRetry: () => _retryOperation(),
)The application communicates with a backend API for all file operations. Key endpoints include:
POST /create_user- User registrationPOST /login- User authenticationPOST /verify/{email}- Email verificationPOST /forgot_password- Password reset requestPOST /reset_password- Password resetPOST /delete_user/{username}- Delete user account
POST /list_files- Get file listPOST /upload_file- Upload filesDELETE /delete_file/{path}- Delete filesGET /download_file/{path}- Download filesPOST /create_folder- Create foldersPOST /rename_file- Rename files
POST /share_file- Share filesGET /get_shared_files- Get shared filesGET /get_my_shared_files- Get my shared filesPOST /create_group- Create groupsGET /get_groups- Get groupsPOST /add_to_group- Add user to group
GET /app_version- Get app version and update infoPOST /validate_token- Validate JWT token
The application supports multiple languages through the easy_localization package. To add a new language:
- Create a new JSON file in
assets/lang/ - Add all required translation keys
- Update the supported locales in
main.dart
flutter build apk --releaseflutter build ios --releaseflutter build web --release- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
SkySync includes an intelligent update system:
- Version Comparison: Compares app version with server version
- Smart Notifications: Only shows update notifications when newer version is available
- Persistent Storage: Saves version information locally
- Automatic Checking: Checks for updates on app startup
# Start server with update notification
python server.py --update "1.2.0"
# Start server without update notification
python server.py --update nullThe server creates a version.json file with:
{
"current_version": "1.0.0+1",
"update_version": "1.2.0",
"last_updated": "2024-01-15T10:30:00.000000"
}- Automatic update notifications ✅
- Version comparison system ✅
- File preview system ✅
- Customizable themes ✅
- Activity tracking ✅
- Offline mode support
- Advanced search filters
- File versioning
- Real-time collaboration
- Cloud storage integration
- Advanced security features (2FA, encryption)






