magnetometerEvents property

  1. @override
Stream<MagnetometerEvent> magnetometerEvents
override

A broadcast stream of events from the device magnetometer.

Implementation

@override
Stream<MagnetometerEvent> get magnetometerEvents {
  if (_magnetometerStreamController == null) {
    _magnetometerStreamController = StreamController<MagnetometerEvent>();
    _featureDetected(
      () {
        final magnetometerSensor = html.Magnetometer();

        setProperty(
          magnetometerSensor,
          'onreading',
          allowInterop(
            (_) {
              _magnetometerStreamController!.add(
                MagnetometerEvent(
                  magnetometerSensor.x as double,
                  magnetometerSensor.y as double,
                  magnetometerSensor.z as double,
                ),
              );
            },
          ),
        );

        magnetometerSensor.start();

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

  return _magnetometerResultStream;
}