name: client_app description: Halo Bestie - Client App publish_to: 'none' version: 1.0.0+1 environment: sdk: '>=3.0.0 <4.0.0' dependencies: flutter: sdk: flutter # Firebase (Messaging only — Auth dropped in Phase 3.4, self-managed JWT now) firebase_core: ^3.12.1 firebase_messaging: ^15.2.5 # Social login (kept — buttons gated server-side via /api/shared/auth-providers # until the corresponding OAuth env vars are set on the backend) google_sign_in: ^6.2.1 sign_in_with_apple: ^6.1.0 # HTTP & WebSocket dio: ^5.4.3 web_socket_channel: ^3.0.3 # State management flutter_riverpod: ^2.6.1 hooks_riverpod: ^2.6.1 riverpod_annotation: ^2.6.1 flutter_hooks: ^0.20.5 # Storage shared_preferences: ^2.2.3 # onboarding flag, non-sensitive flutter_secure_storage: ^9.2.2 # refresh token (encrypted) # Navigation go_router: ^13.2.1 flutter_local_notifications: ^21.0.0 # QR code rendering — used by the waiting-payment screen as a placeholder # (mock mode encodes payment_session_id; real QR will come from Xendit later). qr_flutter: ^4.1.0 # Payment method icons (Phase 5.x catalog). Source-of-truth is the backend # `/assets/payment-icons/.svg` endpoint, which wraps the `idn-finlogos` # npm package. Mobile only bundles `placeholder.svg` as the first-launch / # offline fallback; everything else is fetched on demand and persisted via # `flutter_cache_manager` for far-future reuse. flutter_svg: ^2.0.10+1 flutter_cache_manager: ^3.3.1 # OS notification permission — used by the post-payment notif gate # (Phase 4 Stage 4) and the home banner. permission_handler: ^11.3.1 # External URL launching — Tanya Admin sheet (Phase 4 Stage 8) opens # WhatsApp / Telegram via https deeplinks from CC-config-driven handles. url_launcher: ^6.3.0 # Embedded webview for Xendit hosted checkout — used by # `features/payment/screens/xendit_checkout_screen.dart`. We host the # invoice page inside the app (not a Custom Tab) so we can intercept the # `halobestie://` deeplink + return-page URLs and pop deterministically. webview_flutter: ^4.13.0 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^3.0.0 riverpod_generator: ^2.6.2 build_runner: ^2.4.13 custom_lint: ^0.7.0 riverpod_lint: ^2.6.2 # Generates launcher icons for Android + iOS from a single source PNG. # Config block below; run `dart run flutter_launcher_icons` to regenerate. flutter_launcher_icons: ^0.13.1 # In-repo lint rules — lives at the repo root so client_app + mitra_app # share the same set. Adds `no_ref_in_dispose` and any future repo-wide # guardrails. See halo_lints/lib/halo_lints.dart. halo_lints: path: ../halo_lints # Launcher-icon config. Background color mirrors HaloTokens.brandLogoBg # (#FF699F) from lib/core/theme/halo_tokens.dart — the documented bg for # monochrome/white logos. If the source logo ever becomes full-color, # switch both values to `#FFFFFF` (HaloTokens.surface). flutter_launcher_icons: android: true ios: true image_path: "assets/icons/logo.png" remove_alpha_ios: true background_color_ios: "#FF699F" min_sdk_android: 24 adaptive_icon_background: "#FF699F" adaptive_icon_foreground: "assets/icons/logo.png" flutter: uses-material-design: true assets: - assets/images/ - assets/icons/ - assets/payment_icons/ - assets/fonts/ fonts: - family: BricolageGrotesque fonts: - asset: assets/fonts/BricolageGrotesque-Variable.ttf - family: Poppins fonts: - asset: assets/fonts/Poppins-Regular.ttf - asset: assets/fonts/Poppins-Medium.ttf weight: 500 - asset: assets/fonts/Poppins-SemiBold.ttf weight: 600 - asset: assets/fonts/Poppins-Bold.ttf weight: 700 - family: JetBrainsMono fonts: - asset: assets/fonts/JetBrainsMono-Variable.ttf