# Modification Implementation Plan: Camera Stream & Isolate Processing ## Phase 1: Preparation & Dependencies - [x] Add `opencv_dart` dependency to `pubspec.yaml`. - [x] Run `flutter pub get`. - [x] Run existing analysis to ensure a clean slate. ## Phase 2: Domain & Isolate Logic - [x] Create `lib/domain/entities/quality_status.dart`. - [x] Create `lib/core/services/image_processor_isolate.dart`. - [x] Implement the Isolate entry point `spawn`. - [x] Implement the message handling loop. - [x] Implement logic to convert `CameraImage` to `cv.Mat`. - [x] Implement `Laplacian` variance (Sharpness). - [x] Implement `mean` intensity (Luminance). - [x] Implement ROI logic. - [x] Return `QualityStatus`. ## Phase 3: Data Layer Updates - [x] Update `lib/data/datasources/camera_datasource.dart`: - [x] Add `startImageStream` method signature and implementation. - [x] Add `stopImageStream` method signature and implementation. - [x] Update `lib/domain/repositories/scanner_repository.dart` interface. - [x] Update `lib/data/repositories/scanner_repository_impl.dart` implementation. ## Phase 4: Presentation Layer - State Management - [x] Update `lib/presentation/providers/scanner_provider.dart`: - [x] Update `ScannerState` to include `QualityStatus`. - [x] Update `ScannerNotifier`: - [x] Initialize and dispose the Isolate. - [x] Implement `startScanning` to listen to camera stream. - [x] Implement throttling logic (5-10 FPS). - [x] Send frames to Isolate and update state with results. ## Phase 5: Presentation Layer - UI - [x] Create `lib/presentation/widgets/fingerprint_guide_painter.dart`: - [x] Implement `CustomPainter` to draw the guide rectangle. - [x] Accept color/status as parameters. - [x] Update `lib/presentation/widgets/camera_preview_widget.dart`: - [x] Replace static overlay with `CustomPaint` using `FingerprintGuidePainter`. - [x] Connect to `ScannerState` for dynamic color updates. - [x] Update `lib/presentation/screens/scanner_screen.dart`: - [x] Update "Capture" button to be enabled/disabled based on `QualityStatus`. - [x] Trigger `startScanning` on ready state. ## Phase 6: Verification & Cleanup - [x] Run `dart_fix`. - [x] Run `flutter analyze`. - [x] Run `dart_format`. - [x] Verify functionality (requires physical device for full camera stream test, or mock for logic). ## Phase 7: UI Refinements & Display Configuration - [x] Create `lib/presentation/providers/display_config_provider.dart` for managing UI visibility. - [x] Create `lib/presentation/widgets/display_config_dialog.dart` for settings. - [x] Update `lib/presentation/widgets/camera_preview_widget.dart`: - [x] Fix aspect ratio using `Transform.scale` to fill screen (Live View). - [x] Integrate `DisplayConfig` to toggle guide, quality, and status text. - [x] Update `lib/presentation/screens/scanner_screen.dart`: - [x] Add Settings button to AppBar. ## Phase 8: Quality Analysis Tuning - [x] Update `lib/core/services/quality_checker.dart`: - [x] Increase `isBigEnough` threshold from 5% to 25% to prevent background objects from validating the position check when the finger is removed. ## Journal - Initial plan created. - Phase 1 complete: Added `opencv_dart` and verified dependencies. - Phase 2 complete: Implemented Isolate logic with `opencv_dart`. - Phase 3 complete: Updated Data and Domain layers for streaming. - Phase 4 complete: Implemented State Management with Throttled Stream. - Phase 5 complete: Implemented UI with CustomPainter and dynamic feedback. - Phase 6 complete: Verified and cleaned up. - Phase 7 complete: Fixed CameraPreview aspect ratio and added Display Settings dialog. - Phase 8 complete: Tuned quality checker to strictly enforce finger presence (25% area coverage).