ios health connect added

watch_integration
tahaalam 1 month ago
parent bfeb3dce4e
commit a395d9b93a

@ -66,9 +66,7 @@ class HealthProvider with ChangeNotifier {
final startTime = _getStartDate();
final endTime = DateTime.now();
healthData = await _healthService.getAllHealthData(startTime, endTime);
isLoading = false;
notifyListeners();
} catch (e) {

@ -1,10 +1,15 @@
import 'dart:io';
import 'package:hmg_patient_app_new/core/common_models/smart_watch.dart';
import 'package:hmg_patient_app_new/features/smartwatch_health_data/watch_connectors/health_connect_helper.dart';
import 'package:hmg_patient_app_new/features/smartwatch_health_data/watch_connectors/huawei_watch_connecter.dart';
import 'package:hmg_patient_app_new/features/smartwatch_health_data/watch_connectors/samsung_health.dart';
import 'package:hmg_patient_app_new/features/smartwatch_health_data/watch_connectors/watch_helper.dart';
class CreateWatchHelper {
static WatchHelper getWatchName(SmartWatchTypes watchType) {
/// if running device is ios
if(Platform.isIOS) return HealthConnectHelper();
switch(watchType){
case SmartWatchTypes.samsung:
return SamsungHealth();

@ -0,0 +1,164 @@
import 'dart:async';
import 'dart:io';
import 'package:async/src/result/result.dart';
import 'package:health/health.dart';
import 'package:hmg_patient_app_new/features/smartwatch_health_data/watch_connectors/watch_helper.dart' show WatchHelper;
import 'package:permission_handler/permission_handler.dart';
import '../model/Vitals.dart';
class HealthConnectHelper extends WatchHelper {
final Health health = Health();
final List<HealthDataType> _healthPermissions = [
HealthDataType.HEART_RATE,
HealthDataType.STEPS,
HealthDataType.BLOOD_OXYGEN,
HealthDataType.BODY_TEMPERATURE,
HealthDataType.DISTANCE_WALKING_RUNNING,
HealthDataType.TOTAL_CALORIES_BURNED
];
Map<String , List<Vitals>> mappedData = {};
@override
FutureOr<void> getHeartRate() async {
try {
final types = [HealthDataType.HEART_RATE];
final endDate = DateTime.now();
final startDate = endDate.subtract(Duration(days: 365));
final data = await getData(startDate, endDate, types);
addDataToMap("heartRate",data );
} catch (e) {
print('Error getting heart rate: $e');
}
}
@override
FutureOr<void> getSleep() async {
try {
final types = [HealthDataType.SLEEP_IN_BED];
final endDate = DateTime.now();
final startDate = endDate.subtract(Duration(days: 365));
final data = await getData(startDate, endDate, types);
addDataToMap("sleep",data );
} catch (e) {
print('Error getting sleep data: $e');
}
}
@override
FutureOr<void> getSteps() async {
try {
final types = [HealthDataType.STEPS];
final endDate = DateTime.now();
final startDate = endDate.subtract(Duration(days: 365));
final data = await getData(startDate, endDate, types);
addDataToMap("steps",data );
print('Steps Data: $data');
} catch (e) {
print('Error getting steps: $e');
}
}
@override
Future<void> getActivity() async {
try {
final types = [HealthDataType.ACTIVE_ENERGY_BURNED];
final endDate = DateTime.now();
final startDate = endDate.subtract(Duration(days: 365));
final data = await getData(startDate, endDate, types);
addDataToMap("activity",data );
print('Activity Data: $data');
} catch (e) {
print('Error getting activity: $e');
}
}
@override
Future<dynamic> retrieveData() async {
return mappedData;
}
@override
Future<dynamic> getBloodOxygen() async {
try {
final types = [HealthDataType.BLOOD_OXYGEN];
final endDate = DateTime.now();
final startDate = endDate.subtract(Duration(days: 365));
final data = await getData(startDate, endDate, types);
addDataToMap("bloodOxygen",data );
} catch (e) {
print('Error getting blood oxygen: $e');
}
}
@override
Future<dynamic> getBodyTemperature() async {
try {
final types = [HealthDataType.BODY_TEMPERATURE];
final endDate = DateTime.now();
final startDate = endDate.subtract(Duration(days: 365));
final data = await getData(startDate, endDate, types);
addDataToMap("bodyTemperature",data );
} catch (e) {
print('Error getting body temp erature: $e');
}
}
@override
FutureOr<void> getDistance() async {
try {
final types = [HealthDataType.DISTANCE_WALKING_RUNNING];
final endDate = DateTime.now();
final startDate = endDate.subtract(Duration(days: 365));
final data = await getData(startDate, endDate, types);
addDataToMap("distance",data );
} catch (e) {
print('Error getting distance: $e');
}
}
@override
Future<Result<bool>> initDevice() async {
try {
final types = _healthPermissions;
final granted = await health.requestAuthorization(types);
await Permission.activityRecognition.request();
await Permission.location.request();
// request access to read historic data
await Health().requestHealthDataHistoryAuthorization();
// await authorize();
return Result.value(granted);
} catch (e) {
print('Authorization error: $e');
return Result.error(false);
}
}
getData(startTime, endTime,type) async {
return await health.getHealthIntervalDataFromTypes(
startDate: startTime,
endDate: endTime,
types: [type],
interval: 86400,
);
}
void addDataToMap(String s, data) {
mappedData[s] = [];
for (var point in data) {
if (point.value is NumericHealthValue) {
final numericValue = (point.value as NumericHealthValue).numericValue;
point.value = NumericHealthValue(
numericValue: numericValue * 100,
);
Vitals vitals = Vitals(
value: (point.value as NumericHealthValue).numericValue.toStringAsFixed(2),
timestamp: point.dateFrom.toString()
);
mappedData[s]?.add(vitals);
}
}
}
}
Loading…
Cancel
Save