Showing
7 changed files
with
35 additions
and
9 deletions
| @@ -122,7 +122,7 @@ class HomeController extends GetxController { | @@ -122,7 +122,7 @@ class HomeController extends GetxController { | ||
| 122 | } | 122 | } |
| 123 | switch (index) { | 123 | switch (index) { |
| 124 | case 0: | 124 | case 0: |
| 125 | - // ta.track('enter_doublefeel_my_page'); | 125 | + Get.find<TodayController>().refreshTab(); |
| 126 | break; | 126 | break; |
| 127 | case 3: | 127 | case 3: |
| 128 | ta.track('enter_doublefeel_my_page'); | 128 | ta.track('enter_doublefeel_my_page'); |
| @@ -96,6 +96,7 @@ class TodayController extends GetMaterialController { | @@ -96,6 +96,7 @@ class TodayController extends GetMaterialController { | ||
| 96 | final isLoadingToday = false.obs; | 96 | final isLoadingToday = false.obs; |
| 97 | final showHealthDataAuthCardStatus = 1.obs; | 97 | final showHealthDataAuthCardStatus = 1.obs; |
| 98 | final stressSubtitle = ''.obs; | 98 | final stressSubtitle = ''.obs; |
| 99 | + bool _isFirstLoad = true; | ||
| 99 | 100 | ||
| 100 | // ── HRV 表盘引导 Banner ─────────────────── | 101 | // ── HRV 表盘引导 Banner ─────────────────── |
| 101 | final showHrvAdBanner = false.obs; | 102 | final showHrvAdBanner = false.obs; |
| @@ -253,6 +254,7 @@ class TodayController extends GetMaterialController { | @@ -253,6 +254,7 @@ class TodayController extends GetMaterialController { | ||
| 253 | if (selectedDate.value == date) { | 254 | if (selectedDate.value == date) { |
| 254 | isLoadingToday.value = false; | 255 | isLoadingToday.value = false; |
| 255 | } | 256 | } |
| 257 | + _isFirstLoad = false; | ||
| 256 | } | 258 | } |
| 257 | } | 259 | } |
| 258 | 260 | ||
| @@ -659,6 +661,10 @@ class TodayController extends GetMaterialController { | @@ -659,6 +661,10 @@ class TodayController extends GetMaterialController { | ||
| 659 | } | 661 | } |
| 660 | 662 | ||
| 661 | Future<void> refreshTab() async { | 663 | Future<void> refreshTab() async { |
| 664 | + if (_isFirstLoad) { | ||
| 665 | + _isFirstLoad = false; | ||
| 666 | + return; | ||
| 667 | + } | ||
| 662 | checkAddFriendVisible(); | 668 | checkAddFriendVisible(); |
| 663 | checkHrvAdBannerVisible(); | 669 | checkHrvAdBannerVisible(); |
| 664 | checkHealthDataAuthCardVisible(); | 670 | checkHealthDataAuthCardVisible(); |
| @@ -871,6 +871,7 @@ class _StressBarChartState extends State<_StressBarChart> { | @@ -871,6 +871,7 @@ class _StressBarChartState extends State<_StressBarChart> { | ||
| 871 | children: [ | 871 | children: [ |
| 872 | Container( | 872 | Container( |
| 873 | margin: const EdgeInsets.only(top: gridTop), | 873 | margin: const EdgeInsets.only(top: gridTop), |
| 874 | + padding: EdgeInsets.only(right: 3), | ||
| 874 | child: BarChart( | 875 | child: BarChart( |
| 875 | BarChartData( | 876 | BarChartData( |
| 876 | minY: 0, | 877 | minY: 0, |
| @@ -1014,7 +1015,7 @@ class _StressBarChartState extends State<_StressBarChart> { | @@ -1014,7 +1015,7 @@ class _StressBarChartState extends State<_StressBarChart> { | ||
| 1014 | ...sleepWidgets, | 1015 | ...sleepWidgets, |
| 1015 | // 手绘 100、50、0 标签在对应的横线上方 | 1016 | // 手绘 100、50、0 标签在对应的横线上方 |
| 1016 | Positioned( | 1017 | Positioned( |
| 1017 | - right: 0, | 1018 | + right: -5, |
| 1018 | top: gridTop - 12, | 1019 | top: gridTop - 12, |
| 1019 | child: Text( | 1020 | child: Text( |
| 1020 | '100', | 1021 | '100', |
| @@ -1023,7 +1024,7 @@ class _StressBarChartState extends State<_StressBarChart> { | @@ -1023,7 +1024,7 @@ class _StressBarChartState extends State<_StressBarChart> { | ||
| 1023 | ), | 1024 | ), |
| 1024 | ), | 1025 | ), |
| 1025 | Positioned( | 1026 | Positioned( |
| 1026 | - right: 0, | 1027 | + right: -6, |
| 1027 | top: gridTop + gridHeight * 0.5 - 12, | 1028 | top: gridTop + gridHeight * 0.5 - 12, |
| 1028 | child: Text( | 1029 | child: Text( |
| 1029 | '50', | 1030 | '50', |
| @@ -1032,7 +1033,7 @@ class _StressBarChartState extends State<_StressBarChart> { | @@ -1032,7 +1033,7 @@ class _StressBarChartState extends State<_StressBarChart> { | ||
| 1032 | ), | 1033 | ), |
| 1033 | ), | 1034 | ), |
| 1034 | Positioned( | 1035 | Positioned( |
| 1035 | - right: 0, | 1036 | + right: -1, |
| 1036 | top: gridBottom - 12, | 1037 | top: gridBottom - 12, |
| 1037 | child: Text( | 1038 | child: Text( |
| 1038 | '0', | 1039 | '0', |
| @@ -416,7 +416,7 @@ class _TodaySummaryCard extends StatelessWidget { | @@ -416,7 +416,7 @@ class _TodaySummaryCard extends StatelessWidget { | ||
| 416 | style: TextStyle( | 416 | style: TextStyle( |
| 417 | color: colors.textPrimary, | 417 | color: colors.textPrimary, |
| 418 | fontSize: 14, | 418 | fontSize: 14, |
| 419 | - fontWeight: FontWeight.w500, | 419 | + fontWeight: FontWeight.w600, |
| 420 | ), | 420 | ), |
| 421 | ), | 421 | ), |
| 422 | const Spacer(), | 422 | const Spacer(), |
| @@ -482,7 +482,7 @@ class _MetricBlock extends StatelessWidget { | @@ -482,7 +482,7 @@ class _MetricBlock extends StatelessWidget { | ||
| 482 | style: TextStyle( | 482 | style: TextStyle( |
| 483 | color: labelColor, | 483 | color: labelColor, |
| 484 | fontSize: 12, | 484 | fontSize: 12, |
| 485 | - fontWeight: FontWeight.w500, | 485 | + fontWeight: FontWeight.w600, |
| 486 | ), | 486 | ), |
| 487 | ), | 487 | ), |
| 488 | const SizedBox(height: 5), | 488 | const SizedBox(height: 5), |
| @@ -252,7 +252,6 @@ class LoginController extends GetxController { | @@ -252,7 +252,6 @@ class LoginController extends GetxController { | ||
| 252 | String accessToken = loginData.accessToken; | 252 | String accessToken = loginData.accessToken; |
| 253 | 253 | ||
| 254 | if (isRegister) { | 254 | if (isRegister) { |
| 255 | - ta.track('success_regist'); | ||
| 256 | final regRes = await _userApi.register(isApple | 255 | final regRes = await _userApi.register(isApple |
| 257 | ? { | 256 | ? { |
| 258 | 'login_type': 'apple', | 257 | 'login_type': 'apple', |
| @@ -325,6 +324,9 @@ class LoginController extends GetxController { | @@ -325,6 +324,9 @@ class LoginController extends GetxController { | ||
| 325 | } | 324 | } |
| 326 | 325 | ||
| 327 | await _userStateService.onLogin(); | 326 | await _userStateService.onLogin(); |
| 327 | + if (isRegister) { | ||
| 328 | + ta.track('success_regist'); | ||
| 329 | + } | ||
| 328 | 330 | ||
| 329 | // 用户登录成功即代表同意了协议,持久化到本地供冷启动时 SDK 初始化判断使用 | 331 | // 用户登录成功即代表同意了协议,持久化到本地供冷启动时 SDK 初始化判断使用 |
| 330 | await Get.find<LocalStorage>().setTermsAgreed(true); | 332 | await Get.find<LocalStorage>().setTermsAgreed(true); |
| @@ -70,6 +70,7 @@ class MembershipOfferController extends GetxController { | @@ -70,6 +70,7 @@ class MembershipOfferController extends GetxController { | ||
| 70 | AppleProductPaymentResult? result, | 70 | AppleProductPaymentResult? result, |
| 71 | ) async { | 71 | ) async { |
| 72 | if (result?.success == true) { | 72 | if (result?.success == true) { |
| 73 | + _trackSuccessPayOrder(); | ||
| 73 | await _completeSuccessfulPurchase(); | 74 | await _completeSuccessfulPurchase(); |
| 74 | return; | 75 | return; |
| 75 | } | 76 | } |
| @@ -81,6 +82,22 @@ class MembershipOfferController extends GetxController { | @@ -81,6 +82,22 @@ class MembershipOfferController extends GetxController { | ||
| 81 | } | 82 | } |
| 82 | } | 83 | } |
| 83 | 84 | ||
| 85 | + void _trackSuccessPayOrder() { | ||
| 86 | + final trackMap = <String, dynamic>{}; | ||
| 87 | + if (Get.arguments?['from'] == 'onboarding') { | ||
| 88 | + trackMap['channel_type'] = '新手引导'; | ||
| 89 | + } else { | ||
| 90 | + trackMap['channel_type'] = Get.arguments?['channel_type'] ?? ''; | ||
| 91 | + } | ||
| 92 | + trackMap['product_type'] = yearlyProduct.value?.appleId; | ||
| 93 | + trackMap['price'] = yearlyProduct.value?.price; | ||
| 94 | + | ||
| 95 | + ta.track( | ||
| 96 | + 'success_doublefeel_pay_order', | ||
| 97 | + properties: trackMap, | ||
| 98 | + ); | ||
| 99 | + } | ||
| 100 | + | ||
| 84 | String _applePaymentFailureMessage(AppleProductPaymentResult result) { | 101 | String _applePaymentFailureMessage(AppleProductPaymentResult result) { |
| 85 | final errorCode = result.errorCode; | 102 | final errorCode = result.errorCode; |
| 86 | if (errorCode != null) { | 103 | if (errorCode != null) { |
| @@ -176,9 +176,9 @@ class V2HealthData { | @@ -176,9 +176,9 @@ class V2HealthData { | ||
| 176 | sleepStateColor(BuildContext context) { | 176 | sleepStateColor(BuildContext context) { |
| 177 | switch (sleepState) { | 177 | switch (sleepState) { |
| 178 | case 1: | 178 | case 1: |
| 179 | - return context.colors.chartBlue; | ||
| 180 | - case 2: | ||
| 181 | return context.colors.chartGreen; | 179 | return context.colors.chartGreen; |
| 180 | + case 2: | ||
| 181 | + return context.colors.chartBlue; | ||
| 182 | case 3: | 182 | case 3: |
| 183 | return context.colors.chartOrange; | 183 | return context.colors.chartOrange; |
| 184 | } | 184 | } |
-
Please register or login to post a comment