Fast, private, offline video-to-MP3 converter for Android.
loudnorm filter| Component | Technology |
|---|---|
| Framework | Flutter 3.24+ / Dart 3.10 |
| State Management | Provider + ChangeNotifier |
| Media Processing | FFmpeg Kit 6.0.3 |
| Database | SQLite via sqflite |
| Preferences | SharedPreferences |
| Ads | Google Mobile Ads (AdMob) |
| In-App Purchase | in_app_purchase |
| Typography | Google Fonts (Poppins + Inter) |
MVVM + Repository pattern with three layers:
┌──────────────┐
│ Screens │ ← UI layer (StatelessWidget / StatefulWidget)
├──────────────┤
│ Providers │ ← Business logic (ChangeNotifier)
├──────────────┤
│ Services │ ← Data layer (FFmpeg, SQLite, Storage, IAP, Ads)
└──────────────┘
See docs/ARCHITECTURE.md for full details.
lib/
├── main.dart # App entry point
├── app.dart # MaterialApp + theming
├── constants/ # Colors, strings, sizing, theme
├── models/ # AudioFile, AudioQuality, ConversionTask
├── services/ # FFmpeg, Database, Storage, Permission, IAP
├── providers/ # Conversion, History, Settings, Ad
├── screens/ # Splash, Home, Options, Converting, Success, Error, History, Settings
├── widgets/common/ # Buttons, cards, progress ring, banner ad, error boundary
└── utils/ # Format, File, Validation, Logger, Debouncer
# Clone
git clone <repo-url>
cd audiopeel
# Install dependencies
flutter pub get
# Run
flutter run
See docs/SETUP.md for detailed environment setup.
# Run all tests
flutter test
# Run with coverage
flutter test --coverage
# Run a specific test file
flutter test test/providers/settings_provider_test.dart
See docs/TESTING.md for the testing guide.
# Debug APK
flutter build apk --debug
# Release APK
flutter build apk --release
# App Bundle for Play Store
flutter build appbundle --release
| Screen | Description |
|---|---|
| Splash | Gradient logo, tagline, offline/free/no-account badges |
| Home | SELECT VIDEO circle, recent conversions, settings gear |
| Conversion Options | Video preview, output name, quality pills, CONVERT NOW |
| Converting | 240dp progress ring, percentage, time remaining, cancel |
| Success | Checkmark, audio preview, file info, CONVERT ANOTHER, DELETE/SHARE |
| Error | Broken-disc illustration, error code chip, retry/select another |
| History | Search bar, filter chips, date-grouped list, overflow menus |
| Settings | Remove Ads, quality, normalize volume, dark mode, auto-delete, storage, about |
| Setting | Location | Notes |
|---|---|---|
| Ad Unit IDs | lib/constants/app_constants.dart |
Switch test → production before release |
| IAP Product ID | lib/constants/app_constants.dart |
remove_ads |
| Min SDK | android/app/build.gradle.kts |
26 (Android 8.0) |
| Target SDK | android/app/build.gradle.kts |
34 (Android 14) |
Proprietary — all rights reserved.