magnetometer method

Stream<MagnetometerEvent> magnetometer({
  1. Duration samplingPeriod = SensorInterval.normalInterval,
})

Implementation

Stream<MagnetometerEvent> magnetometer({
  Duration samplingPeriod = SensorInterval.normalInterval,
}){
  // The Magnetometer API is not supported by any modern browser.
  if (_magnetometerStreamController == null) {
    _magnetometerStreamController = StreamController<MagnetometerEvent>();
    _featureDetected(
      () {
        final magnetometerSensor = Magnetometer(
          SensorOptions(
            frequency: samplingPeriod.frequency,
          ),
        );

        magnetometerSensor.start();

        magnetometerSensor.onreading = (Event _) {
          _gyroscopeEventStreamController!.add(
            GyroscopeEvent(
              magnetometerSensor.x,
              magnetometerSensor.y,
              magnetometerSensor.z,
            ),
          );
        }.toJS;

        magnetometerSensor.onerror = (SensorErrorEvent e) {
          developer.log(
            'The magnetometer API is supported but something is wrong!',
            error: e,
          );
        }.toJS;
      },
      apiName: 'Magnetometer()',
      permissionName: 'magnetometer',
      onError: () {
        _magnetometerStreamController!.add(MagnetometerEvent(0, 0, 0));
      },
    );
    _magnetometerResultStream =
        _magnetometerStreamController!.stream.asBroadcastStream();

    _magnetometerStreamController!.onCancel = () {
      _magnetometerStreamController!.close();
    };
  }

  return _magnetometerResultStream;
}