import 'dart:async'; import 'package:flutter_riverpod/flutter_riverpod.dart'; enum CameraConnectionState { disconnected, connecting, connected, recording, error, } enum CameraTriggerEventType { crashDetected, hardBraking, highGForce, highLeanAngle, topSpeedExceeded, manualBookmark, } class CameraTriggerEvent { final CameraTriggerEventType type; final DateTime timestamp; final double? peakValue; final String description; const CameraTriggerEvent({ required this.type, required this.timestamp, this.peakValue, required this.description, }); } abstract class CameraProvider { String get name; CameraConnectionState get connectionState; Stream get stateStream; Future connect(); Future disconnect(); Future startRecording(); Future stopRecording(); Future onTelemetryEvent(CameraTriggerEvent event); } /// Fallback / Mock provider for development and testing class MockCameraProvider implements CameraProvider { @override String get name => 'MockActionCamera'; CameraConnectionState _state = CameraConnectionState.disconnected; final _stateController = StreamController.broadcast(); @override CameraConnectionState get connectionState => _state; @override Stream get stateStream => _stateController.stream; final List capturedEvents = []; @override Future connect() async { _state = CameraConnectionState.connected; _stateController.add(_state); return true; } @override Future disconnect() async { _state = CameraConnectionState.disconnected; _stateController.add(_state); } @override Future startRecording() async { if (_state == CameraConnectionState.connected) { _state = CameraConnectionState.recording; _stateController.add(_state); return true; } return false; } @override Future stopRecording() async { if (_state == CameraConnectionState.recording) { _state = CameraConnectionState.connected; _stateController.add(_state); return true; } return false; } @override Future onTelemetryEvent(CameraTriggerEvent event) async { capturedEvents.add(event); } void dispose() { _stateController.close(); } } final cameraProvider = Provider((ref) { return MockCameraProvider(); });