getAltitute method

Stream<double> getAltitute()

Implementation

Stream<double> getAltitute() {
  var barometerStream = barometer.getRawWithoutTimelimit();
  List<double> temperatures = [];
  temperature.getRawWithoutTimelimit().listen((event) {
    temperatures.add(event);
  });
  double p0 = 1013.25;

  Stream<double> altStream = barometerStream.map((event) {
    double alt = 0;
    double currentTempC = temperatures.isEmpty ? 15 : temperatures.last;
    double currentTempK = currentTempC + 273.15;
    double ph = event.hectpascal;

    var pressureQuotient = ph / p0;
    var exponent = 1 / 5.255;
    var pressureValue = pow(pressureQuotient, exponent);
    var temperatureValue = currentTempK / 0.0065;
    alt = temperatureValue * (1 - pressureValue);

    return alt;
  });

  var timestampAtLastCall = DateTime.now().millisecondsSinceEpoch;

  return altStream.where((event) {
    if (DateTime.now().millisecondsSinceEpoch - timestampAtLastCall > inMillis) {
      timestampAtLastCall = DateTime.now().millisecondsSinceEpoch;
      return true;
    }
    return false;
  });
}