Find My Coffee – Aula 3

Conteúdos desta aula:

  • Criando o projeto 00:01:58
  • Incluindo o Google Maps 00:07:34
  • Setando nossa localização atual com o Pin 00:10:27
  • Deixando nossa API disponível na internet 00:25:04
  • Adicionando Marcadores de cafeterias mais próximas 00:29:04
  • Criando o Component de estabelecimento selecionado 00:43:06
  • Puxando as avaliações da nossa API 01:05:24
  • Criando o Dropdown de cafés mais próximos 01:17:36
  • Listando os cafés próximos mais amados 01:25:54

 

Acompanhe pelo código fonte para resolver Bugs simples: https://github.com/OneBitCodeBlog/find-my-coffee-mobile-prod

 

Construindo nosso APP Mobile

Referências para se aprofundar no React Native

1 – Documentação do Expo: https://docs.expo.io
2 – Flexbox: https://reactnative.dev/docs/flexbox

 

Criando o projeto

1 – Entre na pasta find-my-coffee, e digite o comando abaixo:

2 – Gere o “Default new app”.

 

Setando o google maps

1 – Instale o google maps com o seguinte comando:

2 – Agora vamos criar as pastas /src/components/GoogleMaps.

3 – Dentro do componente APP cole o seguinte código:

7 – Agora inclua no component APP:

8 – Repare que nosso mapa foi carregado \o/

 

Setando nossa localização atual com o Pin

1 – No componente App, agora vamos setar nossa localização atual com as seguintes inclusões:

2 – Perceba que adicionamos a função setCurrentLocation() e setamos as variáveis ‘latitude’ e ‘longitude’, usando essa função no useEffect e adicionando o atributo “region” ao nosso MapView. Agora seu mapa será carregado na sua localização atual. \o/

3 – Baixe as seguintes imagens (link1 link2 link3), cria a pasta /src/images e coloque nela

4 – Atualize o APP.js colocando:

 

Deixando nossa API disponível na internet

Para podermos testar via mobile o nosso APP, vamos precisar deixar nossa API disponível na internet, a maneira mais fácil de fazer isso em um ambiente de testes é usando o ngrok, com um comando você pluga sua api local com um endpoint.

1 – Baixe o ngrok aqui: https://ngrok.com/download

2 – Execute o seguinte comando em seu terminal (na pasta do ngrok):

Ele retornará algo como:

3 – Copie o endereço https, pois usaremos ele em nosso service.

4 – Na API, em config/environments/development.rb coloque:

5 – Vamos fazer um pequeno ajuste no Service get_google_coffee_list atualizando a URL que ele chama para melhorar nossa busca:

6 – Suba novamente o servidor:

 

Adicionando Marcadores de cafeterias mais próximas

1 – Realize a instalação do axios com o comando abaixo:

2 – Crie a pasta /src/services.

3 – Dentro da pasta /src/services, crie os arquivos ‘establishments_service.js’ e ‘api.js’.

4 – Cole o seguinte código no arquivo ‘api.js’:

5 – Agora cole o seguinte código no arquivo ‘establishments_service.js’.

6 – Atualize o component APP para baixar os cafés e adicionar ao mapa os pins:

8 – Visualize os marcadores nas cafeterias mais próximas \o/

 

Criando o Component de estabelecimento selecionado

1 – Atualize o establishment service colocando:

2 – Agora crie a pasta /src/components/Establishment.

3 – Dentro desse componente Establishment, crie o arquivo ‘index.js’ e cole o seguinte código nele:

4 – Vamos baixar os detalhes do café, no Component Establishment coloque:

5 – Agora vamos incluir as informações básicas do Establishment no Component e alguns estilos:

6 – Agora vamos setar o horário de funcionamento e endereço do nosso estabelecimento. Seu código ficará do seguinte jeito:

7 – Repare que no React Native não há <hr />. Para isso, foi necessário adicionar a classe <Separator />, que possui o mesmo comportamento.

8 – Depois de instalado, vamos adicionar nosso rodapé com ícones do Font Awesome. Adicione o seguinte no seu código:

9 – No component APP vamos importar o Establishment e também vamos preencher um café como selecionado quando ele for clicado:

10 – Seu Component Establishment deve ficar:

 

 

Puxando as avaliações, da nossa API

1 – Crie um service chamado ‘store.js’ e cole o seguinte código:

2 – Services criados!! Agora vá no componente /src/components/Establishment e crie a pasta ‘ListRatings’.

3 – Dentro da pasta ‘ListRatings’, crie o arquivo ‘index.js’ e cole o seguinte código nele:

3 – Essa é a estrutura básica dele. Esse componente listará nossas avaliações pela API.

4 – Agora vamos puxar as informações de nossa API. Vamos conectar nosso componente ao service, armazenar os dados da resposta ao estado “ratings”, setar a quantidade de avaliações no código e o CSS do seguinte jeito:

5 – Agora, no arquivo /src/components/Establishment/index.js, coloque a seguinte importação e componente:

6 – Agora, para continuar, precisaremos listar as estrelas das avaliações nos nossos componentes. Para isso, vamos instalar o componente Ratings do Materialize. Execute os seguintes comandos no seu terminal:

7 – Pronto! Agora, no componente ListRatings, adicione as estrelas do Materialize:

8 – Agora vamos listar nossas avaliações. Substitua o código do componente ListRatings pelo código abaixo:

9 – Seu component ListRating deve ficar:

10 – Seu component Establishment deve ficar:

 

 

Criando o Dropdown de cafés mais próximos

1 – Primeiro, vamos criar nosso service. Acesse a pasta /src/services/Local e crie o arquivo ‘store.js’.

2 – Atualize o service store:

3 – Agora crie o componente /src/components/NearstCoffees.

4 – O componente NearstCoffees terá a seguinte estrutura básica:

5 – Vamos instalar o FontAwesome para usarmos alguns ícones:

6 – No component NearestCoffees inclua:

7 – Agora vamos incluir o dropdown para mostrar os cafés mais próximos:

9 – Vamos incluir um separador no component:

10 – No component APP import o novo Component:

11 – Seu component APP deve ficar:

12 – Seu Component NearestCoffees deve ficar:

 

 

Listando os cafés mais próximos

1 – Crie o component ListCoffees dentro da pasta /src/components/NearestCoffees com o arquivo index.js. 2 – Coloque a estrutura básica nele:

3 – Vamos baixar os cafés próximos colocando nele:

4 – Vamos incluir o separador e o StartRating:

5 – Agora vamos exibir os reviews, inclua no component:

5 – Finalmente vamos incluir o ListCoffees no component NearestCoffees, coloque:

6 – Seu component ListCoffees deve ficar:

7 – Seu component ListCoffees deve ficar:

8 – Suba o projeto e teste rodando: