Проблема с созданием глобальной навигации в реагировать на натив с SwitchNavigator - PullRequest
0 голосов
/ 30 мая 2019

У меня довольно сложная многоуровневая навигационная структура, которую я пытаюсь прыгать между экранами / детьми. Я хочу, чтобы пользователь мог возвращать пользователя на экран входа в систему всякий раз, когда вызов API возвращает сообщение о том, что информация о сеансе пользователя больше не действительна, или возвращать его на домашний экран после завершения платежа.

У меня есть статический класс, в котором я пытался установить навигацию, а затем вызвать навигацию, но проблема в том, что он не работает для навигации к детям.

Вот моя структура навигации:

  appNavigation: SwitchNavigator{
    LoginFlow: BottomTabNavigator{
      CallUs: Screen,
      Login: Screen,
      LocationsInsecure: StackNavigator{
        // Location Screens
      }
      MoreInfoInsecure: Screen
    }
    MainFlow: BottomTabNavigator{
      Home: Screen,
      Order: StackNavigator{
        // Order Screens
      },
      Payment: StackNavigator{
        // Payment Screens
      },
      Messages: Screen,
      MoreInfo: Screen,
      Locations: StackNavigator{
        // Location Screens
      }
    }
  }

Я установил, используя:

// App.ts
/*
* More code above configuring LoginFlow and MainFlow as outlined
*/
export default createSwitchNavigator(
  {
    'LoginFlow': props => {
      Context.SetNavigation(props.navigation)
      return <LoginFlow />
    },
    'MainFlow': MainFlow
  },
  { initialRouteName: 'LoginFlow' }
)

Я хотел бы иметь возможность позвонить Context.GetNavigation().navigate('Home'), который не работает.

Я также пробовал:

Context.GetNavigation().dispatch(
  NavigationActions.navigate({
    routeName: 'MainFlow',
    action: NavigationActions.navigate({
      routeName: 'Home'
    })
  })
)

Стоит отметить пару вещей:

  • Я могу вызвать Context.GetNavigation().navigate() на TabNavigator, в котором пользователь не работает должным образом.
  • Я могу позвонить this.props.navigation.navigate('PaymentSubscreen') из дома
  • Я могу позвонить this.props.navigation.navigate('Home') из стека платежей

Похоже, что существует жесткий барьер между экранами на SwitchNavigator. Это ожидаемое поведение? Стоит ли вместо этого просто хранить навигацию LoginFlow отдельно и вызывать ее только для истекшего сеанса и использовать навигатор свойств экрана для управления перемещением внутри MainFlow?

...