- Add google_mlkit_barcode_scanning dependency
- Scan priority: Barcode → OCR text → Nothing found
- Support UPC-A/E, EAN-8/13, QR, DataMatrix, PDF417, Code128/39
- BarcodeData class with product code detection and NDC hints
- ScanResult with type indicator (barcode|text|empty)
- Updated capture screen with barcode-specific UI:
- Green overlay for barcodes, blue for text
- Product code badge for UPC/EAN barcodes
- Format-specific result display
- Backward compatible legacy API (extractText, getTextBlocks)
- Create BiometricService with local_auth integration
- Check biometric availability (Face ID, Touch ID, fingerprint)
- Authenticate with fallback to PIN
- Session state: don't re-prompt within session
- Configurable lock policies: always, after 5 min inactive, never
- Create AuthGate widget that wraps the app
- Shows biometric prompt on app launch
- Handles app resume from background
- Activity tracking for inactivity timeout
- Graceful error handling with user-friendly messages
- Update SettingsScreen with biometric configuration
- Enable/disable toggle with verification
- Lock timing policy selection
- Edge case handling: not enrolled, not available
- Store preferences in shared_preferences
- Handle multiple failures with attempt counter
- Create InouWebView widget with:
- JavaScript bridge for native ↔ web communication
- Auth cookie/token handling
- Pull-to-refresh support
- Loading indicator with progress
- Offline/error state handling with retry
- Enhance WebViewScreen with:
- Full-screen WebView with optional app bar
- Back button handling (WebView history first, then app nav)
- Share functionality (copies to clipboard)
- Menu actions (copy URL, open in browser)
- Haptic feedback support via JS bridge
- Add deep link handling in main.dart:
- inou.com/app/* URLs open in WebView
- Navigator route generation for deep links
JS Bridge API:
- window.inouNativeBridge.postMessage(action, data)
- window.inouNativeBridge.share(title, text, url)
- window.inouNativeBridge.haptic(type)
- window.inouNativeBridge.setToken(token)
- window.inouNativeBridge.logout()