Flutter app for the MyLab patient-results demo. This repo is optimized for a fast management demo: strong first-run polish, simple navigation, and Android-friendly CI/CD.
- Login screen with username/password profile auth
- QR/deep-link claim flow using
mylab://claim?code=...plus birth-date verification - After QR verification, users can sign in and attach the result, or create a profile and attach it
- Results dashboard with status cards and
Newbadges - Result detail view with range visualization, explanation, and suggested action
- Android artifact builds through GitHub Actions
flutter pub get
flutter runTo test the QR access flow on an iPhone simulator after the app is running:
xcrun simctl openurl booted "mylab://claim?code=<claim-code>"The claim code is shown in the backend admin console for the selected result, along with the generated QR image.
ci.ymlruns format checks, static analysis, and widget testsandroid-release.ymlbuilds a release APK on tags and manual dispatch, then uploads the artifactios-testflight.ymlbuilds and uploads an iOS IPA to TestFlight on iOS release tags (ios-v*) or manual dispatch
Configure these repository secrets before enabling ios-testflight.yml:
IOS_DIST_CERT_BASE64: Base64 of your Apple Distribution.p12certificateIOS_DIST_CERT_PASSWORD: Password for that.p12IOS_PROVISIONING_PROFILE_BASE64: Base64 of the App Store provisioning profile (.mobileprovision)APPSTORE_API_KEY_ID: App Store Connect API key IDAPPSTORE_API_ISSUER_ID: App Store Connect issuer IDAPPSTORE_API_PRIVATE_KEY: Full.p8private key content (including BEGIN/END lines)
Helpful commands to create Base64 secrets locally:
base64 -i dist-cert.p12 | pbcopy
base64 -i MyLab_AppStore.mobileprovision | pbcopyAutomated setup (recommended):
chmod +x scripts/setup_testflight_secrets.sh
scripts/setup_testflight_secrets.shThe script prompts for certificate/profile/API key paths and writes all required GitHub secrets in one run.
Trigger TestFlight release by tag:
git tag ios-v1.0.3
git push origin ios-v1.0.3- The app is configured for the live backend server by default.
- QR claim verification requires birth date before a result can be attached to a profile.
- iOS registers an APNs device token after login and sends it to backend
/devices/register. - True screen-off push alerts require APNs backend credentials and iOS Push capability in signing/profile.
- Custom alert tone is configured as
duolongi.cafin backend payload. Add that file to the iOS app bundle to use a non-default sound. - If login fails with
Email not verified yet..., the login screen now offersResend verification emaildirectly.