Agora a gente vai criar a estrutura da tela de chat individual. Vamos começar criando uma pasta chamada “Chat” dentro de “Screens” com o index e o styled
Agora que temos os arquivos, vamos criar o container no styled.
import styled from "styled-components/native";
import Constants from "expo-constants";
const statusBarHeight = Constants.statusBarHeight;
export const Container = styled.View`
flex: 1;
background-color: ${({ theme }) => theme.colors.backgroundLight};
padding-top: ${statusBarHeight}px;
`;
Com o container criado, vamos colocar o navbar, o título não será colocado pois a gente vai ter outra estrutura aqui em cima.
return (
<Container>
<NavBar />
</Container>
);
Agora a gente vai criar o tipo da rota, que também terá any por conta da estrutura que temos de mensagens
export type PropsNavigationStack = {
// ... Outros códigos
AllChats: undefined;
Chat: {
chatInfo: any;
};
};
Podemos então criar a rota de fato
const Routes = () => {
return (
<NavigationContainer>
<Stack.Navigator
screenOptions={{
headerShown: false,
}}
>
{/* Outros códigos */}
<Stack.Screen name="AllChats" component={AllChats} />
<Stack.Screen name="Chat" component={Chat} />
</Stack.Navigator>
</NavigationContainer>
);
};
Agora podemos fazer com que através da navegação do AllChats o usuário venha para cá, vamos lá em ChatCard para poder botar a navegação, e vamos mandar o nosso data para o Chat.
return (
<Container
activeOpacity={0.85}
onPress={() => {
navigation.navigate("Chat", {
chatInfo: data,
});
}}
>
...
</Container>
);
Agora nós vamos dentro de Chat criar a tipagem para receber as informações através da rota
type Props = NativeStackScreenProps<PropsNavigationStack, "Chat">;
const Chat = ({ route }: Props) => {
Com as informações sendo recebidas, vamos dar um console para ver que está tudo correto aqui dentro.
const Chat = ({ route }: Props) => {
console.log(route.params)
Podemos verificar no console que estamos recebendo o data de cada um dos nossos cards, podemos excluir o console