MotorSignal-App/lib/features/performance/performance_providers.dart

39 lines
1.4 KiB
Dart

import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../database/database.dart';
import '../../services/telemetry_service.dart';
import '../garage/garage_providers.dart';
import '../records/records_service.dart';
import '../rides/ride_state_machine.dart';
import 'models/performance_launch_models.dart';
import 'services/monotonic_clock.dart';
import 'services/performance_launch_state_machine.dart';
/// Monotonic clock provider for performance timing domain.
final monotonicClockProvider = Provider<MonotonicClock>((ref) {
return SystemMonotonicClock();
});
/// Authoritative provider for Performance Launch Mode state machine.
final performanceLaunchProvider =
StateNotifierProvider<PerformanceLaunchStateMachine, PerformanceLaunchAttempt>((ref) {
final db = ref.watch(databaseProvider);
final telemetryService = ref.watch(telemetryServiceProvider);
final recordsService = ref.watch(recordsServiceProvider.notifier);
final clock = ref.watch(monotonicClockProvider);
return PerformanceLaunchStateMachine(
db: db,
telemetryStream: telemetryService.telemetryStream,
recordsService: recordsService,
clock: clock,
activeRideIdReader: () {
final rideState = ref.read(rideStateMachineProvider);
return rideState.state == RideState.riding ? rideState.dbId : null;
},
motorcycleIdReader: () {
final defaultBike = ref.read(defaultMotorcycleProvider);
return defaultBike?.id;
},
);
});