Flutter mobile application for audio transcription using the Whisper backend API.
- ποΈ Audio Recording - Record audio directly from the app
- π File Upload - Upload audio files for transcription
- π History - View all past transcriptions
- π API Key Management - Secure API authentication
- π¨ Material Design 3 - Modern, beautiful UI
- π± Cross-platform - Works on iOS and Android
- Flutter SDK 3.0.0 or higher
- Dart 3.0.0 or higher
- Running Whisper backend server (see
../py-whisper-be/)
Follow the official Flutter installation guide: https://docs.flutter.dev/get-started/install
cd flutter-app-mobile
flutter pub getflutter runflutter run# List available devices
flutter devices
# Run on specific device
flutter run -d <device_id>- Open the app
- Go to Settings tab (bottom navigation)
- Enter your backend URL (e.g.,
http://localhost:8000) - Enter your API Key (get from admin dashboard)
- Tap Save Settings
- Tap Test Connection to verify
You need an API key from the Whisper backend:
# 1. Login as admin
curl -X POST http://localhost:8000/api/admin/login \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "your_password"}'
# 2. Create API key
curl -X POST http://localhost:8000/api/admin/api-keys \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Mobile App", "description": "Flutter mobile client"}'Copy the returned API key and paste it into the app settings.
flutter-app-mobile/
βββ lib/
β βββ main.dart # App entry point
β βββ config/
β β βββ app_config.dart # App configuration
β βββ models/
β β βββ transcription_model.dart # Data models
β β βββ api_exception.dart # Exception handling
β βββ services/
β β βββ whisper_api_service.dart # API client
β βββ providers/
β β βββ transcription_providers.dart # State management
β βββ screens/
β βββ home_screen.dart # Home with navigation
β βββ upload_screen.dart # Upload/record audio
β βββ history_screen.dart # View transcriptions
β βββ settings_screen.dart # App settings
βββ pubspec.yaml # Dependencies
βββ README.md
- Tap the New Transcription button (floating action button)
- Tap Choose Audio File
- Select an audio file from your device
- Tap Transcribe Audio
- Wait for the transcription to complete
- View the result and copy/share as needed
- Go to the History tab
- See all past transcriptions
- Tap any item to view full text
- Pull down to refresh
- Go to the Settings tab
- Configure backend URL and API key
- Test connection
- View app info
- MP3
- MP4
- MPEG
- MPGA
- M4A
- WAV
- WebM
- OGG
- FLAC
- flutter_riverpod - State management
- dio - HTTP client
- file_picker - File selection
- record - Audio recording
- shared_preferences - Local storage
- intl - Date formatting
- Make sure the backend server is running
- Check the backend URL in settings
- If testing on a real device, use your computer's IP address instead of
localhost- Example:
http://192.168.1.100:8000
- Example:
- Ensure you copied the full API key from creation response
- Check that the API key hasn't been revoked in admin dashboard
- Try creating a new API key
- Check file size (must be under configured limit)
- Ensure file format is supported
- Verify API key is set correctly
Add to ios/Runner/Info.plist:
<key>NSMicrophoneUsageDescription</key>
<string>We need access to your microphone to record audio for transcription</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to select audio files for transcription</string>Add to android/app/src/main/AndroidManifest.xml:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>flutter build apk --releaseOutput: build/app/outputs/flutter-apk/app-release.apk
flutter build ios --releaseThen archive in Xcode.
flutter build appbundle --releaseOutput: build/app/outputs/bundle/release/app-release.aab
flutter runPress r to hot reload, R to hot restart.
flutter testflutter analyzeflutter format lib/MIT