diff --git a/app/(tabs)/statistics.tsx b/app/(tabs)/statistics.tsx
index 6be9e8e..2b6eb71 100644
--- a/app/(tabs)/statistics.tsx
+++ b/app/(tabs)/statistics.tsx
@@ -89,7 +89,6 @@ export default function ExploreScreen() {
// 解构健康数据(支持mock数据)
const mockData = useMockData ? getTestHealthData('mock') : null;
const activeCalories = useMockData ? (mockData?.activeEnergyBurned ?? null) : (healthData?.activeEnergyBurned ?? null);
- const basalMetabolism: number | null = useMockData ? (mockData?.basalEnergyBurned ?? null) : (healthData?.basalEnergyBurned ?? null);
@@ -230,7 +229,6 @@ export default function ExploreScreen() {
date: dateString,
data: {
activeCalories: data.activeEnergyBurned,
- basalEnergyBurned: data.basalEnergyBurned,
hrv: data.hrv,
heartRate: data.heartRate,
activeEnergyBurned: data.activeEnergyBurned,
@@ -459,8 +457,8 @@ export default function ExploreScreen() {
{/* 营养摄入雷达图卡片 */}
@@ -532,8 +530,7 @@ export default function ExploreScreen() {
{/* 基础代谢卡片 */}
diff --git a/components/BasalMetabolismCard.tsx b/components/BasalMetabolismCard.tsx
index e20cdf1..ba72a08 100644
--- a/components/BasalMetabolismCard.tsx
+++ b/components/BasalMetabolismCard.tsx
@@ -1,27 +1,48 @@
-import { AnimatedNumber } from '@/components/AnimatedNumber';
+import { fetchHealthDataForDate } from '@/utils/health';
import { Image } from 'expo-image';
-import React from 'react';
+import React, { useEffect, useState } from 'react';
import { StyleSheet, Text, View } from 'react-native';
interface BasalMetabolismCardProps {
- value: number | null;
- resetToken?: number;
+ selectedDate?: Date;
style?: any;
}
-export function BasalMetabolismCard({ value, resetToken, style }: BasalMetabolismCardProps) {
+export function BasalMetabolismCard({ selectedDate, style }: BasalMetabolismCardProps) {
+ const [basalMetabolism, setBasalMetabolism] = useState(null);
+ const [loading, setLoading] = useState(false);
+
+ // 获取基础代谢数据
+ useEffect(() => {
+ const loadBasalMetabolismData = async () => {
+ if (!selectedDate) return;
+
+ try {
+ setLoading(true);
+ const data = await fetchHealthDataForDate(selectedDate);
+ setBasalMetabolism(data?.basalEnergyBurned || null);
+ } catch (error) {
+ console.error('BasalMetabolismCard: 获取基础代谢数据失败:', error);
+ setBasalMetabolism(null);
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ loadBasalMetabolismData();
+ }, [selectedDate]);
// 获取基础代谢状态描述
const getMetabolismStatus = () => {
- if (value === null || value === 0) {
+ if (basalMetabolism === null || basalMetabolism === 0) {
return { text: '未知', color: '#9AA3AE' };
}
// 基于常见的基础代谢范围来判断状态
- if (value >= 1800) {
+ if (basalMetabolism >= 1800) {
return { text: '高代谢', color: '#10B981' };
- } else if (value >= 1400) {
+ } else if (basalMetabolism >= 1400) {
return { text: '正常', color: '#3B82F6' };
- } else if (value >= 1000) {
+ } else if (basalMetabolism >= 1000) {
return { text: '偏低', color: '#F59E0B' };
} else {
return { text: '较低', color: '#EF4444' };
@@ -49,16 +70,9 @@ export function BasalMetabolismCard({ value, resetToken, style }: BasalMetabolis
{/* 数值显示区域 */}
- {value != null && value > 0 ? (
- Math.round(v).toString()}
- />
- ) : (
- --
- )}
+
+ {loading ? '加载中...' : (basalMetabolism != null && basalMetabolism > 0 ? Math.round(basalMetabolism).toString() : '--')}
+
千卡/日
diff --git a/store/healthSlice.ts b/store/healthSlice.ts
index 6208095..fbc25a6 100644
--- a/store/healthSlice.ts
+++ b/store/healthSlice.ts
@@ -13,7 +13,6 @@ export interface FitnessRingsData {
export interface HealthData {
activeCalories: number | null;
- basalEnergyBurned: number | null;
hrv: number | null;
heartRate: number | null;
activeEnergyBurned: number;
diff --git a/utils/health.ts b/utils/health.ts
index 21ce83c..8ce53a3 100644
--- a/utils/health.ts
+++ b/utils/health.ts
@@ -207,7 +207,6 @@ export type HourlyStandData = {
export type TodayHealthData = {
activeEnergyBurned: number; // kilocalories
- basalEnergyBurned: number; // kilocalories - 基础代谢率
hrv: number | null; // 心率变异性 (ms)
// 健身圆环数据
activeCalories: number;
@@ -608,7 +607,6 @@ export async function fetchMaximumHeartRate(_options: HealthDataOptions): Promis
function getDefaultHealthData(): TodayHealthData {
return {
activeEnergyBurned: 0,
- basalEnergyBurned: 0,
hrv: null,
activeCalories: 0,
activeCaloriesGoal: 350,
@@ -630,13 +628,11 @@ export async function fetchHealthDataForDate(date: Date): Promise