Files
halobestie-clone/client_app/pubspec.yaml
ramadhan sjamsani 7ae8f33b2c Phase 4 Stage 4: notif gate + home permission-denied banner
Notif Gate full screen at /onboarding/notif-gate, reached from waiting
payment on confirmed/consumed status. Auto-advances to /chat/searching
when permission is already granted; otherwise shows izinkan/nanti aja
HaloButton CTAs. NotifPermission helper wraps firebase_messaging +
permission_handler with readStatus/request/openAppSettings; cached in
notifPermissionStatusProvider that re-reads on app foreground via an
internal WidgetsBindingObserver.

home_screen amber banner above-the-fold when notifPermissionStatusProvider
reports denied. Dismissable for the session via homeNotifBannerDismissedProvider
(in-memory StateProvider, no persistence - cold-restart re-shows).
nyalain CTA -> openAppSettings().

Manifest + Info.plist permission entries added.

Note: main.dart still pre-requests FirebaseMessaging permission at boot,
which can pre-resolve status so the gate auto-advances instead of acting
as the first prompt. Left intact for now; can be removed in a later
stage if the gate should be the first-ask UX.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 16:36:46 +08:00

81 lines
2.0 KiB
YAML

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
# OS notification permission — used by the post-payment notif gate
# (Phase 4 Stage 4) and the home banner.
permission_handler: ^11.3.1
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
flutter:
uses-material-design: true
assets:
- assets/images/
- assets/images/splash/
- 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