как сделать, чтобы всплывающее окно (оповещение) появлялось только один раз, а не несколько раз? - PullRequest
0 голосов
/ 17 апреля 2020

Я кодирую на реагировать родной (я новичок в этом технологе 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>



. Я благодарю вас за помощь

1 Ответ

0 голосов
/ 17 апреля 2020

Вы должны попробовать:

 <TouchableOpacity onPress= {()=> Alert.alert(
  'Pour de meilleurs résultats, assurez-vous que le chapeau et le stipe du champignon soient bien visibles'
  )}>

</TouchableOpacity>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...