Я кодирую на реагировать родной (я новичок в этом технологе ie), и я создал всплывающее окно, которое должно появиться только один раз, поэтому, когда я нажал кнопку для go на следующем экране моего приложения появляется всплывающее окно (что хорошо и что я хочу), моя проблема в том, что когда я нажимал кнопку, чтобы сделать снимок (в основном это вид, как обычная камера, чтобы сделать снимок введите описание изображения здесь ) появляется всплывающее окно, и когда я нажимаю кнопку для доступа к фронтальной камере, всплывающее окно также появляется, так что в основном оно работает, но это не то, что я хочу
в итоге, когда я перемещаюсь по этому вид, я хочу, чтобы всплывающее окно появлялось только один раз, и когда я нажимаю другие кнопки, я не хочу, чтобы всплывающее окно отображалось, и это именно моя настоящая проблема
вот весь мой код:
import { Camera } from 'expo-camera';
import * as Permissions from 'expo-permissions';
import { FontAwesome, Ionicons, MaterialCommunityIcons, MaterialIcons } from '@expo/vector-icons';
import React from 'react';
import {Alert, StyleSheet, Text, View, TouchableOpacity, AppRegistry} from 'react-native';
import * as MediaLibrary from 'expo-media-library';
export default class Cam extends React.Component {
constructor (props) {
super (props)
this.state = {
hasPermission : null,
setHasPermission : null,
type : Camera.Constants.Type.back,
statut : null,
hasCamerollPermission: null,
}
}
takePicture = async () => {
if (this.camera) {
this.camera.takePictureAsync().then(data => {
let saveResult = data
// On demande l'acces à la camera roll
let access = MediaLibrary.getPermissionsAsync()
if (access === 'granted') {
MediaLibrary.createAssetAsync(saveResult.uri) // On sauvegade l'image dans la camera ro
console.log("Voici le résultat");
console.log(saveResult)
}else {
console.log("Vous n'avez pas accès à cette option ");
MediaLibrary.requestPermissionsAsync().then(() => {
console.log("Permission autorisée");
MediaLibrary.createAssetAsync(saveResult.uri)
console.log("Voici le résultat");
console.log(saveResult)
}).catch((e) => {
console.log(e);
})
}
});
}
};
render (){
return (
<>
<TouchableOpacity onPress= {Alert.alert(
'Pour de meilleurs résultats, assurez-vous que le chapeau et le stipe du champignon soient bien visibles'
)}>
</TouchableOpacity>
<View style={{ flex: 1 }}>
<Camera style={{ flex: 1 }} type={this.state.type} ref={ref => {this.camera = ref;}}>
<View
style={styles.styleCamera1}>
<TouchableOpacity
style={styles.styleCamera2}
onPress={() => {
console.log("yousri");
if (this.state.type == Camera.Constants.Type.back) {
this.setState ({
type : Camera.Constants.Type.front
})
}else {
this.setState ({
type : Camera.Constants.Type.back
})
}
}}>
<MaterialIcons
name="camera-front"
style={styles.Icons}
/>
</TouchableOpacity>
<TouchableOpacity
style={styles.styleCamera2}
onPress = {() => {
//On verifie que la référence est bien donnée (à la caméra)
var perm = Camera.requestPermissionsAsync()
perm.then(() => {
console.log(".");
this.setState ( {hasPermission : true} )
console.log("Prend une photo");
this.takePicture();
}).catch ((erreur) => {
console.log(erreur);
})
{this.takePicture.bind(this)}
} }
>
<MaterialIcons
name="camera"
style={styles.Icons}
// borderRadius = {0}
/>
</TouchableOpacity>
<TouchableOpacity
onPress={() => {this.props.navigation.navigate('Galerie')}}
style={styles.styleCamera2}
>
<Ionicons
name="ios-photos"
style={styles.Icons}
/>
</TouchableOpacity>
</View>
</Camera>
</View>
</>
)
}
}
const styles = StyleSheet.create({
styleCamera1:{
flex: 1,
backgroundColor: 'transparent',
flexDirection: 'row',
justifyContent: 'space-around',
marginBottom: 20,
},
styleCamera2:{
flex: 0.1,
alignSelf: 'flex-end',
alignItems: 'center',
},
Icons:{
color: "#fff",
fontSize: 45
}
})
здесь указана часть, в которой я написал предупреждение
return (
<>
<TouchableOpacity onPress= {Alert.alert(
'Pour de meilleurs résultats, assurez-vous que le chapeau et le stipe du champignon soient bien visibles'
)}>
</TouchableOpacity>
. Я благодарю вас за помощь