Как преобразовать поток датчиков в Flutter в менее частый поток? - PullRequest
0 голосов
/ 03 апреля 2020

Я создал поток, который отправляет показания барометра каждые несколько миллисекунд (не настраивается с помощью Android Sensors API). Используя этот поток, я хотел бы создать другой поток, который получает показания только каждые 10 секунд. Это потому, что я хочу сравнить показания только между 10-секундными интервалами, чтобы любая обнаруженная разница показаний давления была достаточно значительной для обработки.

Вот мой код для потока показаний Барометра:

// Starts subscription to barometer events
  static startBarometerService() {
    oldReading = 0;
    newReading = 0;
    upFloor = false;
    downFloor = false;
    subscription = barometerEvents.listen(onBarometer);
    streamController = new StreamController();
    print("[BAROMETER] started listening to barometer events");
  }

  static onBarometer(BarometerEvent event) {
    oldReading = newReading;
    newReading = event.reading;
    updateFloor();
  }

У меня также есть другой поток, созданный на основе потока барометра, для сравнения высоты и проверки того, поднялся ли пользователь вверх или вниз по полу, например:

static updateFloor(double reading) {
    if ((newReading - oldReading) > 10) {
      upFloor = true;
      print("[BAROMETER] User went up one floor");
      streamController.add([upFloor, downFloor]);
    } else if ((newReading - oldReading) < -10) {
      downFloor = true;
      streamController.add([upFloor, downFloor]);
      print("[BAROMETER] User went down one floor");
    }
    else {
      upFloor = false;
      downFloor = false;
    }
  }

Теперь я хочу свой newReading и oldReading для выборки с интервалом в 10 секунд, чтобы иметь достаточно существенную разницу.

Да, я знаю, что API датчиков Android позволяет мне вводить пользовательскую частоту дискретизации, но это не работает надежно (в документации по API говорится, что это воспринимается только как «подсказка системе»). Поэтому я хотел бы знать, как реализовать этот таймер periodi c, используя код Dart.

Заранее спасибо за помощь!

...