Commit a47bbf3a5a606633208d4de2d65c31e63b7791fe

Authored by 常守达
1 parent ebf17359

fix(today):首页健康卡片

@@ -13,6 +13,7 @@ import 'package:doublefeel_flutter/core/network/api/health_api.dart'; @@ -13,6 +13,7 @@ import 'package:doublefeel_flutter/core/network/api/health_api.dart';
13 import 'package:doublefeel_flutter/core/network/api/pay_api.dart'; 13 import 'package:doublefeel_flutter/core/network/api/pay_api.dart';
14 import 'package:doublefeel_flutter/core/network/api/vip_api.dart'; 14 import 'package:doublefeel_flutter/core/network/api/vip_api.dart';
15 import 'package:doublefeel_flutter/core/result/app_result.dart'; 15 import 'package:doublefeel_flutter/core/result/app_result.dart';
  16 +import 'package:doublefeel_flutter/core/services/loading_service.dart';
16 import 'package:doublefeel_flutter/core/services/user_state_service.dart'; 17 import 'package:doublefeel_flutter/core/services/user_state_service.dart';
17 import 'package:doublefeel_flutter/core/util/app_toast.dart'; 18 import 'package:doublefeel_flutter/core/util/app_toast.dart';
18 import 'package:doublefeel_flutter/data/local/user_account_storage.dart'; 19 import 'package:doublefeel_flutter/data/local/user_account_storage.dart';
@@ -234,7 +235,8 @@ class TodayController extends GetMaterialController { @@ -234,7 +235,8 @@ class TodayController extends GetMaterialController {
234 } 235 }
235 } 236 }
236 237
237 - Future<void> requestHealthAuthorization() async { 238 + Future<void> requestHealthAuthorization(
  239 + {bool isFromNoPermissionPage = false}) async {
238 if (GetPlatform.isIOS) { 240 if (GetPlatform.isIOS) {
239 try { 241 try {
240 final result = await _hostApi.checkHealthAppAuthorization(); 242 final result = await _hostApi.checkHealthAppAuthorization();
@@ -243,17 +245,37 @@ class TodayController extends GetMaterialController { @@ -243,17 +245,37 @@ class TodayController extends GetMaterialController {
243 bool success = await _hostApi.requestHealthClientAuthorization(); 245 bool success = await _hostApi.requestHealthClientAuthorization();
244 AppLogger.d("requestHealthClientAuthorization : $success"); 246 AppLogger.d("requestHealthClientAuthorization : $success");
245 if (success) { 247 if (success) {
246 - _performDataUpload(); 248 + await LoadingService.instance.run(() async {
  249 + try {
  250 + final result = await _hostApi.performHealthUpload();
  251 + } catch (error, stackTrace) {
  252 + AppLogger.e('Apple Health upload failed', error, stackTrace);
  253 + }
  254 + });
  255 + result.status = 1;
  256 + checkHealthDataAuthCardVisible();
247 // AppToast.show('刷新完成'); 257 // AppToast.show('刷新完成');
  258 + if (isFromNoPermissionPage) {
  259 + Get.back();
  260 + }
248 } else { 261 } else {
249 // Get.to(NoHealthDataPage( 262 // Get.to(NoHealthDataPage(
250 // onRefresh: _performDataUpload, 263 // onRefresh: _performDataUpload,
251 // )); 264 // ));
252 } 265 }
253 return; 266 return;
254 - }  
255 - if (result.status == 1) {  
256 - _performDataUpload(); 267 + } else if (result.status == 1) {
  268 + await LoadingService.instance.run(() async {
  269 + try {
  270 + final result = await _hostApi.performHealthUpload();
  271 + } catch (error, stackTrace) {
  272 + AppLogger.e('Apple Health upload failed', error, stackTrace);
  273 + }
  274 + });
  275 + checkHealthDataAuthCardVisible(result);
  276 + if (isFromNoPermissionPage) {
  277 + Get.back();
  278 + }
257 return; 279 return;
258 } 280 }
259 // 打开苹果健康 281 // 打开苹果健康
@@ -264,12 +286,13 @@ class TodayController extends GetMaterialController { @@ -264,12 +286,13 @@ class TodayController extends GetMaterialController {
264 } 286 }
265 } 287 }
266 288
267 - void onAuthorizeTap() { 289 + Future<void> onAuthorizeTap() async {
268 if (showHealthDataAuthCardStatus.value == 1) { 290 if (showHealthDataAuthCardStatus.value == 1) {
269 return; 291 return;
270 } else if (showHealthDataAuthCardStatus.value == 0) { 292 } else if (showHealthDataAuthCardStatus.value == 0) {
271 Get.to(NoHealthDataNoPermissionPage( 293 Get.to(NoHealthDataNoPermissionPage(
272 - onRequest: requestHealthAuthorization, 294 + onRequest: () =>
  295 + requestHealthAuthorization(isFromNoPermissionPage: true),
273 )); 296 ));
274 } else { 297 } else {
275 Get.to(NoHealthDataPage( 298 Get.to(NoHealthDataPage(
@@ -295,9 +318,10 @@ class TodayController extends GetMaterialController { @@ -295,9 +318,10 @@ class TodayController extends GetMaterialController {
295 } 318 }
296 } 319 }
297 320
298 - Future<void> checkHealthDataAuthCardVisible() async { 321 + Future<void> checkHealthDataAuthCardVisible(
  322 + [HealthAuthorization? preResult]) async {
299 try { 323 try {
300 - final result = await _hostApi.checkHealthAppAuthorization(); 324 + final result = preResult ?? await _hostApi.checkHealthAppAuthorization();
301 325
302 if (result.status == 1) { 326 if (result.status == 1) {
303 await _performDataUpload(); 327 await _performDataUpload();
@@ -57,21 +57,22 @@ class TodayHealthDataAuthCard extends StatelessWidget { @@ -57,21 +57,22 @@ class TodayHealthDataAuthCard extends StatelessWidget {
57 thickness: 1, 57 thickness: 1,
58 color: colors.border, 58 color: colors.border,
59 ), 59 ),
60 - const SizedBox(height: 20),  
61 GestureDetector( 60 GestureDetector(
62 onTap: onAuthorizeTap, 61 onTap: onAuthorizeTap,
63 behavior: HitTestBehavior.opaque, 62 behavior: HitTestBehavior.opaque,
64 - child: Text(  
65 - l10n.todayHealthDataAuthAction,  
66 - style: TextStyle(  
67 - color: colors.primary,  
68 - fontSize: 12,  
69 - fontWeight: FontWeight.w500,  
70 - height: 1.2, 63 + child: Padding(
  64 + padding: const EdgeInsets.symmetric(vertical: 20),
  65 + child: Text(
  66 + l10n.todayHealthDataAuthAction,
  67 + style: TextStyle(
  68 + color: colors.primary,
  69 + fontSize: 12,
  70 + fontWeight: FontWeight.w500,
  71 + height: 1.2,
  72 + ),
71 ), 73 ),
72 ), 74 ),
73 ), 75 ),
74 - const SizedBox(height: 20),  
75 ], 76 ],
76 ), 77 ),
77 ); 78 );
@@ -348,7 +348,11 @@ class _HrvResearchPageState extends State<_HrvResearchPage> { @@ -348,7 +348,11 @@ class _HrvResearchPageState extends State<_HrvResearchPage> {
348 void initState() { 348 void initState() {
349 super.initState(); 349 super.initState();
350 _pageController = PageController(initialPage: _initialPage); 350 _pageController = PageController(initialPage: _initialPage);
351 - _startAutoScroll(); 351 + WidgetsBinding.instance.addPostFrameCallback((_) {
  352 + if (mounted) {
  353 + _startAutoScroll();
  354 + }
  355 + });
352 } 356 }
353 357
354 void _startAutoScroll() { 358 void _startAutoScroll() {
@@ -180,7 +180,7 @@ class V2HealthData { @@ -180,7 +180,7 @@ class V2HealthData {
180 case 2: 180 case 2:
181 return context.colors.chartGreen; 181 return context.colors.chartGreen;
182 case 3: 182 case 3:
183 - return context.colors.chartPink; 183 + return context.colors.chartOrange;
184 } 184 }
185 return null; 185 return null;
186 } 186 }