userAccelerometerEvents property

  1. @override
Stream<UserAccelerometerEvent> userAccelerometerEvents
override

Events from the device accelerometer with gravity removed.

Implementation

@override
Stream<UserAccelerometerEvent> get userAccelerometerEvents {
  if (_userAccelerometerStreamController == null) {
    _userAccelerometerStreamController =
        StreamController<UserAccelerometerEvent>();
    _featureDetected(
      () {
        final linearAccelerationSensor = html.LinearAccelerationSensor();

        setProperty(
          linearAccelerationSensor,
          'onreading',
          allowInterop(
            (_) {
              _userAccelerometerStreamController!.add(
                UserAccelerometerEvent(
                  linearAccelerationSensor.x as double,
                  linearAccelerationSensor.y as double,
                  linearAccelerationSensor.z as double,
                ),
              );
            },
          ),
        );

        linearAccelerationSensor.start();

        linearAccelerationSensor.onError.forEach(
          (e) => developer.log(
              'The linear acceleration API is supported but something is wrong!',
              error: e),
        );
      },
      apiName: 'LinearAccelerationSensor()',
      permissionName: 'accelerometer',
      onError: () {
        _userAccelerometerStreamController!
            .add(UserAccelerometerEvent(0, 0, 0));
      },
    );
    _userAccelerometerResultStream =
        _userAccelerometerStreamController!.stream.asBroadcastStream();
  }

  return _userAccelerometerResultStream;
}