feat: introduce FixMate Flutter app and React dashboard

- Add Flutter app shell (FixMateApp/MainScreen) with tabs: Report, Map,
  My Reports, Settings
- Implement capture and review flow (image_picker, geolocator, deterministic
  mock AI), and local storage (SharedPreferences + photo files on mobile)
- Build Map screen with flutter_map, marker clustering, filters, legend,
  marker details, and external maps deeplink
- Add My Reports list (view details, cycle status, delete) and Settings
  (language toggle via Provider, diagnostics, clear all data)
- Introduce JSON i18n loader and LocaleProvider; add EN/BM assets
- Define models (Report, enums) and UI badges (severity, status)

- Add static React dashboard (Leaflet map with clustering, heatmap toggle,
  filters incl. date range, queue, detail drawer), i18n (EN/BM), and
  demo data

- Update build/config and platform setup:
  - Extend pubspec with required packages and register i18n assets
  - Android: add CAMERA and location permissions; pin NDK version
  - iOS: add usage descriptions for camera, photo library, location
  - Gradle properties tuned for Windows/UNC stability
  - Register desktop plugins (Linux/macOS/Windows)
  - .gitignore: ignore .kilocode
  - Overhaul README and replace sample widget test
This commit is contained in:
2025-09-25 18:38:18 +08:00
parent d16e56bdcf
commit 6518df8ac1
39 changed files with 4377 additions and 162 deletions

82
assets/lang/en.json Normal file
View File

@@ -0,0 +1,82 @@
{
"app.name": "FixMate",
"nav.report": "Report",
"nav.map": "Map",
"nav.myReports": "My Reports",
"nav.settings": "Settings",
"btn.capture": "Capture",
"btn.gallery": "Gallery",
"btn.camera": "Camera",
"btn.next": "Next",
"btn.submit": "Submit",
"btn.save": "Save",
"btn.cancel": "Cancel",
"btn.retake": "Retake",
"btn.delete": "Delete",
"btn.clearAll": "Clear All",
"btn.changeStatus": "Change Status",
"btn.view": "View",
"btn.details": "Details",
"btn.retry": "Retry",
"btn.allow": "Allow",
"btn.deny": "Deny",
"btn.confirm": "Confirm",
"btn.close": "Close",
"btn.openMap": "Open Map",
"btn.useSuggestion": "Use Suggestion",
"btn.keepManual": "Keep Manual",
"btn.apply": "Apply",
"btn.reset": "Reset",
"btn.filter": "Filter",
"btn.ok": "OK",
"btn.yes": "Yes",
"btn.no": "No",
"label.category": "Category",
"label.severity": "Severity",
"label.status": "Status",
"label.notes": "Notes",
"label.address": "Address",
"label.location": "Location",
"label.latitude": "Latitude",
"label.longitude": "Longitude",
"label.accuracy": "Accuracy",
"label.timestamp": "Timestamp",
"label.deviceId": "Device ID",
"label.source": "Source",
"label.aiSuggestion": "AI Suggestion",
"status.submitted": "Submitted",
"status.in_progress": "In Progress",
"status.fixed": "Fixed",
"severity.high": "High",
"severity.medium": "Medium",
"severity.low": "Low",
"category.pothole": "Pothole",
"category.streetlight": "Streetlight",
"category.signage": "Signage",
"category.trash": "Trash",
"category.drainage": "Drainage",
"category.other": "Other",
"filter.title": "Filters",
"filter.category": "Category",
"filter.severity": "Severity",
"filter.status": "Status",
"filter.dateRange": "Date Range",
"filter.showOnlyMine": "Show Only Mine",
"map.legend": "Map Legend",
"map.noReports": "No reports found",
"map.clustered": "Clustered",
"toast.reportSaved": "Report saved",
"toast.reportDeleted": "Report deleted",
"toast.storageCleared": "Storage cleared",
"confirm.deleteReport.title": "Delete report?",
"confirm.deleteReport.message": "This action cannot be undone.",
"confirm.clearData.title": "Clear all data?",
"confirm.clearData.message": "This will remove all local reports.",
"settings.language": "Language",
"settings.diagnostics": "Diagnostics",
"settings.theme": "Theme",
"settings.theme.light": "Light",
"settings.theme.dark": "Dark",
"lang.en": "English",
"lang.ms": "Bahasa Malaysia"
}

82
assets/lang/ms.json Normal file
View File

@@ -0,0 +1,82 @@
{
"app.name": "FixMate",
"nav.report": "Lapor",
"nav.map": "Peta",
"nav.myReports": "Laporan Saya",
"nav.settings": "Tetapan",
"btn.capture": "Tangkap",
"btn.gallery": "Galeri",
"btn.camera": "Kamera",
"btn.next": "Seterusnya",
"btn.submit": "Hantar",
"btn.save": "Simpan",
"btn.cancel": "Batal",
"btn.retake": "Ambil Semula",
"btn.delete": "Padam",
"btn.clearAll": "Kosongkan Semua",
"btn.changeStatus": "Tukar Status",
"btn.view": "Lihat",
"btn.details": "Butiran",
"btn.retry": "Cuba Semula",
"btn.allow": "Benarkan",
"btn.deny": "Tolak",
"btn.confirm": "Sahkan",
"btn.close": "Tutup",
"btn.openMap": "Buka Peta",
"btn.useSuggestion": "Guna Cadangan",
"btn.keepManual": "Kekal Manual",
"btn.apply": "Guna",
"btn.reset": "Tetap Semula",
"btn.filter": "Tapis",
"btn.ok": "OK",
"btn.yes": "Ya",
"btn.no": "Tidak",
"label.category": "Kategori",
"label.severity": "Tahap",
"label.status": "Status",
"label.notes": "Nota",
"label.address": "Alamat",
"label.location": "Lokasi",
"label.latitude": "Latitud",
"label.longitude": "Longitud",
"label.accuracy": "Ketepatan",
"label.timestamp": "Masa",
"label.deviceId": "ID Peranti",
"label.source": "Sumber",
"label.aiSuggestion": "Cadangan AI",
"status.submitted": "Dihantar",
"status.in_progress": "Dalam Proses",
"status.fixed": "Selesai",
"severity.high": "Tinggi",
"severity.medium": "Sederhana",
"severity.low": "Rendah",
"category.pothole": "Lubang Jalan",
"category.streetlight": "Lampu Jalan",
"category.signage": "Papan Tanda",
"category.trash": "Sampah",
"category.drainage": "Perparitan",
"category.other": "Lain-lain",
"filter.title": "Penapis",
"filter.category": "Kategori",
"filter.severity": "Tahap",
"filter.status": "Status",
"filter.dateRange": "Julat Tarikh",
"filter.showOnlyMine": "Tunjuk Milik Saya",
"map.legend": "Petunjuk Peta",
"map.noReports": "Tiada laporan",
"map.clustered": "Berkelompok",
"toast.reportSaved": "Laporan disimpan",
"toast.reportDeleted": "Laporan dipadam",
"toast.storageCleared": "Storan dikosongkan",
"confirm.deleteReport.title": "Padam laporan?",
"confirm.deleteReport.message": "Tindakan ini tidak boleh dibuat asal.",
"confirm.clearData.title": "Kosongkan semua data?",
"confirm.clearData.message": "Ini akan memadam semua laporan tempatan.",
"settings.language": "Bahasa",
"settings.diagnostics": "Diagnostik",
"settings.theme": "Tema",
"settings.theme.light": "Terang",
"settings.theme.dark": "Gelap",
"lang.en": "English",
"lang.ms": "Bahasa Malaysia"
}