Merge pull request #355 from Oloodi/312-feature-integrate-google-maps-places-autocomplete-for-hub-address-validation

Continuation of the mobile apps development
This commit is contained in:
Achintha Isuru
2026-02-03 13:47:05 -05:00
committed by GitHub
15 changed files with 137 additions and 63 deletions

View File

@@ -17,40 +17,57 @@ include makefiles/tools.mk
.PHONY: help .PHONY: help
help: help:
@echo "--------------------------------------------------" @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
@echo " KROW Workforce - Available Makefile Commands" @echo " 🚀 KROW Workforce - Available Makefile Commands"
@echo "--------------------------------------------------" @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
@echo "" @echo ""
@echo " --- CORE DEVELOPMENT ---" @echo " 📦 WEB FRONTEND (internal/api-harness)"
@echo " make install - Installs web frontend dependencies." @echo " ────────────────────────────────────────────────────────────────────"
@echo " make dev - Starts the local web frontend server." @echo " make install Install web frontend dependencies"
@echo " make build - Builds the web frontend for production." @echo " make dev Start local web frontend dev server"
@echo " make launchpad-dev - Starts the local launchpad server (Firebase Hosting emulator)." @echo " make build Build web frontend for production"
@echo " make deploy-app [ENV=dev] Build and deploy web app (dev/staging/prod)"
@echo "" @echo ""
@echo " --- MOBILE APP DEVELOPMENT ---" @echo " 🏠 LAUNCHPAD (internal/launchpad)"
@echo " make mobile-install - Bootstrap the mobile workspace (Melos)." @echo " ────────────────────────────────────────────────────────────────────"
@echo " make mobile-info - List custom mobile development commands." @echo " make launchpad-dev Start launchpad dev server (Firebase Hosting)"
@echo " make mobile-client-dev-android - Run client app in dev mode (Android)." @echo " make deploy-launchpad-hosting Deploy launchpad to Firebase Hosting"
@echo " make mobile-client-build PLATFORM=apk - Build client app for specified platform."
@echo " make mobile-staff-dev-android - Run staff app in dev mode (Android)."
@echo " make mobile-staff-build PLATFORM=apk - Build staff app for specified platform."
@echo "" @echo ""
@echo " --- DEPLOYMENT ---" @echo " 📱 MOBILE APPS (apps/mobile)"
@echo " make deploy-launchpad-hosting - Deploys internal launchpad to Firebase Hosting." @echo " ────────────────────────────────────────────────────────────────────"
@echo " make deploy-app [ENV=staging] - Builds and deploys the main web app (default: dev)." @echo " make mobile-install Bootstrap mobile workspace + SDK"
@echo " make mobile-info List mobile development commands"
@echo " make mobile-client-dev-android [DEVICE=android] Run client app (Android)"
@echo " make mobile-client-build PLATFORM=apk Build client app (apk/ipa/etc)"
@echo " make mobile-staff-dev-android [DEVICE=android] Run staff app (Android)"
@echo " make mobile-staff-build PLATFORM=apk Build staff app (apk/ipa/etc)"
@echo " make mobile-hot-reload Hot reload running Flutter app"
@echo " make mobile-hot-restart Hot restart running Flutter app"
@echo "" @echo ""
@echo " --- DEVELOPMENT TOOLS ---" @echo " 🗄️ DATA CONNECT & BACKEND (backend/dataconnect)"
@echo " make install-melos - Installs Melos globally if not already present." @echo " ────────────────────────────────────────────────────────────────────"
@echo " make install-git-hooks - Installs git pre-push hook to protect main/dev branches." @echo " make dataconnect-init Initialize Firebase Data Connect"
@echo " make sync-prototypes - Builds and copies prototypes from adjacent 'client-krow-poc' repo." @echo " make dataconnect-deploy Deploy Data Connect schemas to Cloud SQL"
@echo " make dataconnect-sql-migrate Apply pending SQL migrations"
@echo " make dataconnect-generate-sdk Regenerate Data Connect client SDK"
@echo " make dataconnect-sync Full sync: deploy + migrate + generate SDK"
@echo " make dataconnect-seed Seed database with test data"
@echo " make dataconnect-clean Delete all data from Data Connect"
@echo " make dataconnect-test Test Data Connect deployment (dry-run)"
@echo " make dataconnect-enable-apis Enable required GCP APIs"
@echo " make dataconnect-bootstrap-db ONE-TIME: Full Cloud SQL + Data Connect setup"
@echo "" @echo ""
@echo " --- DATA CONNECT MANAGEMENT ---" @echo " 🛠️ DEVELOPMENT TOOLS"
@echo " make dataconnect-init - Initializes Firebase Data Connect." @echo " ────────────────────────────────────────────────────────────────────"
@echo " make dataconnect-deploy - Deploys Data Connect schemas." @echo " make install-melos Install Melos globally (for mobile dev)"
@echo " make dataconnect-sql-migrate - Applies SQL migrations." @echo " make install-git-hooks Install git pre-push hook (protect main/dev)"
@echo " make dataconnect-generate-sdk - Regenerates the Data Connect SDK." @echo " make sync-prototypes Sync prototypes from client-krow-poc repo"
@echo " make dataconnect-sync - Runs migrate + deploy + generate-sdk."
@echo " make dataconnect-bootstrap-db - ONE-TIME: Full Cloud SQL + Data Connect setup."
@echo "" @echo ""
@echo " make help - Shows this help message." @echo " HELP"
@echo "--------------------------------------------------" @echo " ────────────────────────────────────────────────────────────────────"
@echo " make help Show this help message"
@echo ""
@echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
@echo " 💡 Tip: Run 'make mobile-install' first for mobile development"
@echo " 💡 Tip: Use 'make dataconnect-sync' after schema changes"
@echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

