A Flutter Android app for generating and managing LDS ward meeting programs.
All data is stored locally on-device using SQLite — no server or internet connection required.
- Ward: Pasay 3rd Ward, Pasay Philippine Stake
- App ID:
com.church.programgenerator - APK:
installer/p3ProgramGenerator_v1.2.0.apk
| Version | Build | Date | Notes |
|---|---|---|---|
| 1.2.0+4 | 4 | April 16, 2026 | Voice input (agenda, announcements, meeting notes), center alignment fix, acknowledgement template cleanup |
| 1.1.0+3 | 3 | April 15, 2026 | UI polish, PDF fill, multi-line ward business, form improvements |
| 1.0.0+2 | 2 | April 2026 | Full feature release |
| 1.0.0+1 | 1 | April 2026 | Initial release |
- Offline voice input everywhere
- Agenda items (Bishopric & Ward Council) — tap mic to dictate
- Sacrament Announcements — mic per row
- New Meeting Notes screen — voice dictation, text export
- Meeting Notes screen — from home menu, take notes by typing or voice, export as .txt
- Agenda section centered — Bishopric preview agenda header and items now center-aligned
- Dropdown overflow fix — all dropdowns in Bishopric and Ward Council forms use
isExpanded: true(no more 40px overflow) - Acknowledgement template cleaned — removed hardcoded names, now only uses template tokens
- Fixed: DropdownButtonFormField overflow in Bishopric and Ward Council forms
- Fixed: Agenda preview alignment (centered)
- Fixed: Announcements editor now supports voice input per row
- Fixed: Meeting Notes screen voice input and export
- Fixed: Acknowledgement template no longer has redundant hardcoded names
- Removed cross icon — replaced
Icons.church(Material icon with a cross) with the P3 ward building logo (P3_LOGO.png). The cross symbol is not used in LDS churches.
- Full-page layout — PDF content now fills the entire A4 page using distributed
Spacer()widgets between sections (header, body, speakers, footer). No more large empty bottom half. - Larger text — label/value font sizes increased from 10–11 pt to 12–13 pt for better readability.
- Attendance line — stays anchored at the bottom-right of the page.
- Ward Business multi-line — field now accepts multiple lines (up to 5 rows). Press Enter to add a new line. Example:
release: secretary sustain: president
- Presiding is now a dropdown — populated from the Sacrament conductors list (bishop, counselors). No longer a free-text field.
- Welfare field removed — the Welfare text box has been removed. Use Agenda Items for welfare topics.
- Callings & Releases removed — the Callings & Releases text field has been removed from the form and PDF. Use Agenda Items for callings/releases business.
- Single-page scalable PDFs — all three program types auto-shrink to fit one page
- Correct Sacrament PDF field order — Date → Presiding → Conducting → Acknowledgement → Announcements → Chorister/Pianist → Opening Hymn → Invocation → Ward/Stake Business → Sacrament Hymn → Reverence → Speakers → Closing Hymn → Benediction → Attendance
- Fast & Testimony on 1st Sunday, Stake leaders on 3rd, Bishopric on 5th
- 2nd and 4th Sundays draw from configurable auxiliary cycle lists
- Full CRUD for Auxiliaries, Speaker list, Hymns, Handbook readings
- Duplicate name check; warns if deleting auxiliaries referenced in rotation
- Bishop name auto-fills Presiding
- Bishopric preferred day (Monday–Sunday)
- Speaker cycle base month, 2nd/4th Sunday slot assignments
- Save to Downloads (PDF →
/storage/emulated/0/Download/) - Default Data Setup — one-tap seed of conductors, musicians, auxiliaries
- App icon — P3 church building logo
- DB v4 —
cycle2_slot1/2/3,cycle4_slot1/2/3,bishop_namecolumns
| Feature | Details |
|---|---|
| 3 program types | Sacrament Meeting, Ward Council, Bishopric Meeting |
| Full forms | All fields matching the reference Java back-end models |
| PDF export | Single-page scalable, full-page fill, correct field order |
| Save to Downloads | Saves PDF directly to device Downloads folder |
Native Android print via printing package |
|
| Share | Share PDF via Android share sheet |
| Musician management | Add / edit / delete Choristers and Pianists |
| Conductor management | Per meeting type with round-robin rotation |
| Auxiliary management | Full CRUD; used as cycle slot labels |
| Speaker list | Full CRUD speaker pool |
| Hymn / Handbook admin | Manage hymn and handbook reading libraries |
| Program history | Save, browse, load, and delete previous programs |
| Automation Rules | Bishop name, meeting day, speaker cycle slots, ward config |
| Speaker cycle preview | Next 8 Sundays with occurrence, label, and auxiliary |
| Default Data Setup | One-tap seed of all ward defaults |
| Offline | 100% local SQLite; no backend required |
lib/
├── main.dart
├── database/
│ └── database_helper.dart # SQLite via sqflite (DB v4)
├── models/
│ ├── sacrament_program.dart
│ ├── bishopric_program.dart
│ ├── ward_council_program.dart
│ ├── speaker.dart
│ ├── agenda_item.dart
│ ├── musician.dart
│ ├── conductor.dart
│ ├── auxiliary.dart
│ ├── ward_config.dart
│ └── saved_program.dart
├── screens/
│ ├── home_screen.dart
│ ├── sacrament/
│ │ ├── sacrament_form_screen.dart
│ │ └── sacrament_preview_screen.dart
│ ├── bishopric/
│ │ ├── bishopric_form_screen.dart
│ │ └── bishopric_preview_screen.dart
│ ├── ward_council/
│ │ ├── ward_council_form_screen.dart
│ │ └── ward_council_preview_screen.dart
│ ├── history/
│ │ └── history_screen.dart
│ ├── rules/
│ │ └── rules_screen.dart
│ └── admin/
│ ├── auxiliary_admin_screen.dart
│ ├── musician_admin_screen.dart
│ ├── conductor_admin_screen.dart
│ ├── speaker_list_admin_screen.dart
│ ├── hymn_admin_screen.dart
│ ├── handbook_admin_screen.dart
│ └── seed_defaults_screen.dart
├── utils/
│ ├── pdf_generator.dart
│ ├── rotation_service.dart
│ └── program_storage.dart
└── widgets/
├── labeled_field.dart
├── speaker_list_editor.dart
├── agenda_item_editor.dart
└── announcements_editor.dart
| Tool | Version |
|---|---|
| Flutter SDK | ≥ 3.0 |
| Dart SDK | ≥ 3.0 |
| Android SDK | API 21+ (Android 5.0+) |
| JDK | 17+ |
| Android emulator or physical device | — |
flutter pub getStart an Android emulator from Android Studio (AVD Manager), then:
# List available devices
flutter devices
# Run in debug mode (picks connected device/emulator automatically)
flutter run
# Run on a specific device by ID
flutter run -d <device-id>
# Example
flutter run -d emulator-5554The app will build, install, and launch on the emulator automatically.
While flutter run is active in your terminal:
| Key | Action | When to use |
|---|---|---|
r |
Hot Reload | UI/widget changes — rebuilds widget tree instantly (~300 ms) |
R |
Hot Restart | State/logic changes — restarts the app from scratch (~1.5 s) |
q |
Quit | Stop the app and exit flutter run |
h |
Help | List all available commands |
Tip: Hot reload preserves app state (e.g. form data) — use it for layout tweaks.
Hot restart clears all state — use it after changing business logic, models, or database migrations.
.\Build-Installer.ps1Outputs installer/p3ProgramGenerator.apk (signed fat APK).
# Fat APK (all architectures, ~56 MB)
flutter build apk --release
# Split APKs (smaller per-architecture builds)
flutter build apk --release --split-per-abiFor split builds, install the correct ABI for your device:
app-arm64-v8a-release.apk— most modern phones (64-bit ARM)app-armeabi-v7a-release.apk— older 32-bit ARM phonesapp-x86_64-release.apk— x86 emulators
Output location: build/app/outputs/flutter-apk/
Ensure android/key.properties is present:
storePassword=<your-password>
keyPassword=<your-password>
keyAlias=upload
storeFile=../upload-keystore.jksThe keystore file upload-keystore.jks must be at the project root. See android/key.properties.template for the template.
Version format: major.minor.patch+buildNumber
| Component | When to increment |
|---|---|
major |
Complete rewrite or breaking change |
minor |
New features or significant improvements |
patch |
Bug fixes or small tweaks |
buildNumber |
Every APK build (auto-increments) |
Current version: 1.2.0+4
Update in pubspec.yaml:
version: 1.2.0+4- APK:
installer/p3ProgramGenerator_v1.2.0.apk - Changes: Voice input (agenda, announcements, meeting notes), center alignment fix, acknowledgement template cleanup
- APK:
installer/p3ProgramGenerator_v1.1.0.apk - Changes: Logo icon fix, full-page PDF, multi-line ward business, Ward Council presiding dropdown, Bishopric form cleanup
- APK: (archived)
- Full feature release
- Initial working release
- Sacrament attendance tracking — tap-to-increment counter stored per program
- Ward Council auxiliary report — select which auxiliary is presenting each week
- PDF font size setting — user-configurable font scale per program type
- Dark mode — system-aware dark/light theme toggle
- Offline Voice Input for Agenda — Use device mic and free local AI (offline speech-to-text) to add agenda items in Bishopric Meeting, Ward Council, and Sacrament announcements
- Program templates — save a partially-filled form as a reusable template
- Email export — send PDF directly via email without sharing manually
- Multiple wards — support more than one ward configuration in the same app
- Backup & restore — export/import the full SQLite database as a JSON or ZIP archive
- Anniversary/holiday banners — auto-add holiday notice on program PDFs (Christmas, Easter)
- iOS support — port to iPhone/iPad via the existing Flutter codebase
- Web version — deploy as a Progressive Web App for in-browser use
- Cloud sync — optional Firebase sync so bishop's secretary can share programs with other devices
- Bishopric approval workflow — mark programs as "pending review" / "approved" before printing
For full technical details, see FLUTTER_APP_REFERENCE.md.