driving_conditions 0.6.0 copy "driving_conditions: ^0.6.0" to clipboard
driving_conditions: ^0.6.0 copied to clipboard

Turn weather data into driving safety guidance. Road surface classification, grip estimation, visibility degradation, and Monte Carlo safety scoring. Pure Dart, no Flutter dependency.

example/main.dart

import 'package:driving_conditions/driving_conditions.dart';
import 'package:driving_weather/driving_weather.dart';
import 'package:fleet_hazard/fleet_hazard.dart';
import 'package:latlong2/latlong.dart';

void main() {
  final condition = WeatherCondition(
    precipType: PrecipitationType.snow,
    intensity: PrecipitationIntensity.heavy,
    temperatureCelsius: -4,
    visibilityMeters: 180,
    windSpeedKmh: 20,
    iceRisk: false,
    source: ObservationSource.measured,
    timestamp: DateTime.now(),
  );

  final assessment = DrivingConditionAssessment.fromCondition(condition);

  // THE GUARD (see quickstart.dart). `null` means NOT MEASURED. A safety score
  // cannot be simulated for a road we have no data for, and substituting a
  // grip factor of 1.0 to make the call compile would fabricate exactly the
  // reassurance this contract exists to refuse.
  final surface = assessment.surfaceState;
  final grip = assessment.gripFactor;
  final visibility = condition.visibilityMeters;

  if (surface == null || grip == null || visibility == null) {
    print('surfaceState: unknown (no data received)');
    print('advisory:     ${assessment.advisoryMessage}');
    return;
  }

  // --- CPU path: constant provider (default 0.8 baseline) ---
  final defaultResult = const SafetyScoreSimulator().simulate(
    speed: 50,
    gripFactor: grip,
    surface: surface,
    visibilityMeters: visibility,
    seed: 42,
  );

  // --- CPU path: fleet adapter (icy reports reduce confidence) ---
  final icyReports = [
    FleetReport(
      vehicleId: 'v1',
      position: const LatLng(35.1, 136.9),
      timestamp: DateTime.now(),
      condition: RoadCondition.icy,
    ),
    FleetReport(
      vehicleId: 'v2',
      position: const LatLng(35.1, 136.9),
      timestamp: DateTime.now(),
      condition: RoadCondition.snowy,
    ),
  ];

  final fleetResult = SafetyScoreSimulator(
    provider: FleetHazardConfidenceAdapter(icyReports),
  ).simulate(
    speed: 50,
    gripFactor: grip,
    surface: surface,
    visibilityMeters: visibility,
    seed: 42,
  );

  print('surfaceState: ${surface.name}');
  print('advisory:     ${assessment.advisoryMessage}');
  print('');
  print('--- default (constant 0.8 — an ASSERTED value, not a measurement) ---');
  final defaultFleet = defaultResult.score.fleetConfidenceScore;
  print(
    'fleet confidence: '
    '${defaultFleet == null ? 'no fleet data' : defaultFleet.toStringAsFixed(2)}',
  );
  print('overall safety:   ${defaultResult.score.overall.toStringAsFixed(2)}');
  print('incident count:   ${defaultResult.incidentCount}');
  print('');
  print('--- fleet adapter (icy + snowy reports) ---');
  final fleet = fleetResult.score.fleetConfidenceScore;
  print(
    'fleet confidence: '
    '${fleet == null ? 'no fleet data' : fleet.toStringAsFixed(2)}',
  );
  print('overall safety:   ${fleetResult.score.overall.toStringAsFixed(2)}');
  print('incident count:   ${fleetResult.incidentCount}');
}
0
likes
150
points
646
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Turn weather data into driving safety guidance. Road surface classification, grip estimation, visibility degradation, and Monte Carlo safety scoring. Pure Dart, no Flutter dependency.

Repository (GitHub)
View/report issues
Contributing

Topics

#driving #safety #weather #navigation #winter-driving

License

BSD-3-Clause (license)

Dependencies

driving_weather, equatable, fleet_hazard, navigation_safety_core, snow_rendering

More

Packages that depend on driving_conditions