View File

@@ -1,7 +1,7 @@
# KROW Workforce Platform — Feature Demo Plan for Milestone 3 # KROW Workforce Platform — Feature Demo Plan for Milestone 3
**Version:** Milestone 3 (v3.0) **Version:** Milestone 3 (v3.0)
**Date:** February 2, 2026 **Date:** February 3, 2026
**Audience:** Business Stakeholders, Customer Engineers, Sales Teams **Audience:** Business Stakeholders, Customer Engineers, Sales Teams
**Duration:** 25-30 minutes **Duration:** 25-30 minutes
@@ -28,33 +28,41 @@ This demo showcases the progress of the milestone 3.
### Required Test Accounts ### Required Test Accounts
**Client Account (Business User):** **Client Account (Business User):**
- Email: `google_payment@gmail.com` - Email: `legendary@krowd.com`
- Password: `Demo2026!` - Password: `Demo2026!`
- Client Name: "Google Payements" - Client Name: "Krow"
**Staff Account (Worker):** **Staff Account (Worker):**
- Phone: `+1 (555) 123-4567` - Phone: `+1 (555) 765-4321`
- OTP Code: `123456` (demo mode) - OTP Code: `123456` (demo mode)
- Name: "Alex Martinez" - Name: "Mariana Torres"
### Prerequisites ### Prerequisites
1. ✅ Both apps installed on demo devices (or simulators) 1. ✅ Both apps installed on demo devices (or simulators)
2. ✅ Network connection stable 2. ✅ Network connection stable
3. ✅ Seed data is ready to be populated 3. ✅ Seed data is ready to be populated
- the database should be empty. - the database should be empty.
- remove unnecessary users from the firebase authetication.
### Pre-Demo Data Seeding ### Pre-Demo Data Seeding
Tracked in : Tracked in :
- https://github.com/Oloodi/krow-workforce/issues/345 - https://github.com/Oloodi/krow-workforce/issues/345
- This should be easily populated and de-populated by the demonstrator to show the empty states in the apps.
- At the start the database should be empty. - At the start the database should be empty.
- Commands to use:
- `make dataconnect-clean`
- To clean the database before seeding.
- `make dataconnect-seed`
- To populate the database with seed data for demo.
--- ---
## 3⃣ Demo Flows ## 3⃣ Demo Flows
**Note:**
To start the demo you should clean the database running the next command:
- make dataconnect-clean
### Demo 0: Show Empty Database ### Demo 0: Show Empty Database
**Purpose:** Demonstrate the starting point before any data exists **Purpose:** Demonstrate the starting point before any data exists
**Action:** Show the empty database in Firebase console **Action:** Show the empty database in Firebase console
@@ -64,9 +72,9 @@ Tracked in :
### Demo 1: Register Business & Show Empty States (Client App) ### Demo 1: Register Business & Show Empty States (Client App)
**Purpose:** Show the client onboarding experience and empty states **Purpose:** Show the client onboarding experience and empty states
**Steps:** **Steps:**
1. Open Client App → Tap "Create Account" 1. Open Client App → Tap "Register"
2. Enter business details (email, password, company name) 2. Enter business email, and password.
3. Complete sign up and navigate to home page 3. Navigate to home page
4. **Point out:** Empty dashboard, no orders, no workers, clean slate 4. **Point out:** Empty dashboard, no orders, no workers, clean slate
--- ---
@@ -74,16 +82,18 @@ Tracked in :
### Demo 2: Register Staff & Show Empty States (Staff App) ### Demo 2: Register Staff & Show Empty States (Staff App)
**Purpose:** Show the worker onboarding experience and empty states **Purpose:** Show the worker onboarding experience and empty states
**Steps:** **Steps:**
1. Open Staff App → Tap "Sign Up" 1. Open Staff App → Tap "Register"
2. Enter phone number and verify with OTP code 2. Enter phone number and verify with OTP code
3. Complete profile setup wizard (skip detailed sections for speed) 3. Navigate to home page
4. Navigate to home page 4. **Point out:** Empty shifts list, no available work yet
5. **Point out:** Empty shifts list, no available work yet
--- ---
> **🔄 PAUSE HERE:** Populate the database with seed data (run seeding script) > **🔄 PAUSE HERE:** Populate the database with seed data (run seeding script)
- Potulate database with the next comand :
- make dataconnect-seed
--- ---
### Demo 3: Client Logs In with Existing Account ### Demo 3: Client Logs In with Existing Account
@@ -93,7 +103,7 @@ Tracked in :
1. Restart Client App 1. Restart Client App
2. Tap "Sign In" button 2. Tap "Sign In" button
3. Enter credentials: 3. Enter credentials:
- Email: `google_payment@gmail.com` - Email: `legendary@krowd.com`
- Password: `Demo2026!` - Password: `Demo2026!`
4. Tap "Sign In" 4. Tap "Sign In"
@@ -133,13 +143,13 @@ Tracked in :
> ``` > ```
>Client Posts Shift [O1] >Client Posts Shift [O1]
> >
>*Vendor Accepts the Shift (This Part is missing for now)* [O2] >*Vendor Accepts the Shift (This Part is missing for now)/ Vendor is selected by client* [O2]
> >
>Worker Searches for a Shift [O3] >Worker Searches for a Shift [O3]
> >
>Worker Applies [O4] >Worker Applies [O4]
> >
>Confirmation [O5] >Confirmation (This Part is missing for now, for now is confirmed)*[O5]
> >
>Worker Checks In [O6] >Worker Checks In [O6]
> >
@@ -157,12 +167,12 @@ Tracked in :
- Order name: "Spring Gala 2026" - Order name: "Spring Gala 2026"
- Date: [Select upcoming date] - Date: [Select upcoming date]
- Location: [Select existing hub] - Location: [Select existing hub]
- Add position: Server, Count: 3, Hours: 5PM-11PM - Add position: Server, Count: 3, Hours: 5PM-9PM
--- ---
### Demo 7: Client Views Order Details ### Demo 7: Client Views Order Details
**Purpose:** Show detailed shift information and worker assignments **Purpose:** Show detailed shift information and worker assignments (this second part is missing for now)
**Screen:** Orders Tab → Tap on any order card **Screen:** Orders Tab → Tap on any order card
**Action:** Expand order to see full details **Action:** Expand order to see full details
@@ -244,7 +254,7 @@ Tracked in :
--- ---
### Demo 14: Staff Checks In to Shift (Day of Event) - [O6] ### Demo 14: Staff Checks In to Shift (Day of Event) [O6]
**Purpose:** Demonstrate the check-in process **Purpose:** Demonstrate the check-in process
**Screen:** Home or My Shifts → Shift Card → "Check In" button **Screen:** Home or My Shifts → Shift Card → "Check In" button
**Action:** Simulate checking in to an active shift **Action:** Simulate checking in to an active shift
@@ -267,7 +277,7 @@ Tracked in :
--- ---
### Demo 16: Staff Checks Out of Shift - [O7] ### Demo 16: Staff Checks Out of Shift - - (this is under fixing)[O7]
**Purpose:** Demonstrate the check-out process and shift completion **Purpose:** Demonstrate the check-out process and shift completion
**Screen:** Home or My Shifts → Shift Card → "Check Out" button **Screen:** Home or My Shifts → Shift Card → "Check Out" button

