accelerometerEvents property

  1. @override
Stream<AccelerometerEvent> accelerometerEvents
override

A broadcast stream of events from the device accelerometer.

Implementation

@override
Stream<AccelerometerEvent> get accelerometerEvents {
  if (_accelerometerStreamController == null) {
    _accelerometerStreamController = StreamController<AccelerometerEvent>();
    _featureDetected(
      () {
        final accelerometer = html.Accelerometer();

        setProperty(
          accelerometer,
          'onreading',
          allowInterop(
            (_) {
              _accelerometerStreamController!.add(
                AccelerometerEvent(
                  accelerometer.x as double,
                  accelerometer.y as double,
                  accelerometer.z as double,
                ),
              );
            },
          ),
        );

        accelerometer.start();

        accelerometer.onError.forEach(
          (e) => developer.log(
              'The accelerometer API is supported but something is wrong!',
              error: e),
        );
      },
      apiName: 'Accelerometer()',
      permissionName: 'accelerometer',
      onError: () {
        _accelerometerStreamController!.add(AccelerometerEvent(0, 0, 0));
      },
    );
    _accelerometerResultStream =
        _accelerometerStreamController!.stream.asBroadcastStream();
  }

  return _accelerometerResultStream;
}