39 lines
1.4 KiB
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;
|
|
},
|
|
);
|
|
});
|