- 1. Conceitos abordados
- 2. Descrição do projeto
- 3. Iniciando o React Native
- 4. Enunciado do Projeto
- 5. Criando o projeto
- Loading e uso de componente ActivityIndicator (loading do React Native).
- Scroll infinito e uso das props:
- onEndReachedThreshold (Carrega mais itens quando chegar em 20% do fim).
- nEndReached={this.loadMore} (Funçao que carrega mais itens).
- Refresh
- WebView: browser inegrado de pagina externa.
Adicionando features ao projeto base.
Projeto base: https://github.com/MaisDennis/GoStack10.0-Modulo-06
Esse projeto foi desenvolvido para o ambiente mobile. No desenvolvimento do projeto foi usado o emulador mobile: Genymotion. Instruções para a instalação do Genymotion: https://docs.rocketseat.dev/ambiente-react-native/android/emulador Iiniciar o GenyMotion:
./genymotion (na pasta genymotion)
Dentro da pasta do projeto, Para iniciar o bundle:
yarn react-native start
ou
yarn react-native start --reset-cache
Redirecionamento de porta para o uso do debugger: Reactotron.
adb reverse tcp:9090 tcp:9090 ( redirecionar à porta do Reactotron)
Iniciar o app:
yarn react-native run-android
obs. O aplicativo foi desenvolvido para o ambiente Android.
Link: https://github.com/Rocketseat/bootcamp-gostack-desafio-06/blob/master/README.md
“Só deseje as coisas as quais você está disposto a lutar”!
Sobre o desafio | Entrega | Licença
Nesse desafio você adicionará novas funcionalidades na aplicação que desenvolvemos ao longo desse módulo.
Adicione um indicator de loading utilizando <ActivityIndicator />
antes de carregar a lista de repositórios favoritados na tela de detalhes do Usuário.
Adicione uma funcionalidade de scroll infinito na lista de repositórios favoritados. Assim que o usuário chegar nos 20% do final de lista, busque pelos items na próxima página e adicione na lista. Seu código ficará da seguinte forma:
<Stars
onEndReachedThreshold={0.2} // Carrega mais itens quando chegar em 20% do fim
onEndReached={this.loadMore} // Função que carrega mais itens
// Restante das props
>
Para requisitar uma nova página no Github utilize um parâmetro page
no fim da URL:
https://api.github.com/users/diego3g/starred?page=2
Adicione uma funcionalidade para quando o usuário arrastar a listagem de repositórios favoritados pra baixo atualize a lista resetando o estado, ou seja, volte o estado da paginação para a página 1 exibindo apenas os 30 primeiros itens.
A funcionalidade "Pull to Refresh" existe por padrão na FlatList e pode ser implementada através do seguinte código:
<Stars
onRefresh={this.refreshList} // Função dispara quando o usuário arrasta a lista pra baixo
refreshing={this.state.refreshing} // Variável que armazena um estado true/false que representa se a lista está atualizando
// Restante das props
>
Crie uma nova página na aplicação que vai ser acessada quando o usuário clicar em um repositório favoritado, essa página deve conter apenas o Header da aplicação. O conteúdo da página será uma WebView, ou seja, um browser integrado que exibe o atributo html_url
presente no objeto do repositório que vem da API do Github.
Documentação de utilização da WebView.
Exemplo de código:
<WebView source={{ uri: repository.html_url }} style={{ flex: 1 }} />
Resultado:
Esse desafio não precisa ser entregue e não receberá correção, mas você pode ver o resultado do código do desafio aqui. Após concluir o desafio, adicionar esse código ao seu Github é uma boa forma de demonstrar seus conhecimentos para oportunidades futuras.
Esse projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Feito com ♥ by Rocketseat 👋 Entre na nossa comunidade!
-
Loading de repositórios:
- Adicionar loading: true, ao state.
- Criar a função: load e separar load de componentDidMount().
- User/styles.js
- Criar o componente Loading = styled.ActivityIndicator.
- color e size são atribuidos via attrs, pois a opção de cor e tamanho não está nas opções padrão do ActivityIndicator
- Criar uma condicional loading com o componente Loading.
-
Scroll infinito:
- Adicionar as props:
<Stars onEndReachedThreshold={0.2} // Carrega mais itens quando chegar em 20% do fim onEndReached={this.loadMore} // Função que carrega mais itens // Restante das props >
- Adicionar page: 1, ao state.
- Criar a função: loadMore.
- Adicionar params: { page } ao api.get.
- Adicionar as props:
-
Pull to Refresh:
- Adicionar refreshing: false, ao state.
- Adicionar a prop:
<Stars onRefresh={this.refreshList} // Função dispara quando o usuário arrasta a lista pra baixo refreshing={this.state.refreshing} // Variável que armazena um estado true/false que representa se a lista está atualizando // Restante das props >
- Criar a função refreshList
- Adicionar ao load: this.setState({ refreshing: false }),
-
WebView
- Guideline: https://github.com/react-native-community/react-native-webview/blob/master/docs/Getting-Started.md
- Add React Native Webview
yarn add react-native-webview
- Criar Repository/index.js
- import WebView e criar o component com source.
- User/index.js
- Criar a função handleNavigate.
- adicionar a prop onPress={this.handleNavigate(item)}.
- item contem todos os params, inclusive html_url que será usado em Repository.index.js
- Lembrar que em User/styles.js, tem que transformar o Starred em RectButton (para usar o navigate).