为什么使用FocusEffect在屏幕未对焦时没有注意到并返回到焦点



我想要的是当用户在应用程序屏幕上或离开应用程序时(在这种情况下是在设置屏幕中(注意到我这样做的原因是因为我想检查用户的权限,如果它是";拒绝";或";"准予";。并且如果其";拒绝";不允许用户导航到其他屏幕;准予";以允许用户导航到其他屏幕。

const PermissionsIntro = ({ navigation}) => {
async function configurePushNotifications() {
const { status } = await Notifications.getPermissionsAsync();
let finalStatus = status;
console.log('status of notification', status)
if(status === 'granted'){
setNavigate(true)
}
else if (finalStatus !== 'granted') {
const { status } = await Notifications.requestPermissionsAsync();
finalStatus = status;
setNavigate(false)
}
else if (finalStatus !== 'granted') {
setNavigate(false)
Alert.alert('Permission required', 'Push notifications need the appropriate permissions.');
return;
}
const pushTokenData = await Notifications.getExpoPushTokenAsync();
setExpoPushToken(pushTokenData.data);
if (Platform.OS === 'android') {
Notifications.setNotificationChannelAsync('default', {
name: 'default',
importance: Notifications.AndroidImportance.DEFAULT,
});
}
}
useFocusEffect(
React.useCallback(() => {
configurePushNotifications();
alert('screen is on application')
console.log('tfffffff')
return () => {
openSettings()
console.log('screen is on settings')
// alert('screen is on settings')
};
}, [])
);
const openSettings = () => {
Linking.openSettings();
};

//onPress function
const confirm = () => {
console.log('navigate', navigate);
if (navigate == true) {
navigation.navigate('CreateProfile');
} 
else {
console.log('turn the permissions to true!');
openSettings();
}
};
}

当我导航到此屏幕时,它向我显示了警报CCD_,但当我转到设置并返回应用程序时,根本不会调用useFocusEffect。

如何修复此错误?

不幸的是,当应用程序进入前台/后台时,useFocusEffect无法运行。在这种情况下,您应该使用AppState。AppState可以告诉你应用程序是在前台还是后台,并在状态更改时通知你。更多信息可以在文档中找到。

相关内容

最新更新