feat: Implement Food Camera Screen and Floating Food Overlay
- Added FoodCameraScreen for capturing food images with camera functionality. - Integrated image picker for selecting images from the gallery. - Created FloatingFoodOverlay for quick access to food library and scanning options. - Updated NutritionRadarCard to utilize FloatingFoodOverlay for adding food. - Enhanced ExploreScreen layout and styles for better user experience. - Removed unused SafeAreaView from ExploreScreen. - Updated profile edit screen to remove unnecessary state variables. - Updated avatar image source in profile edit screen. - Added ExpoCamera dependency for camera functionalities.
This commit is contained in:
@@ -70,9 +70,6 @@ export default function EditProfileScreen() {
|
||||
activityLevel: undefined,
|
||||
});
|
||||
|
||||
const [weightInput, setWeightInput] = useState<string>('');
|
||||
const [heightInput, setHeightInput] = useState<string>('');
|
||||
|
||||
// 出生日期选择器
|
||||
const [datePickerVisible, setDatePickerVisible] = useState(false);
|
||||
const [pickerDate, setPickerDate] = useState<Date>(new Date());
|
||||
@@ -115,8 +112,7 @@ export default function EditProfileScreen() {
|
||||
}
|
||||
console.log('loadLocalProfile', next);
|
||||
setProfile((prev) => ({ ...next, avatarUri: prev.avatarUri ?? next.avatarUri ?? null }));
|
||||
setWeightInput(next.weight != null ? String(round(next.weight, 1)) : '');
|
||||
setHeightInput(next.height != null ? String(Math.round(next.height)) : '');
|
||||
|
||||
} catch (e) {
|
||||
console.warn('读取资料失败', e);
|
||||
}
|
||||
@@ -276,7 +272,7 @@ export default function EditProfileScreen() {
|
||||
<View style={{ alignItems: 'center', marginTop: 4, marginBottom: 32 }}>
|
||||
<TouchableOpacity activeOpacity={0.85} onPress={pickAvatarFromLibrary} disabled={uploading}>
|
||||
<View style={styles.avatarCircle}>
|
||||
<Image source={{ uri: profile.avatarUri || 'https://plates-1251306435.cos.ap-guangzhou.myqcloud.com/images/avatar/avatarGirl01.jpeg' }} style={styles.avatarImage} />
|
||||
<Image source={{ uri: profile.avatarUri || 'https://plates-1251306435.cos.ap-guangzhou.myqcloud.com/images/seal-avatar/2.jpeg' }} style={styles.avatarImage} />
|
||||
<View style={styles.avatarOverlay}>
|
||||
<Ionicons name="camera" size={22} color="#192126" />
|
||||
</View>
|
||||
@@ -394,11 +390,11 @@ export default function EditProfileScreen() {
|
||||
} else if (field === 'height') {
|
||||
updatedProfile.height = parseFloat(value) || undefined;
|
||||
setProfile(p => ({ ...p, height: parseFloat(value) || undefined }));
|
||||
setHeightInput(value);
|
||||
|
||||
} else if (field === 'weight') {
|
||||
updatedProfile.weight = parseFloat(value) || undefined;
|
||||
setProfile(p => ({ ...p, weight: parseFloat(value) || undefined }));
|
||||
setWeightInput(value);
|
||||
|
||||
} else if (field === 'activity') {
|
||||
const activityLevel = parseInt(value) as number;
|
||||
updatedProfile.activityLevel = activityLevel;
|
||||
|
||||
Reference in New Issue
Block a user