feat(nutrition): 添加营养数据保存功能到HealthKit,包括蛋白质、脂肪和碳水化合物

This commit is contained in:
richarjiang
2025-11-19 14:27:49 +08:00
parent f43cfe7ac6
commit dc205ad56e
7 changed files with 371 additions and 48 deletions

View File

@@ -9,7 +9,6 @@ import 'react-native-reanimated';
import PrivacyConsentModal from '@/components/PrivacyConsentModal';
import { useAppDispatch, useAppSelector } from '@/hooks/redux';
import { useQuickActions } from '@/hooks/useQuickActions';
import { clearAiCoachSessionCache } from '@/services/aiCoachSession';
import { hrvMonitorService } from '@/services/hrvMonitor';
import { notificationService } from '@/services/notifications';
import { setupQuickActions } from '@/services/quickActions';
@@ -137,10 +136,6 @@ function Bootstrapper({ children }: { children: React.ReactNode }) {
await setupQuickActions();
logger.info('✅ 快捷动作初始化完成');
// 4. 清空 AI 教练会话缓存(轻量操作)
clearAiCoachSessionCache();
logger.info('✅ AI 教练缓存清理完成');
// 5. 初始化喝水记录 Bridge
initializeWaterRecordBridge();
logger.info('✅ 喝水记录 Bridge 初始化完成');

View File

@@ -10,6 +10,7 @@ import { addDietRecord, type CreateDietRecordDto } from '@/services/dietRecords'
import { foodLibraryApi, type CreateCustomFoodDto } from '@/services/foodLibraryApi';
import { fetchDailyNutritionData } from '@/store/nutritionSlice';
import type { FoodItem, MealType, SelectedFoodItem } from '@/types/food';
import { saveNutritionToHealthKit } from '@/utils/health';
import { Ionicons } from '@expo/vector-icons';
import { Image } from 'expo-image';
import { useLocalSearchParams, useRouter } from 'expo-router';
@@ -178,7 +179,27 @@ export default function FoodLibraryScreen() {
imageUrl: item.food.imageUrl,
};
// 先保存到后端
await addDietRecord(dietRecordData);
// 然后尝试同步到 HealthKit非阻塞
// 提取蛋白质、脂肪和碳水化合物数据
const { proteinGrams, fatGrams, carbohydrateGrams, mealTime } = dietRecordData;
if (proteinGrams !== undefined || fatGrams !== undefined || carbohydrateGrams !== undefined) {
// 使用 catch 确保 HealthKit 同步失败不影响后端记录
saveNutritionToHealthKit(
{
proteinGrams: proteinGrams || undefined,
fatGrams: fatGrams || undefined,
carbohydrateGrams: carbohydrateGrams || undefined
},
mealTime
).catch(error => {
// HealthKit 同步失败只记录日志,不影响用户体验
console.error('HealthKit 营养数据同步失败(不影响记录):', error);
});
}
}
// 记录成功后,刷新当天的营养数据