|
|
|
import 'dart:async';
|
|
|
|
import 'dart:nativewrappers/_internal/vm/lib/ffi_allocation_patch.dart';
|
|
|
|
import 'dart:ui';
|
|
|
|
|
|
|
|
import 'package:doublefeel_flutter/app/modules/friends/controllers/friend_trend_controller.dart';
|
|
...
|
...
|
@@ -265,7 +266,6 @@ class TodayController extends GetMaterialController { |
|
|
|
}
|
|
|
|
});
|
|
|
|
result.status = 1;
|
|
|
|
checkHealthDataAuthCardVisible();
|
|
|
|
// AppToast.show('刷新完成');
|
|
|
|
if (isFromNoPermissionPage) {
|
|
|
|
Get.back();
|
|
...
|
...
|
@@ -284,7 +284,6 @@ class TodayController extends GetMaterialController { |
|
|
|
AppLogger.e('Apple Health upload failed', error, stackTrace);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
checkHealthDataAuthCardVisible(result);
|
|
|
|
if (isFromNoPermissionPage) {
|
|
|
|
Get.back();
|
|
|
|
}
|
|
...
|
...
|
@@ -303,34 +302,19 @@ class TodayController extends GetMaterialController { |
|
|
|
if (showHealthDataAuthCardStatus.value == 1) {
|
|
|
|
return;
|
|
|
|
} else if (showHealthDataAuthCardStatus.value == 0) {
|
|
|
|
Get.to(NoHealthDataNoPermissionPage(
|
|
|
|
await Get.to(NoHealthDataNoPermissionPage(
|
|
|
|
onRequest: () =>
|
|
|
|
requestHealthAuthorization(isFromNoPermissionPage: true),
|
|
|
|
));
|
|
|
|
checkHealthDataAuthCardVisible();
|
|
|
|
} else {
|
|
|
|
Get.to(NoHealthDataPage(
|
|
|
|
await Get.to(NoHealthDataPage(
|
|
|
|
onRefresh: requestHealthAuthorization,
|
|
|
|
onHelp: () {
|
|
|
|
Get.toNamed(Routes.HELP);
|
|
|
|
},
|
|
|
|
));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// 上传 Apple Health 新数据。
|
|
|
|
Future<void> _performDataUpload() async {
|
|
|
|
try {
|
|
|
|
final result = await _hostApi.performHealthUpload();
|
|
|
|
// AppLogger.i(
|
|
|
|
// 'Apple Health upload finished: '
|
|
|
|
// 'common=${result.commonUploadSuccess}(${result.commonCount}), '
|
|
|
|
// 'sleep=${result.sleepUploadSuccess}(${result.sleepCount}), '
|
|
|
|
// 'activityTarget=${result.activityTargetUploadSuccess}'
|
|
|
|
// '(${result.activityTargetCount}), '
|
|
|
|
// 'success=${result.isSuccess}',
|
|
|
|
// );
|
|
|
|
} catch (error, stackTrace) {
|
|
|
|
AppLogger.e('Apple Health upload failed', error, stackTrace);
|
|
|
|
checkHealthDataAuthCardVisible();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
...
|
...
|
@@ -350,27 +334,48 @@ class TodayController extends GetMaterialController { |
|
|
|
ta.setSuperProperties(
|
|
|
|
{'health_data_permission': result.status.clamp(0, 1)});
|
|
|
|
if (result.status == 1) {
|
|
|
|
await _performDataUpload();
|
|
|
|
_uploadHealthDataWithoutLoading(
|
|
|
|
uploaded: () async {
|
|
|
|
await checkUploadedStatus(firstTime, result);
|
|
|
|
},
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
await checkUploadedStatus(firstTime, result);
|
|
|
|
}
|
|
|
|
bool hasUploaded = false;
|
|
|
|
switch (await _healthApi.getHealthDataEverUploaded()) {
|
|
|
|
case AppSuccess(:final data):
|
|
|
|
hasUploaded = data.flag ?? false;
|
|
|
|
if (hasUploaded && data.startTime != null && data.startTime! > 0) {
|
|
|
|
final firstDayTime = DateUtils.dateOnly(
|
|
|
|
DateTime.fromMillisecondsSinceEpoch(data.startTime! * 1000),
|
|
|
|
);
|
|
|
|
if (firstDayTime.isBefore(firstTime)) {
|
|
|
|
firstSelectableDay.value = firstDayTime;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
case AppFailure():
|
|
|
|
}
|
|
|
|
showHealthDataAuthCardStatus.value = !hasUploaded ? -1 : result.status;
|
|
|
|
} catch (e) {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<void> checkUploadedStatus(
|
|
|
|
DateTime firstTime, HealthAuthorization result) async {
|
|
|
|
bool hasUploaded = false;
|
|
|
|
switch (await _healthApi.getHealthDataEverUploaded()) {
|
|
|
|
case AppSuccess(:final data):
|
|
|
|
hasUploaded = data.flag ?? false;
|
|
|
|
if (hasUploaded && data.startTime != null && data.startTime! > 0) {
|
|
|
|
final firstDayTime = DateUtils.dateOnly(
|
|
|
|
DateTime.fromMillisecondsSinceEpoch(data.startTime! * 1000),
|
|
|
|
);
|
|
|
|
if (firstDayTime.isBefore(firstTime)) {
|
|
|
|
firstSelectableDay.value = firstDayTime;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
case AppFailure():
|
|
|
|
}
|
|
|
|
showHealthDataAuthCardStatus.value = !hasUploaded ? -1 : result.status;
|
|
|
|
}
|
|
|
|
|
|
|
|
_uploadHealthDataWithoutLoading({VoidCallback? uploaded}) {
|
|
|
|
try {
|
|
|
|
_hostApi.performHealthUpload().then((_) {
|
|
|
|
unawaited(loadDataForDate(selectedDate.value));
|
|
|
|
uploaded?.call();
|
|
|
|
});
|
|
|
|
} catch (error, stackTrace) {
|
|
|
|
AppLogger.e('Apple Health upload failed', error, stackTrace);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<void> checkNotificationCardVisible() async {
|
|
|
|
try {
|
|
|
|
Permission.notification.status.then((status) {
|
...
|
...
|
|