Commit 82339c8bf5507dfc3f780304a9414b0c7c7e16a1

Authored by 常守达
1 parent 6650b9ef

fix(today):上传后刷新卡片

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) {
... ...
... ... @@ -193,7 +193,7 @@ class UserOnboardingController extends GetxController {
}
if (pageIndex == 7) {
await requestHealthAuthorization();
return await requestHealthAuthorization();
} else if (pageIndex == 8) {
await requestNotificationAuthorization();
}
... ... @@ -222,8 +222,7 @@ class UserOnboardingController extends GetxController {
/// 上传 Apple Health 新数据。
Future<void> _performDataUpload() async {
try {
final result =
await _hostApi.performHealthUpload();
final result = await _hostApi.performHealthUpload();
// AppLogger.i(
// 'Apple Health upload finished: '
// 'common=${result.commonUploadSuccess}(${result.commonCount}), '
... ... @@ -237,9 +236,9 @@ class UserOnboardingController extends GetxController {
}
}
Future<void> requestHealthAuthorization() async {
Future<bool> requestHealthAuthorization() async {
if (isAndroid) {
return;
return true;
} else {
if (GetPlatform.isIOS) {
try {
... ... @@ -250,19 +249,23 @@ class UserOnboardingController extends GetxController {
AppLogger.d("requestHealthClientAuthorization : $success");
if (success) {
_performDataUpload();
return true;
} else {
// Get.to(NoHealthDataPage(
// onRefresh: _performDataUpload,
// ));
return false;
}
return;
}
if (result.status == 1) {
_performDataUpload();
} else {
// status == 1: 已授权;status == 2: 已拒绝
// 两种情况都放行,已授权时额外上传数据
if (result.status == 1) _performDataUpload();
return true;
}
} catch (e) {}
}
}
return false;
}
Future<void> requestNotificationAuthorization() async {
... ...