A clean, offline-first Flutter app that turns your voice into text — with real-time dictation, undo/redo, auto-save drafts, and file management.
- About the Project
- Features
- Prerequisites
- Installation & Setup
- Usage
- Configuration
- Running Tests
- Contributing
- Changelog
- License
Dictation is a minimalist, privacy-first note-taking app built with Flutter. It uses the device's native speech recognition engine — no cloud API required — to transcribe your voice in real time. Notes are auto-saved locally so nothing is ever lost between sessions. The app ships with English, Spanish, and French localizations and adapts to the device language automatically.
| Feature | Details |
|---|---|
| Real-time dictation | Continuous speech-to-text with auto-restart on interruption |
| Undo / Redo | Full edit history via Flutter's UndoHistoryController |
| Auto-save draft | Text preserved across sessions via SharedPreferences |
| Save & Load | Export notes as .txt files and reload them anytime |
| Share | Send transcribed text to any app instantly |
| Font size control | Adjustable editor font, persisted across sessions |
| Word & character count | Live counter displayed below the editor |
| Localization | English, Spanish, and French |
- Flutter SDK 3.12.0 or higher
- Dart SDK 3.12.0 or higher (bundled with Flutter)
- Android Studio / SDK for Android builds
- A connected device or emulator
Verify your setup:
flutter doctor-
Clone the repository
git clone https://github.com/lakescorp/Dictation.git cd Dictation -
Install dependencies
flutter pub get
-
Run the app
flutter run
-
Build a release APK / AAB
# APK flutter build apk --release # Android App Bundle (for Play Store) flutter build appbundle --release
Tap the microphone FAB at the bottom to start dictating. The app transcribes speech continuously and appends new words to the existing text. Tap again to stop.
// Core dictation loop (SpeechService)
await _speechToText.listen(
onResult: (result) {
final prefix = _wordsBeforeSpeech;
_inputController.text =
prefix.isEmpty ? result.recognizedWords : '$prefix ${result.recognizedWords}';
},
);Use the AppBar actions to undo, redo, save, or clear the current note. The overflow menu (⋮) gives access to Load file, Share, and Font size.
This app runs entirely offline and requires no API keys. Copy the example environment file if you plan to extend the project with external services:
cp .env.example .envSee .env.example for available variables and their descriptions.
# Run the full test suite
flutter test
# Static analysis
flutter analyzeTests cover FileService, DraftService, UI widget behaviour, and the app smoke test.
Contributions are welcome! Please read CONTRIBUTING.md before opening a pull request, and follow the Code of Conduct.
See CHANGELOG.md for a full history of releases.
Distributed under the MIT License. See LICENSE for details.
