1. Para começar a criar a tela de endereços vamos criar a sua pasta dentro de “screens” e lá vamos criar juntos os arquivos.

  2. Nós vamos começar criando o container padrão que temos.

    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 + 20}px;
    `;
    
  3. Vamos colocar o container dentro do nosso index, já com o fragmento e a navbar.

    import React from "react";
    import { Container } from "./styled";
    import NavBar from "../../components/common/NavBar";
    
    const AllAddress = () => {
      return (
        <>
          <Container></Container>
          <NavBar />
        </>
      );
    };
    
    export default AllAddress;
    
  4. Agora a gente pode colocar o título da tela

    const AllAddress = () => {
      return (
        <>
          <Container>
            <DefaultTitle fontSize={18} title="TODOS OS ENDEREÇOS" />
          </Container>
          <NavBar />
        </>
      );
    };
    
  5. Agora a gente precisa passar para as rotas

    export type PropsNavigationStack = {
      Home: undefined;
      Login: undefined;
      Register: undefined;
      Search: {
        query: string;
      };
      UserProfile: undefined;
      SellerProfile: undefined;
      AllAddress: undefined;
    };
    
    const Stack = createNativeStackNavigator<PropsNavigationStack>();
    
    export type PropsStack = NativeStackNavigationProp<PropsNavigationStack>;
    
    const Routes = () => {
      return (
        <NavigationContainer>
          <Stack.Navigator
            screenOptions={{
              headerShown: false,
            }}
          >
            <Stack.Screen name="Home" component={Home} />
            <Stack.Screen name="Search" component={Search} />
            <Stack.Screen name="Login" component={Login} />
            <Stack.Screen name="Register" component={Register} />
            <Stack.Screen name="UserProfile" component={UserProfile} />
            <Stack.Screen name="SellerProfile" component={SellerProfile} />
            <Stack.Screen name="AllAddress" component={AllAddress} />
          </Stack.Navigator>
        </NavigationContainer>
      );
    };
    
    export default Routes;
    
  6. Agora que temos isso feito a gente pode ir lá em userProfile para colocar a navegação.

  7. Agora, antes de colocarmos o direcionamento a gente vai no styled.ts de FieldsAbled e vamos remover o “AddressText” e vamos colocar dentro do “styled.ts” de Form.

    import styled from "styled-components/native";
    
    export const Container = styled.View`
      width: 100%;
      margin: 10px 0;
    `;
    
    export const EditButtonContainer = styled.View`
      width: 90%;
      align-items: flex-end;
      margin: 0 auto;
      margin-bottom: 10px;
    `;
    
    export const EditButton = styled.TouchableOpacity``;
    
    export const EditImage = styled.Image.attrs({
      resizeMode: "contain",
    })`
      width: 35px;
      height: 35px;
    `;
    
    export const InputContainer = styled.View`
      width: 90%;
      height: 50px;
      border: 1px solid ${({ theme }) => theme.colors.borderColor};
      background-color: ${({ theme }) => theme.colors.background};
      border-radius: 5px;
      margin: 10px auto;
      padding-left: 10px;
      justify-content: center;
    `;
    
    export const AddressText = styled.Text`
      font-size: 20px;
      font-weight: bold;
      margin: 15px 0px;
      text-align: center;
      color: ${({ theme }) => theme.colors.primaryText};
    `;
    
  8. Também vamos remover de index esse AddressText, pois iremos usar ele fora dos dois forms.

    const Form = () => {
      const [editable, setEditable] = useState(false);
    
      return (
        <Container>
          <EditButtonContainer>
            <EditButton
              onPress={() => {
                setEditable(!editable);
              }}
            >
              <EditImage source={edit} />
            </EditButton>
          </EditButtonContainer>
          {!editable ? <FieldsDisabled /> : <FieldsAbled />}
          <AddressText>Gerenciar Endereços</AddressText>
        </Container>
      );
    };
    
  9. Agora nós já temos o nosso AddressText fora dos forms, podemos configurar a navegação no componente para levar o usuário para lá.

    const Form = () => {
      const navigation = useNavigation<PropsStack>();
      const [editable, setEditable] = useState(false);
    
      return (
        <Container>
          <EditButtonContainer>
            <EditButton
              onPress={() => {
                setEditable(!editable);
              }}
            >
              <EditImage source={edit} />
            </EditButton>
          </EditButtonContainer>
          {!editable ? <FieldsDisabled /> : <FieldsAbled />}
          <AddressText
            onPress={() => {
              navigation.navigate("AllAddress");
            }}
          >
            Gerenciar Endereços
          </AddressText>
        </Container>
      );
    };
    
  10. Agora podemos verificar que a navegação está correta. Agora uma coisa que notei é em relação a distância do título para o topo. Não está boa, vamos ajustar, vamos no styled.ts de UserProfile e de AllAddress, que é onde usamos por enquanto esse título, e vamos deixar apenas o statusBarHeight como padding.

    export const Container = styled.ScrollView`
      flex: 1;
      background-color: ${({ theme }) => theme.colors.backgroundLight};
      padding-top: ${statusBarHeight}px;
    `;