Как именно использовать пакет работоспособности в Flutter

flutter #healthkit #google-fit

#flutter #healthkit #google-fit

Вопрос:

Я использую health 3.2.0 https://pub.dev/packages/health пакет, и после всех усилий я могу успешно получить доступ к авторизации. Проблема, с которой я сталкиваюсь, заключается в том, что когда я получаю данные о работоспособности от типов, используя фабрику работоспособности, она ничего не возвращает, а длина списка точек работоспособности каждый раз равна 0.

PS Для чего используется идентификатор клиента OAuth и файл client_secret.json, который я загрузил, когда получил идентификатор клиента. Должен ли я размещать их в любом месте кода?

Мой код:

   DateTime startDate = DateTime(2021, 10, 10, 0, 0, 0);
  DateTime endDate = DateTime(2025, 11, 07, 23, 59, 59);

  Future fetchHealthData() async {
    HealthFactory healthFactory = new HealthFactory();

    // define the types to get
    List<HealthDataType> types = [
      HealthDataType.STEPS,
      HealthDataType.WEIGHT,
      HealthDataType.HEIGHT,
      HealthDataType.BLOOD_GLUCOSE,
    ];

    bool accessAuthorization =
        await healthFactory.requestAuthorization(types).catchError((e) {
      print("authorization error:");
      print(e.toString());
    });
    print("authorization granted: $accessAuthorization");
    if (accessAuthorization) {
      try {
        // fetch new data
        List<HealthDataPoint> healthData = await healthFactory
            .getHealthDataFromTypes(startDate, endDate, types);

        // printing length of healtData point list, this is 0
        print("health data points length: ${healthData.length}");

        // save all the new data points
        _healthDataPointList.addAll(healthData);
      } catch (e) {
        print("Caught exception in getHealthDataFromTypes: $e");
      }

      // filter out duplicates
      _healthDataPointList =
          HealthFactory.removeDuplicates(_healthDataPointList);
      print("health data entry points: ${_healthDataPointList.length}");

      // print the results
      _healthDataPointList.forEach((x) {
        print("Data point: $x");
        // steps  = x.value.round();
      });

      // print("Steps: $steps");

    } else {
      print("Authorization not granted");
    }
  }
 

Ответ №1:

Симуляторы Android и Apple не могут имитировать отображаемые данные о работоспособности, поэтому длина точек данных о работоспособности всегда будет равна 0.

Попробуйте подключить реальное устройство.