Внутри моего приложения. js, у меня есть навигатор стека, в который каждый объект Stack.Screen условно включен на основе логического isLoggedIn (из глобального контекста).
<NavigationContainer>
<Stack.Navigator screenOptions={{
headerStyle: {
backgroundColor: '#7B1FA2',
},
headerTintColor: '#fff',
headerTitleStyle: {
fontWeight: 'bold',
},
}}>
{loginContext.isLoggedIn == false ? (
<>
<Stack.Screen name='Landing' component={LandingTabs} options={{headerShown: false}}/>
<Stack.Screen name='Home' component={HomeTabs} options={{title: "Bins"}}/>
<Stack.Screen name='Login' component={Login}/>
<Stack.Screen name='SelectFacilityScreen' component={SelectFacility} options={{title: "Select Storage Facility"}}/>
<Stack.Screen name='InitialAppointmentScreen' component={InitialAppointment} options={{title: "Schedule Appointment"}}/>
<Stack.Screen name='AccountInfoScreen' component={UserInfo} options={{title: "Create an Account"}}/>
<Stack.Screen name='BillingInfoScreen' component={BillingInfo} options={{title: "Billing Info"}}/>
</>
) : (
<>
<Stack.Screen name='Home' component={HomeTabs} options={{title: "Bins"}}/>
<Stack.Screen name='StorageInventoryScreen' component={StorageInventory} options={{title: "Deliver"}}/>
<Stack.Screen name='ScheduleAppointmentScreen' component={ScheduleAppointment} options={{title: "Schedule Appointment"}}/>
<Stack.Screen name='ReviewScreen' component={Review} options={{title: "Review"}}/>
<Stack.Screen name='ConfirmationScreen' component={Confirmation} options={{title: "Confirmation"}}/>
<Stack.Screen name='HomeInventoryScreen' component={HomeInventory} options={{title: "Pickup"}}/>
<Stack.Screen name='NewItemScreen' component={NewItem} options={{title: "Pickup"}}/>
<Stack.Screen name='EditAccountScreen' component={Account}/>
</>
)}
</Stack.Navigator>
</NavigationContainer>
Внутри my App. js, у меня тоже есть навигатор вкладок. Намерение состоит в том, чтобы вложить его в навигатор стека, чтобы при посещении экрана Home в навигаторе стека он отображал навигатор вкладок.
<Tab.Navigator screenOptions={({ route }) => ({
tabBarIcon: ({color}) => {
let iconName;
if (route.name === 'Home') {
iconName = 'ios-home';
} else if (route.name === 'Account') {
iconName = 'ios-person';
} else if (route.name === 'Orders') {
iconName = 'ios-list';
}
return <Ionicons name={iconName} size={22} color={color} />;
},
})}
tabBarOptions={{
activeTintColor: 'white',
inactiveTintColor: 'gray',
style: {backgroundColor: '#7B1FA2'}
}}
initialRouteName='Home'
>
<Tab.Screen name="Orders" component={Orders}/>
<Tab.Screen name="Home" component={Home}/>
<Tab.Screen name="Account" component={Account}/>
</Tab.Navigator>
Моя проблема возникает, когда Я пытаюсь выйти из системы. Находясь внутри компонента Account , который находится внутри навигатора вкладок, я пытаюсь обновить контекст isLoggedIn до false, чтобы навигатор стека повторно отображал экраны, чтобы включить Landing , и вы попадете на экран этого компонента. Я подтвердил, что когда isLoggedIn изменяется на false, навигатор стека включает посадку, но не переключается на этот экран. Я предполагаю, что я застрял в навигаторе вкладок. Как мне сделать так, чтобы, когда isLoggedIn становилось ложным, я оставлял компонент Account и возвращался в навигатор стека на компоненте Landing ?