View File

@@ -7,3 +7,10 @@
* Add **doc comments** where necessary to improve readability and maintainability * Add **doc comments** where necessary to improve readability and maintainability
* **Remove overly complicated or unnecessary logic** introduced by AI and simplify where possible * **Remove overly complicated or unnecessary logic** introduced by AI and simplify where possible
* **Adhere to the design system** and remove all **hard-coded colors and typography**, using shared tokens instead * **Adhere to the design system** and remove all **hard-coded colors and typography**, using shared tokens instead
* Improvement points
- apps/mobile/packages/features/client/client_coverage/lib/src/data/repositories_impl/coverage_repository_impl.dart
- Fix the location field in CoverageShiftRole to use the correct fallback logic.
- line 125 remove redundant location values.
- Need to clarify the difference b/w `case dc.ApplicationStatus.ACCEPTED` and `case dc.ApplicationStatus.CONFIRMED`.
- Update the dataconnect docs.

View File

@@ -85,6 +85,14 @@
} }
}, },
"oauth_client": [ "oauth_client": [
{
"client_id": "933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.krowwithus.client",
"certificate_hash": "c3efbe1642239c599c16ad04c7fac340902fe280"
}
},
{ {
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com", "client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
"client_type": 3 "client_type": 3

View File

@@ -0,0 +1 @@
{"flutter":{"platforms":{"android":{"default":{"projectId":"krow-workforce-dev","appId":"1:933560802882:android:da13569105659ead7757db","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"krow-workforce-dev","appId":"1:933560802882:ios:d2b6d743608e2a527757db","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"krow-workforce-dev","configurations":{"android":"1:933560802882:android:da13569105659ead7757db","ios":"1:933560802882:ios:d2b6d743608e2a527757db","web":"1:933560802882:web:173a841992885bb27757db"}}}}}}

View File

@@ -7,7 +7,7 @@
<key>REVERSED_CLIENT_ID</key> <key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.933560802882-jqpv1l3gjmi3m87b2gu1iq4lg46lkdfg</string> <string>com.googleusercontent.apps.933560802882-jqpv1l3gjmi3m87b2gu1iq4lg46lkdfg</string>
<key>ANDROID_CLIENT_ID</key> <key>ANDROID_CLIENT_ID</key>
<string>933560802882-ikdfv3o5f47g36qqgvfq55o4m19n7gk4.apps.googleusercontent.com</string> <string>933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com</string>
<key>API_KEY</key> <key>API_KEY</key>
<string>AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA</string> <string>AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA</string>
<key>GCM_SENDER_ID</key> <key>GCM_SENDER_ID</key>

View File

@@ -53,6 +53,7 @@ class DefaultFirebaseOptions {
projectId: 'krow-workforce-dev', projectId: 'krow-workforce-dev',
authDomain: 'krow-workforce-dev.firebaseapp.com', authDomain: 'krow-workforce-dev.firebaseapp.com',
storageBucket: 'krow-workforce-dev.firebasestorage.app', storageBucket: 'krow-workforce-dev.firebasestorage.app',
measurementId: 'G-9S7WEQTDKX',
); );
static const FirebaseOptions android = FirebaseOptions( static const FirebaseOptions android = FirebaseOptions(
@@ -69,6 +70,9 @@ class DefaultFirebaseOptions {
messagingSenderId: '933560802882', messagingSenderId: '933560802882',
projectId: 'krow-workforce-dev', projectId: 'krow-workforce-dev',
storageBucket: 'krow-workforce-dev.firebasestorage.app', storageBucket: 'krow-workforce-dev.firebasestorage.app',
androidClientId: '933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com',
iosClientId: '933560802882-jqpv1l3gjmi3m87b2gu1iq4lg46lkdfg.apps.googleusercontent.com',
iosBundleId: 'com.krowwithus.client', iosBundleId: 'com.krowwithus.client',
); );
}
}

View File

@@ -1,7 +1,7 @@
name: krowwithus_client name: krowwithus_client
description: "Krow Client Application" description: "Krow Client Application"
publish_to: "none" publish_to: "none"
version: 0.0.1-M3+4 version: 0.0.1-M3+5
resolution: workspace resolution: workspace
environment: environment:

View File

@@ -129,6 +129,14 @@
} }
}, },
"oauth_client": [ "oauth_client": [
{
"client_id": "933560802882-ikdfv3o5f47g36qqgvfq55o4m19n7gk4.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.krowwithus.staff",
"certificate_hash": "ac917ae8470ab29f1107c773c6017ff5ea5d102d"
}
},
{ {
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com", "client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
"client_type": 3 "client_type": 3

View File

@@ -7,7 +7,7 @@
<key>REVERSED_CLIENT_ID</key> <key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh</string> <string>com.googleusercontent.apps.933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh</string>
<key>ANDROID_CLIENT_ID</key> <key>ANDROID_CLIENT_ID</key>
<string>933560802882-ikdfv3o5f47g36qqgvfq55o4m19n7gk4.apps.googleusercontent.com</string> <string>933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com</string>
<key>API_KEY</key> <key>API_KEY</key>
<string>AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA</string> <string>AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA</string>
<key>GCM_SENDER_ID</key> <key>GCM_SENDER_ID</key>

View File

@@ -48,16 +48,17 @@ class DefaultFirebaseOptions {
static const FirebaseOptions web = FirebaseOptions( static const FirebaseOptions web = FirebaseOptions(
apiKey: 'AIzaSyBqRtZPMGU-Sz5x5UnRrunKu5NSWYyPRn8', apiKey: 'AIzaSyBqRtZPMGU-Sz5x5UnRrunKu5NSWYyPRn8',
appId: '1:933560802882:web:4508ef1ee6d4e6907757db', appId: '1:933560802882:web:173a841992885bb27757db',
messagingSenderId: '933560802882', messagingSenderId: '933560802882',
projectId: 'krow-workforce-dev', projectId: 'krow-workforce-dev',
authDomain: 'krow-workforce-dev.firebaseapp.com', authDomain: 'krow-workforce-dev.firebaseapp.com',
storageBucket: 'krow-workforce-dev.firebasestorage.app', storageBucket: 'krow-workforce-dev.firebasestorage.app',
measurementId: 'G-9S7WEQTDKX',
); );
static const FirebaseOptions android = FirebaseOptions( static const FirebaseOptions android = FirebaseOptions(
apiKey: 'AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4', apiKey: 'AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4',
appId: '1:933560802882:android:d49b8c0f4d19e95e7757db', appId: '1:933560802882:android:1ae05d85c865f77c7757db',
messagingSenderId: '933560802882', messagingSenderId: '933560802882',
projectId: 'krow-workforce-dev', projectId: 'krow-workforce-dev',
storageBucket: 'krow-workforce-dev.firebasestorage.app', storageBucket: 'krow-workforce-dev.firebasestorage.app',
@@ -69,6 +70,9 @@ class DefaultFirebaseOptions {
messagingSenderId: '933560802882', messagingSenderId: '933560802882',
projectId: 'krow-workforce-dev', projectId: 'krow-workforce-dev',
storageBucket: 'krow-workforce-dev.firebasestorage.app', storageBucket: 'krow-workforce-dev.firebasestorage.app',
androidClientId: '933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com',
iosClientId: '933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com',
iosBundleId: 'com.krowwithus.staff', iosBundleId: 'com.krowwithus.staff',
); );
}
}

View File

@@ -1,7 +1,7 @@
name: krowwithus_staff name: krowwithus_staff
description: "Krow Staff Application" description: "Krow Staff Application"
publish_to: 'none' publish_to: 'none'
version: 0.0.1-M3+2 version: 0.0.1-M3+3
resolution: workspace resolution: workspace
environment: environment:

View File

@@ -122,7 +122,7 @@ class CoverageRepositoryImpl implements CoverageRepository {
shiftId: shiftRole.shiftId, shiftId: shiftRole.shiftId,
roleId: shiftRole.roleId, roleId: shiftRole.roleId,
title: shiftRole.role.name, title: shiftRole.role.name,
location: shiftRole.shift.location ?? '', location: shiftRole.shift.location ?? shiftRole.shift.locationAddress ?? '',
startTime: _formatTime(shiftRole.startTime) ?? '00:00', startTime: _formatTime(shiftRole.startTime) ?? '00:00',
workersNeeded: shiftRole.count, workersNeeded: shiftRole.count,
date: shiftRole.shift.date?.toDateTime() ?? date, date: shiftRole.shift.date?.toDateTime() ?? date,

View File

@@ -28,7 +28,7 @@ class OtpVerificationHeader extends StatelessWidget {
.code_sent_message, .code_sent_message,
style: UiTypography.body2r.textSecondary, style: UiTypography.body2r.textSecondary,
children: <InlineSpan>[ children: <InlineSpan>[
TextSpan(text: '+1 $phoneNumber', style: UiTypography.body2b), TextSpan(text: phoneNumber, style: UiTypography.body2b),
TextSpan( TextSpan(
text: t text: t
.staff_authentication .staff_authentication

View File

@@ -1,6 +1,6 @@
# --- Mobile App Development --- # --- Mobile App Development ---
.PHONY: mobile-install mobile-info mobile-client-dev-android mobile-staff-dev-android mobile-client-build mobile-staff-build .PHONY: mobile-install mobile-info mobile-client-dev-android mobile-staff-dev-android mobile-client-build mobile-staff-build mobile-hot-reload mobile-hot-restart
MOBILE_DIR := apps/mobile MOBILE_DIR := apps/mobile
@@ -19,6 +19,21 @@ mobile-info:
@echo "--> Fetching mobile command info..." @echo "--> Fetching mobile command info..."
@cd $(MOBILE_DIR) && melos run info @cd $(MOBILE_DIR) && melos run info
# --- Hot Reload & Restart ---
mobile-hot-reload:
@echo "--> Triggering hot reload for running Flutter app..."
@cd $(MOBILE_DIR) && echo "r" | nc localhost 54321 2>/dev/null || \
(cd apps/client && flutter attach --pid-file /tmp/flutter_client.pid && echo "r") || \
(cd apps/staff && flutter attach --pid-file /tmp/flutter_staff.pid && echo "r") || \
echo "❌ No running Flutter app found. Start an app first with mobile-client-dev-android or mobile-staff-dev-android"
mobile-hot-restart:
@echo "--> Triggering hot restart for running Flutter app..."
@cd $(MOBILE_DIR) && echo "R" | nc localhost 54321 2>/dev/null || \
(cd apps/client && flutter attach --pid-file /tmp/flutter_client.pid && echo "R") || \
(cd apps/staff && flutter attach --pid-file /tmp/flutter_staff.pid && echo "R") || \
echo "❌ No running Flutter app found. Start an app first with mobile-client-dev-android or mobile-staff-dev-android"
# --- Client App --- # --- Client App ---
mobile-client-dev-android: dataconnect-generate-sdk mobile-client-dev-android: dataconnect-generate-sdk
@echo "--> Running client app on Android (device: $(DEVICE))..." @echo "--> Running client app on Android (device: $(DEVICE))..."