Commit 704e39167e923035633a2b3d2d569c945a61d167

Authored by 常守达
1 parent 06be138c

fix(today):埋点及UI修改

@@ -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 }