|
...
|
...
|
@@ -104,8 +104,11 @@ class TodayController extends GetMaterialController { |
|
|
|
// ── HRV 表盘引导 Banner ───────────────────
|
|
|
|
final showHrvAdBanner = false.obs;
|
|
|
|
final showPartnerAdBanner = false.obs;
|
|
|
|
final showNotificationAuthorizationBanner = false.obs;
|
|
|
|
|
|
|
|
void dismissHrvAdBanner() => showHrvAdBanner.value = false;
|
|
|
|
void dismissNotificationAuthorizationBanner() =>
|
|
|
|
showNotificationAuthorizationBanner.value = false;
|
|
|
|
|
|
|
|
Future<void> dismissPartnerAdBanner() async {
|
|
|
|
final userId =
|
|
...
|
...
|
@@ -160,6 +163,7 @@ class TodayController extends GetMaterialController { |
|
|
|
checkAddFriendVisible();
|
|
|
|
checkHrvAdBannerVisible();
|
|
|
|
checkHealthDataAuthCardVisible();
|
|
|
|
checkNotificationAuthorizationBannerVisible();
|
|
|
|
checkNotificationCardVisible();
|
|
|
|
if (!Get.find<UserStateService>().isVip) {
|
|
|
|
getProductList();
|
|
...
|
...
|
@@ -196,6 +200,24 @@ class TodayController extends GetMaterialController { |
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<void> checkNotificationAuthorizationBannerVisible() async {
|
|
|
|
if (isFriend) {
|
|
|
|
showNotificationAuthorizationBanner.value = false;
|
|
|
|
} else {
|
|
|
|
try {
|
|
|
|
Permission.notification.status.then((status) {
|
|
|
|
if (status.isGranted) {
|
|
|
|
showNotificationAuthorizationBanner.value = false;
|
|
|
|
} else {
|
|
|
|
showNotificationAuthorizationBanner.value = true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
} on Exception catch (e) {
|
|
|
|
AppLogger.e(e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void checkAddFriendVisible() {
|
|
|
|
if (isFriend) {
|
|
|
|
showPartnerAdBanner.value = false;
|
|
...
|
...
|
@@ -504,6 +526,7 @@ class TodayController extends GetMaterialController { |
|
|
|
hrvAnnotations.clear();
|
|
|
|
|
|
|
|
v2HealthData.value = null;
|
|
|
|
v2ActivityTarget.value = null;
|
|
|
|
// v2StressScore.value = null;
|
|
|
|
}
|
|
|
|
|
|
...
|
...
|
@@ -697,12 +720,13 @@ class TodayController extends GetMaterialController { |
|
|
|
super.didChangeAppLifecycleState(state);
|
|
|
|
|
|
|
|
if (state == AppLifecycleState.resumed) {
|
|
|
|
// var today = DateUtils.dateOnly(DateTime.now());
|
|
|
|
// lastSelectableDay.value = today;
|
|
|
|
// changeDate(today);
|
|
|
|
var today = DateUtils.dateOnly(DateTime.now());
|
|
|
|
lastSelectableDay.value = today;
|
|
|
|
changeDate(today);
|
|
|
|
checkAddFriendVisible();
|
|
|
|
checkHrvAdBannerVisible();
|
|
|
|
checkHealthDataAuthCardVisible();
|
|
|
|
checkNotificationAuthorizationBannerVisible();
|
|
|
|
_performHealthDataUpload();
|
|
|
|
// _startCoreCaculate();
|
|
|
|
// unawaited(loadDataForDate(selectedDate.value));
|
|
...
|
...
|
@@ -720,7 +744,33 @@ class TodayController extends GetMaterialController { |
|
|
|
checkAddFriendVisible();
|
|
|
|
checkHrvAdBannerVisible();
|
|
|
|
checkHealthDataAuthCardVisible(isPullToRefresh: isPullToRefresh);
|
|
|
|
checkNotificationAuthorizationBannerVisible();
|
|
|
|
_performHealthDataUpload();
|
|
|
|
// await loadDataForDate(selectedDate.value);
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<void> requestNotificationAuthorization() async {
|
|
|
|
try {
|
|
|
|
final status = await Permission.notification.status;
|
|
|
|
|
|
|
|
if (status.isGranted) {
|
|
|
|
// 已授权,无需再请求
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (status.isPermanentlyDenied) {
|
|
|
|
// 用户永久拒绝(Android),引导去设置
|
|
|
|
await openAppSettings();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// 未决定 → 弹出系统授权弹窗
|
|
|
|
final result = await Permission.notification.request();
|
|
|
|
AppLogger.d(result.isGranted
|
|
|
|
? 'Notification authorization granted'
|
|
|
|
: 'Notification authorization skipped');
|
|
|
|
} catch (error) {
|
|
|
|
AppLogger.e('Notification authorization failed: $error');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} |
...
|
...
|
|