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:
79
Makefile
79
Makefile
@@ -17,40 +17,57 @@ include makefiles/tools.mk
|
||||
.PHONY: help
|
||||
|
||||
help:
|
||||
@echo "--------------------------------------------------"
|
||||
@echo " KROW Workforce - Available Makefile Commands"
|
||||
@echo "--------------------------------------------------"
|
||||
@echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
@echo " 🚀 KROW Workforce - Available Makefile Commands"
|
||||
@echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
@echo ""
|
||||
@echo " --- CORE DEVELOPMENT ---"
|
||||
@echo " make install - Installs web frontend dependencies."
|
||||
@echo " make dev - Starts the local web frontend server."
|
||||
@echo " make build - Builds the web frontend for production."
|
||||
@echo " make launchpad-dev - Starts the local launchpad server (Firebase Hosting emulator)."
|
||||
@echo " 📦 WEB FRONTEND (internal/api-harness)"
|
||||
@echo " ────────────────────────────────────────────────────────────────────"
|
||||
@echo " make install Install web frontend dependencies"
|
||||
@echo " make dev Start local web frontend dev server"
|
||||
@echo " make build Build web frontend for production"
|
||||
@echo " make deploy-app [ENV=dev] Build and deploy web app (dev/staging/prod)"
|
||||
@echo ""
|
||||
@echo " --- MOBILE APP DEVELOPMENT ---"
|
||||
@echo " make mobile-install - Bootstrap the mobile workspace (Melos)."
|
||||
@echo " make mobile-info - List custom mobile development commands."
|
||||
@echo " make mobile-client-dev-android - Run client app in dev mode (Android)."
|
||||
@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 " 🏠 LAUNCHPAD (internal/launchpad)"
|
||||
@echo " ────────────────────────────────────────────────────────────────────"
|
||||
@echo " make launchpad-dev Start launchpad dev server (Firebase Hosting)"
|
||||
@echo " make deploy-launchpad-hosting Deploy launchpad to Firebase Hosting"
|
||||
@echo ""
|
||||
@echo " --- DEPLOYMENT ---"
|
||||
@echo " make deploy-launchpad-hosting - Deploys internal launchpad to Firebase Hosting."
|
||||
@echo " make deploy-app [ENV=staging] - Builds and deploys the main web app (default: dev)."
|
||||
@echo " 📱 MOBILE APPS (apps/mobile)"
|
||||
@echo " ────────────────────────────────────────────────────────────────────"
|
||||
@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 " --- DEVELOPMENT TOOLS ---"
|
||||
@echo " make install-melos - Installs Melos globally if not already present."
|
||||
@echo " make install-git-hooks - Installs git pre-push hook to protect main/dev branches."
|
||||
@echo " make sync-prototypes - Builds and copies prototypes from adjacent 'client-krow-poc' repo."
|
||||
@echo " 🗄️ DATA CONNECT & BACKEND (backend/dataconnect)"
|
||||
@echo " ────────────────────────────────────────────────────────────────────"
|
||||
@echo " make dataconnect-init Initialize Firebase Data Connect"
|
||||
@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 " --- DATA CONNECT MANAGEMENT ---"
|
||||
@echo " make dataconnect-init - Initializes Firebase Data Connect."
|
||||
@echo " make dataconnect-deploy - Deploys Data Connect schemas."
|
||||
@echo " make dataconnect-sql-migrate - Applies SQL migrations."
|
||||
@echo " make dataconnect-generate-sdk - Regenerates the Data Connect SDK."
|
||||
@echo " make dataconnect-sync - Runs migrate + deploy + generate-sdk."
|
||||
@echo " make dataconnect-bootstrap-db - ONE-TIME: Full Cloud SQL + Data Connect setup."
|
||||
@echo " 🛠️ DEVELOPMENT TOOLS"
|
||||
@echo " ────────────────────────────────────────────────────────────────────"
|
||||
@echo " make install-melos Install Melos globally (for mobile dev)"
|
||||
@echo " make install-git-hooks Install git pre-push hook (protect main/dev)"
|
||||
@echo " make sync-prototypes Sync prototypes from client-krow-poc repo"
|
||||
@echo ""
|
||||
@echo " make help - Shows this help message."
|
||||
@echo "--------------------------------------------------"
|
||||
@echo " ℹ️ HELP"
|
||||
@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 "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
@@ -1,7 +1,7 @@
|
||||
# KROW Workforce Platform — Feature Demo Plan for Milestone 3
|
||||
|
||||
**Version:** Milestone 3 (v3.0)
|
||||
**Date:** February 2, 2026
|
||||
**Date:** February 3, 2026
|
||||
**Audience:** Business Stakeholders, Customer Engineers, Sales Teams
|
||||
**Duration:** 25-30 minutes
|
||||
|
||||
@@ -28,33 +28,41 @@ This demo showcases the progress of the milestone 3.
|
||||
### Required Test Accounts
|
||||
|
||||
**Client Account (Business User):**
|
||||
- Email: `google_payment@gmail.com`
|
||||
- Email: `legendary@krowd.com`
|
||||
- Password: `Demo2026!`
|
||||
- Client Name: "Google Payements"
|
||||
- Client Name: "Krow"
|
||||
|
||||
**Staff Account (Worker):**
|
||||
- Phone: `+1 (555) 123-4567`
|
||||
- Phone: `+1 (555) 765-4321`
|
||||
- OTP Code: `123456` (demo mode)
|
||||
- Name: "Alex Martinez"
|
||||
- Name: "Mariana Torres"
|
||||
|
||||
### Prerequisites
|
||||
1. ✅ Both apps installed on demo devices (or simulators)
|
||||
2. ✅ Network connection stable
|
||||
3. ✅ Seed data is ready to be populated
|
||||
- the database should be empty.
|
||||
- remove unnecessary users from the firebase authetication.
|
||||
|
||||
### Pre-Demo Data Seeding
|
||||
|
||||
Tracked in :
|
||||
- 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.
|
||||
- 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
|
||||
|
||||
**Note:**
|
||||
To start the demo you should clean the database running the next command:
|
||||
- make dataconnect-clean
|
||||
|
||||
### Demo 0: Show Empty Database
|
||||
**Purpose:** Demonstrate the starting point before any data exists
|
||||
**Action:** Show the empty database in Firebase console
|
||||
@@ -64,9 +72,9 @@ Tracked in :
|
||||
### Demo 1: Register Business & Show Empty States (Client App)
|
||||
**Purpose:** Show the client onboarding experience and empty states
|
||||
**Steps:**
|
||||
1. Open Client App → Tap "Create Account"
|
||||
2. Enter business details (email, password, company name)
|
||||
3. Complete sign up and navigate to home page
|
||||
1. Open Client App → Tap "Register"
|
||||
2. Enter business email, and password.
|
||||
3. Navigate to home page
|
||||
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)
|
||||
**Purpose:** Show the worker onboarding experience and empty states
|
||||
**Steps:**
|
||||
1. Open Staff App → Tap "Sign Up"
|
||||
1. Open Staff App → Tap "Register"
|
||||
2. Enter phone number and verify with OTP code
|
||||
3. Complete profile setup wizard (skip detailed sections for speed)
|
||||
4. Navigate to home page
|
||||
5. **Point out:** Empty shifts list, no available work yet
|
||||
3. Navigate to home page
|
||||
4. **Point out:** Empty shifts list, no available work yet
|
||||
|
||||
---
|
||||
|
||||
> **🔄 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
|
||||
@@ -93,7 +103,7 @@ Tracked in :
|
||||
1. Restart Client App
|
||||
2. Tap "Sign In" button
|
||||
3. Enter credentials:
|
||||
- Email: `google_payment@gmail.com`
|
||||
- Email: `legendary@krowd.com`
|
||||
- Password: `Demo2026!`
|
||||
4. Tap "Sign In"
|
||||
|
||||
@@ -133,13 +143,13 @@ Tracked in :
|
||||
> ```
|
||||
>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 Applies [O4]
|
||||
> ↓
|
||||
>Confirmation [O5]
|
||||
>Confirmation (This Part is missing for now, for now is confirmed)*[O5]
|
||||
> ↓
|
||||
>Worker Checks In [O6]
|
||||
> ↓
|
||||
@@ -157,12 +167,12 @@ Tracked in :
|
||||
- Order name: "Spring Gala 2026"
|
||||
- Date: [Select upcoming date]
|
||||
- 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
|
||||
**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
|
||||
**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
|
||||
**Screen:** Home or My Shifts → Shift Card → "Check In" button
|
||||
**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
|
||||
**Screen:** Home or My Shifts → Shift Card → "Check Out" button
|
||||
|
||||
|
||||
@@ -7,3 +7,10 @@
|
||||
* Add **doc comments** where necessary to improve readability and maintainability
|
||||
* **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
|
||||
|
||||
* 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.
|
||||
|
||||
@@ -85,6 +85,14 @@
|
||||
}
|
||||
},
|
||||
"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_type": 3
|
||||
|
||||
1
apps/mobile/apps/client/firebase.json
Normal file
1
apps/mobile/apps/client/firebase.json
Normal 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"}}}}}}
|
||||
@@ -7,7 +7,7 @@
|
||||
<key>REVERSED_CLIENT_ID</key>
|
||||
<string>com.googleusercontent.apps.933560802882-jqpv1l3gjmi3m87b2gu1iq4lg46lkdfg</string>
|
||||
<key>ANDROID_CLIENT_ID</key>
|
||||
<string>933560802882-ikdfv3o5f47g36qqgvfq55o4m19n7gk4.apps.googleusercontent.com</string>
|
||||
<string>933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com</string>
|
||||
<key>API_KEY</key>
|
||||
<string>AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA</string>
|
||||
<key>GCM_SENDER_ID</key>
|
||||
|
||||
@@ -53,6 +53,7 @@ class DefaultFirebaseOptions {
|
||||
projectId: 'krow-workforce-dev',
|
||||
authDomain: 'krow-workforce-dev.firebaseapp.com',
|
||||
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
||||
measurementId: 'G-9S7WEQTDKX',
|
||||
);
|
||||
|
||||
static const FirebaseOptions android = FirebaseOptions(
|
||||
@@ -69,6 +70,9 @@ class DefaultFirebaseOptions {
|
||||
messagingSenderId: '933560802882',
|
||||
projectId: 'krow-workforce-dev',
|
||||
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
||||
androidClientId: '933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com',
|
||||
iosClientId: '933560802882-jqpv1l3gjmi3m87b2gu1iq4lg46lkdfg.apps.googleusercontent.com',
|
||||
iosBundleId: 'com.krowwithus.client',
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
name: krowwithus_client
|
||||
description: "Krow Client Application"
|
||||
publish_to: "none"
|
||||
version: 0.0.1-M3+4
|
||||
version: 0.0.1-M3+5
|
||||
resolution: workspace
|
||||
|
||||
environment:
|
||||
|
||||
@@ -129,6 +129,14 @@
|
||||
}
|
||||
},
|
||||
"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_type": 3
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<key>REVERSED_CLIENT_ID</key>
|
||||
<string>com.googleusercontent.apps.933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh</string>
|
||||
<key>ANDROID_CLIENT_ID</key>
|
||||
<string>933560802882-ikdfv3o5f47g36qqgvfq55o4m19n7gk4.apps.googleusercontent.com</string>
|
||||
<string>933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com</string>
|
||||
<key>API_KEY</key>
|
||||
<string>AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA</string>
|
||||
<key>GCM_SENDER_ID</key>
|
||||
|
||||
@@ -48,16 +48,17 @@ class DefaultFirebaseOptions {
|
||||
|
||||
static const FirebaseOptions web = FirebaseOptions(
|
||||
apiKey: 'AIzaSyBqRtZPMGU-Sz5x5UnRrunKu5NSWYyPRn8',
|
||||
appId: '1:933560802882:web:4508ef1ee6d4e6907757db',
|
||||
appId: '1:933560802882:web:173a841992885bb27757db',
|
||||
messagingSenderId: '933560802882',
|
||||
projectId: 'krow-workforce-dev',
|
||||
authDomain: 'krow-workforce-dev.firebaseapp.com',
|
||||
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
||||
measurementId: 'G-9S7WEQTDKX',
|
||||
);
|
||||
|
||||
static const FirebaseOptions android = FirebaseOptions(
|
||||
apiKey: 'AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4',
|
||||
appId: '1:933560802882:android:d49b8c0f4d19e95e7757db',
|
||||
appId: '1:933560802882:android:1ae05d85c865f77c7757db',
|
||||
messagingSenderId: '933560802882',
|
||||
projectId: 'krow-workforce-dev',
|
||||
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
||||
@@ -69,6 +70,9 @@ class DefaultFirebaseOptions {
|
||||
messagingSenderId: '933560802882',
|
||||
projectId: 'krow-workforce-dev',
|
||||
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
||||
androidClientId: '933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com',
|
||||
iosClientId: '933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com',
|
||||
iosBundleId: 'com.krowwithus.staff',
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
name: krowwithus_staff
|
||||
description: "Krow Staff Application"
|
||||
publish_to: 'none'
|
||||
version: 0.0.1-M3+2
|
||||
version: 0.0.1-M3+3
|
||||
resolution: workspace
|
||||
|
||||
environment:
|
||||
|
||||
@@ -122,7 +122,7 @@ class CoverageRepositoryImpl implements CoverageRepository {
|
||||
shiftId: shiftRole.shiftId,
|
||||
roleId: shiftRole.roleId,
|
||||
title: shiftRole.role.name,
|
||||
location: shiftRole.shift.location ?? '',
|
||||
location: shiftRole.shift.location ?? shiftRole.shift.locationAddress ?? '',
|
||||
startTime: _formatTime(shiftRole.startTime) ?? '00:00',
|
||||
workersNeeded: shiftRole.count,
|
||||
date: shiftRole.shift.date?.toDateTime() ?? date,
|
||||
|
||||
@@ -28,7 +28,7 @@ class OtpVerificationHeader extends StatelessWidget {
|
||||
.code_sent_message,
|
||||
style: UiTypography.body2r.textSecondary,
|
||||
children: <InlineSpan>[
|
||||
TextSpan(text: '+1 $phoneNumber', style: UiTypography.body2b),
|
||||
TextSpan(text: phoneNumber, style: UiTypography.body2b),
|
||||
TextSpan(
|
||||
text: t
|
||||
.staff_authentication
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# --- 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
|
||||
|
||||
@@ -19,6 +19,21 @@ mobile-info:
|
||||
@echo "--> Fetching mobile command 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 ---
|
||||
mobile-client-dev-android: dataconnect-generate-sdk
|
||||
@echo "--> Running client app on Android (device: $(DEVICE))..."
|
||||
|
||||
Reference in New Issue
Block a user