import React, { useEffect } from 'react'; import { Platform } from "react-native"; import { Button, TextInput, Dialog, Portal, Avatar, useTheme } from "react-native-paper"; import { Asset } from 'expo-asset'; import * as FileSystem from 'expo-file-system'; import * as ImagePicker from "expo-image-picker"; interface ProfileScreenProps { visible: boolean; id: string; name: string; setName: (name: string) => void; image: string; setImage: (image: string) => void; onClose: () => void; } const ProfileScreen: React.FC = ({ visible, name, setName, image, setImage, onClose }) => { const { colors } = useTheme(); useEffect(() => { const loadDefaultImage = async () => { const asset = Asset.fromModule(require("../assets/images/default_profile_image.png")); await asset.downloadAsync(); if (Platform.OS === 'web') { const response = await fetch(asset.uri); const blob = await response.blob(); return new Promise((resolve) => { const reader = new FileReader(); reader.onloadend = () => { const base64String = reader.result?.toString().replace(/^data:.+;base64,/, ''); resolve(base64String); if (typeof base64String == "string") { setImage(base64String); } else { throw new Error("Failed to load asset."); } }; reader.readAsDataURL(blob); }); } else if (asset.uri) { const base64 = await FileSystem.readAsStringAsync(asset.uri, { encoding: FileSystem.EncodingType.Base64 }); setImage(base64); } }; const loadImage = async () => { if (!image) { await loadDefaultImage(); } }; loadImage().then(r => null); }, [image]); const pickImage = async () => { let result = await ImagePicker.launchImageLibraryAsync({ base64: true }); if (!result.canceled && result.assets.length > 0) { setImage(result.assets[0].base64 || image); } }; return ( Edit Your Profile /* Edit Your Profile */ ); }; export default ProfileScreen;