1
resposta

The action 'NAVIGATE' with payload {"name":"Evento"} was not handled by any navigator

Estou tentando criar um Stack.Navigator dentro de um Tab.Navigator, mas aparentemente nenhum navigator parece estar lidando com a action.

Tenho a seguinte estrutura:

Tab.Navigator
    Home (Tab.Screen)
    PertoDeMim (Tab.Screen)

Stack.Navigator
    PertoDeMim (Stack.Screen)
    Evento (Stack.Screen)

O que eu estou tentando fazer é:

  1. Clicar na tab Perto de Mim, a qual, por sua vez me redirecionará para uma tela contendo uma listagem de eventos
  2. Clicar em um dos eventos listados e ser redirecionado para a tela com as informações do evento.

No método responsável por gerar a tela Perto de Mim, estou chamando o componente ListagemEventos.js e é dentro desse componente que estou implementando o useNavigation(), que será usado dentro do atributo onPress do botão no card dos eventos listados com a <FlatList>.

Com o Tab.Navigator está tudo certo. O erro aparece quando eu clico no botão do card do evento.

O erro:

The action 'NAVIGATE' with payload {"name":"Evento"} was not handled by any navigator.

Do you have a screen named 'Evento'?

If you're trying to navigate to a screen in a nested navigator, see 
https://reactnavigation.org/docs/nesting-navigators#navigating-to-a-screen-in-a-nested- 
navigator. 

AppRoutes.js (onde estou criando o Tab.Navigator):

const Tab = createBottomTabNavigator();

export default function AppRoutes() {
    return <NavigationContainer>
        <Tab.Navigator>
            <Tab.Screen name="Home" component={ Home } />
            <Tab.Screen name="Perto de mim" component={ PertoDeMim } />
        </Tab.Navigator>
    </NavigationContainer>
}

EventRoutes.js (onde estrou criando o Stack.Navigator):

const Stack = createNativeStackNavigator();

export default function EventRoutes() {
    return <Stack.Navigator>
        <Stack.Screen name="Perto de mim" component={ PertoDeMim } />
        <Stack.Screen name="Evento" component={ Evento } />
    </Stack.Navigator>
}

ListagemEventos.js (componente chamado em PertoDeMim):

export default function Eventos() {
    const navigation = useNavigation();
    const [title, events] = useEventos();

    const ListTop = () => {
        return <>
            <Text style={ styles.content.title }>{ title }</Text>
        </>
    }

    return <FlatList
        data={ events }
        renderItem={ ({ item }) => {
            return <>
                <View style={ styles.content }>
                    <CardEvento { ...item } onPressed={
                        () => navigation.navigate("Evento")
                    }/>
                </View>
            </>
        }}
        keyExtractor={({id}) => id}
        ListHeaderComponent={ ListTop }
    />;
}

CardEvento.js:

export default function CardEvento({ title, description, date, onPressed }) {
    return <>
        <TouchableOpacity style={ styles.event } onPress={ onPressed }>
            <View style={ styles.event.info_container }>
                <Text style={ styles.event.title }>{ title }</Text>
                <Text style={ styles.event.description }>{ description }</Text>
                <Text style={ styles.event.date }>{ date }</Text>
            </View>
        </TouchableOpacity>
    </>
}
1 resposta

Olá, Samuel! Tudo bem?

Pelo que entendi, você está enfrentando um problema ao tentar navegar para a tela "Evento" ao clicar no botão do card de um evento listado na tela "Perto de Mim". O erro menciona que a ação "NAVIGATE" com o payload {"name":"Evento"} não está sendo tratada por nenhum navegador.

Pelo código que você compartilhou, parece que você está tentando criar um Stack Navigator dentro de um Tab Navigator. No entanto, o problema pode estar relacionado à forma como você está chamando a navegação no componente ListagemEventos.js.

Ao chamar a função navigation.navigate("Evento"), você precisa especificar o nome da tela corretamente. No seu caso, a tela "Evento" está dentro do Stack Navigator, então você precisa fornecer o nome completo da tela, que é "Perto de mim" / "Evento". Portanto, você pode corrigir a chamada da função assim:

() => navigation.navigate("Perto de mim/Evento")

Dessa forma, você está navegando para a tela "Evento" que está dentro do Stack Navigator chamado "Perto de mim".

Espero que isso resolva o problema! Se você tiver mais alguma dúvida, é só perguntar. Estou aqui para ajudar. Bons estudos!