flutter doctor should report “No issues found!”).sqflite for local storage, which only has real
(non-stub) implementations on Android/iOS/macOS. flutter run -d windows
will build, but every database call will fail at runtime.Run flutter doctor -v any time to check all of the above.
flutter emulators
Pixel_3a_API_34_extension_level_7_x86_64
configured):
flutter emulators --launch Pixel_3a_API_34_extension_level_7_x86_64
Wait for it to fully boot (first boot can take a minute or two).
flutter run
Flutter auto-detects the running emulator as the target. If more than one
device is available, pass -d <device-id> (see flutter devices for ids).
adb devices
flutter run
Once the app is running:
R for hot restart, or fully kill and flutter run
again) and confirm everything persisted — this is the real test that
sqflite is actually writing to disk, not just holding state in memory.flutter analyze
flutter test
flutter build apk --debug # sideload-able debug APK
flutter build apk --release # release APK (uses debug signing until
# android/key.properties exists — see
# docs/PUBLISHING.md)
flutter build appbundle --release # .aab — what Play Store actually wants
The resulting files land under build/app/outputs/.
With the app running on an emulator/device (see above):
export PATH="$LOCALAPPDATA/Android/Sdk/platform-tools:$PATH" # if adb isn't already on PATH
scripts/capture_screenshots.sh
This taps through each bottom-nav tab (found via the accessibility tree, not
hardcoded coordinates, so it’s resilient to screen-size differences) and
saves one screenshot per tab into
fastlane/metadata/android/en-US/images/phoneScreenshots/, which Fastlane
uploads automatically on the next deploy_production — see
docs/PUBLISHING.md. By default this captures whatever data
is currently in the app (empty state, unless you’ve added clients/estimates
first) — add a bit of demo data before running it if you want the
screenshots to show a populated app.