Platform Setup
The Dester client is a cross-platform application for browsing and streaming your DesterLib media collection. This guide covers platform-specific setup and development.
📱 Supported Platforms
Section titled “📱 Supported Platforms”Available Now
Section titled “Available Now”- Android - Phones and tablets (SDK 21+)
- iOS - iPhone and iPad (iOS 12.0+)
- macOS - Desktop application (10.14+)
- Linux - Desktop application (Ubuntu 20.04+)
- Windows - Desktop application (Windows 10+)
In Development
Section titled “In Development”- Android TV - TV interface with remote control support
- Apple TV / tvOS - Native TV experience
🚀 Getting Started
Section titled “🚀 Getting Started”Prerequisites
Section titled “Prerequisites”- Flutter SDK 3.9.2 or higher
- DesterLib API server running
- Platform-specific development tools (Android Studio, Xcode, etc.)
Installation
Section titled “Installation”# Clone the repositorygit clone https://github.com/DesterLib/desterlib-flutter.gitcd desterlib-flutter
# Install dependenciesflutter pub get
# Generate codedart run build_runner build --delete-conflicting-outputs
# Run the appflutter runServer Configuration
Section titled “Server Configuration”On first launch, configure your DesterLib API server:
- Open Settings → Server Configuration
- Enter your server URL:
- Local:
http://localhost:3001 - Network:
http://192.168.1.XXX:3001 - Remote:
https://yourdomain.com
- Local:
- Save and the app will connect automatically
🏗️ Architecture
Section titled “🏗️ Architecture”Tech Stack
Section titled “Tech Stack”The client is built with Flutter, providing native performance across all platforms:
- Flutter SDK - Cross-platform UI framework
- Riverpod - State management
- go_router - Navigation and routing
- media_kit - Video playback
- OpenAPI - Auto-generated API client
Project Structure
Section titled “Project Structure”lib/├── main.dart # App entry point├── app/│ ├── router.dart # Navigation configuration│ ├── theme/ # App theming│ └── providers.dart # Global providers├── features/ # Feature modules│ ├── home/ # Home screen│ ├── library/ # Library browsing│ ├── media/ # Media detail pages│ └── settings/ # Settings and configuration├── shared/│ ├── widgets/ # Reusable UI components│ ├── utils/ # Utility functions│ └── providers/ # Shared state providers└── api/ # Generated API client🎨 Features
Section titled “🎨 Features”Media Browsing
Section titled “Media Browsing”- Browse movies and TV shows
- Search functionality
- Filter by genre, year, rating
- Sort options
- Grid and list views
Video Player
Section titled “Video Player”- Smooth streaming playback
- Playback controls (play, pause, seek)
- Volume control
- Fullscreen support
- Playback speed adjustment
- Subtitle support (coming soon)
- Audio track selection (coming soon)
Watch Progress
Section titled “Watch Progress”- Automatic progress tracking
- Resume from where you left off
- Mark as watched/unwatched
- Watch history
Settings
Section titled “Settings”- Server configuration
- Theme selection (light/dark)
- Playback preferences
- Cache management
- About and version info
🔧 Development
Section titled “🔧 Development”Contributing
Section titled “Contributing”See the contributing guide for development setup.
All contribution guidelines (commits, versioning, etc.) follow the main DesterLib standards documented in this site.
Building for Release
Section titled “Building for Release”Android
Section titled “Android”# APKflutter build apk --release
# App Bundle (for Play Store)flutter build appbundle --release# Build for iOSflutter build ios --release
# Open in Xcode for deploymentopen ios/Runner.xcworkspaceDesktop
Section titled “Desktop”# macOSflutter build macos --release
# Linuxflutter build linux --release
# Windowsflutter build windows --releaseTesting
Section titled “Testing”# Run all testsflutter test
# Run tests with coverageflutter test --coverage
# Run specific test fileflutter test test/features/player_test.dartCode Quality
Section titled “Code Quality”# Analyze codeflutter analyze
# Format codedart format lib/
# Run linterflutter analyze --fatal-infos🎯 Roadmap
Section titled “🎯 Roadmap”Current Focus
Section titled “Current Focus”- TV Platform Support - Android TV and Apple TV
- Subtitle Support - SRT, VTT formats
- Audio Track Selection - Multiple audio streams
- Offline Downloads - Save for offline viewing
Future Plans
Section titled “Future Plans”- Chromecast - Cast to any TV
- Picture-in-Picture - Watch while using other apps
- Widgets - Quick access shortcuts
- Multi-User Profiles - Separate watch history
- Parental Controls - Content restrictions
📱 Platform-Specific Notes
Section titled “📱 Platform-Specific Notes”Android
Section titled “Android”- Minimum SDK: 21 (Android 5.0)
- Target SDK: 34 (Android 14)
- Uses ExoPlayer for video playback
- Minimum version: iOS 12.0
- Uses AVPlayer for video playback
- Requires Xcode 14+ for building
- Minimum version: macOS 10.14
- Requires code signing for distribution
- Tested on Ubuntu 20.04+, Fedora 36+
- Requires GTK 3.0
Windows
Section titled “Windows”- Minimum version: Windows 10
- Uses Windows Media Foundation
🐛 Troubleshooting
Section titled “🐛 Troubleshooting”Connection Issues
Section titled “Connection Issues”Can’t connect to server:
- Check server URL is correct
- Ensure API is running (
docker compose up) - Check firewall settings
- Try using IP address instead of localhost
Video Playback Issues
Section titled “Video Playback Issues”Videos won’t play:
- Check internet connection
- Verify video codec support
- Try different video file
- Check server streaming configuration
Buffering issues:
- Check network speed
- Adjust video quality in settings
- Check server performance
Build Issues
Section titled “Build Issues”Flutter build fails:
# Clean and rebuildflutter cleanflutter pub getdart run build_runner build --delete-conflicting-outputsflutter runPlatform-specific build issues:
- Android: Check SDK version, update Gradle
- iOS: Update Xcode, check provisioning profiles
- Desktop: Check platform dependencies installed
📚 Resources
Section titled “📚 Resources”- Client GitHub Repository
- Flutter Documentation
- Riverpod Documentation
- media_kit Documentation
- Effective Dart