Я не могу установить прозрачный модальный из-за крючка useIsFocused - PullRequest
1 голос
/ 11 марта 2020

Стек навигатор, который живет на нижней вкладке содержит 2 экрана. Один экран содержит встроенную камеру, а другой - модал. Я пытаюсь сделать модальный прозрачным, но это не удается (у него белый фон). Это происходит из-за ловушки useIsFocused, которая монтирует и размонтирует компонент моей камеры. Есть ли у вас какие-либо предложения о том, как я могу решить проблему?

function Scanner(){
  return(
    <Scan.Navigator headerMode='none' mode='modal'
      screenOptions={{
        cardStyle: { backgroundColor: 'transparent'},
        cardOverlayEnabled: true,
      }} 
    >
      <Scan.Screen name='Camera' component={Camera}/>
      <Scan.Screen name='ValidationModal' component= {Validation} />
    </Scan.Navigator>
  )
}

Camera = ({navigation}) => {
    const [flash, setFlash] = React.useState(false)
   const isFocused = useIsFocused();


    const flashOn = ()=> {
        setFlash(prevFlash => !prevFlash)
    }

    barcodeRecognized = ({ barcodes }) => {
        barcodes.forEach(barcode => {

                const kappa = JSON.parse(barcode.data)
                navigation.navigate('ValidationMdal')

        })
    };

        if(isFocused){
            return(
                <RNCamera 
                    ref={ref => {
                        this.camera = ref;
                    }}
                    type={RNCamera.Constants.Type.back} 
                    captureAudio={false}
                    flashMode={flash?RNCamera.Constants.FlashMode.torch:RNCamera.Constants.FlashMode.off} 
                    androidCameraPermissionOptions={{
                        title: 'Permission to use camera',
                        message: 'We need your permission to use your camera',
                        buttonPositive: 'Ok',
                        buttonNegative: 'Cancel',
                        }}
                    style={{  flex: 1,width: '100%'}} 
                    onGoogleVisionBarcodesDetected={this.barcodeRecognized}>

                    <TouchableHighlight style={{position:'absolute', top:10, right:10, borderRadius:50, zIndex:100, backgroundColor:'rgba(255,255,255,0.7)'}} onPress={flashOn} >
                        <Image  source={flash?require("../../images/_Active.png"):require("../../images/_Idle.png")} />
                    </TouchableHighlight>
                </RNCamera>
            )
        }else if(!isFocused){
            return null
        }

}

Validation = ({navigation}) =>{

    return(
        <View style={styles.container}>
            <Image style={{flex:1}} source={require('../../green-tick.png')} resizeMode={'contain'} />
            <TouchableHighlight style={} title='Dismiss' onPress={()=>navigation.goBack()}>
                <Text>OK</Text>
            </TouchableHighlight>
        </View>
    )
}

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